regmap_bulk_write()
时间: 2023-10-02 10:08:21 浏览: 288
regmap_bulk_write() 是 regmap 子系统提供的函数之一,用于向设备的多个寄存器写入数据。其函数原型如下:
```
int regmap_bulk_write(struct regmap *map, unsigned int reg, const void *val,
size_t val_count);
```
参数解释如下:
- map:regmap 实例指针;
- reg:写入的起始寄存器地址;
- val:写入的数据缓冲区指针;
- val_count:写入的数据长度。
该函数会将数据缓冲区中的数据按字节依次写入设备的多个寄存器中,写入顺序为从起始寄存器地址开始,依次递增寄存器地址。如果需要写入的数据跨越多个寄存器,则需要保证 val 缓冲区中的数据顺序与寄存器地址顺序一致。
该函数返回值为 0 表示成功,否则表示失败。如果失败,可以通过返回的错误码定位故障原因。
示例代码如下:
```
u8 data[4] = {0x12, 0x34, 0x56, 0x78};
ret = regmap_bulk_write(map, 0x10, data, 4);
if (ret) {
dev_err(&client->dev, "Failed to write to regmap: %d\n", ret);
return ret;
}
```
该代码将 data 缓冲区中的 4 个字节按顺序写入起始地址为 0x10 的 4 个寄存器中。
相关问题
regmap__write()
`regmap_write()` 是 Linux 内核中 regmap API 提供的一个函数,用于向 regmap 中的寄存器写入数据。它的声明如下:
```
int regmap_write(struct regmap *map, unsigned int reg, unsigned int val);
```
其中,`map` 表示要写入的 regmap,`reg` 表示要写入的寄存器地址,`val` 表示要写入的数据。
该函数会根据 regmap 中的配置检查寄存器是否可写,并将数据写入寄存器中。如果写入成功,函数返回 0;否则返回负数错误代码。
需要注意的是,`regmap_write()` 函数写入的是单个寄存器的数据。如果要一次性写入多个寄存器,可以使用 `regmap_bulk_write()` 函数。
regmap_block_write()
regmap_block_write() 是一个 Linux 内核中的 API,用于在寄存器映射中执行一个写入操作。该函数的定义在 include/linux/regmap.h 头文件中,其函数原型如下:
```
int regmap_block_write(struct regmap *map, unsigned int reg, const void *val, size_t val_count);
```
该函数接受四个参数:
- `map`:一个指向 regmap 结构体的指针,表示要进行写入操作的寄存器映射。
- `reg`:一个无符号整数,表示要写入的寄存器地址。
- `val`:一个指向数据缓冲区的指针,表示要写入的数据。
- `val_count`:一个 size_t 类型的整数,表示要写入的数据的数量。
该函数的返回值为写入操作所使用的字节数,如果出现错误则返回一个负数。在写入操作完成之后,寄存器映射中对应的寄存器的值将被更新为新写入的值。
需要注意的是,该函数只适用于一次写入的数据量较小的情况。如果要进行大量数据的写入操作,建议使用 regmap_bulk_write() 函数。
阅读全文