regmap 会自动选择 i2c_smbus_write_i2c_block_data 函数进行 I2C 写操作,并将数据写入指定的寄存器中 实例
时间: 2024-02-18 10:59:50 浏览: 80
SMBus.rar_I2C C51_SMBUS 读写_eeprom_smbus
是的,您理解得非常正确。当您使用 `regmap_write` 函数写入数据时,`regmap` 会自动选择适当的底层函数进行操作,其中包括 `i2c_smbus_write_i2c_block_data` 函数进行 I2C 写操作。下面是一个示例,展示了如何使用 `regmap` 实现 I2C 写操作。
```c
#include <linux/i2c.h>
#include <linux/regmap.h>
struct i2c_client *client;
struct regmap *regmap;
// 初始化 I2C 设备
client = i2c_new_device(adapter, &board_info);
// 创建 regmap 实例
regmap = devm_regmap_init_i2c(client, ®map_config);
// 向指定寄存器写入数据
regmap_write(regmap, reg_offset, data);
```
在这个示例中,`i2c_new_device` 函数用于创建一个新的 I2C 设备,`devm_regmap_init_i2c` 函数用于创建一个新的 `regmap` 实例,`regmap_write` 函数用于向指定的寄存器写入数据。在 `devm_regmap_init_i2c` 函数中,`regmap_config` 参数用于指定 regmap 的配置信息,包括 `.reg_write` 函数和其他参数。
当您调用 `regmap_write` 函数时,`regmap` 会根据寄存器描述信息自动选择合适的底层函数进行操作,其中包括 `i2c_smbus_write_i2c_block_data` 函数进行 I2C 写操作。因此,您无需手动调用 `i2c_smbus_write_i2c_block_data` 函数,`regmap` 会自动完成这个操作。
阅读全文