i2ctransfer -f -y 8 w4@0x68 0x32 0x02 0x04 0x1e r5 转换成使用 regmap 代码
时间: 2024-02-19 13:00:58 浏览: 111
假设你正在使用 Linux 内核,且已经添加了 I2C 设备驱动和 regmap 子系统支持,以下是将该命令转换成使用 regmap 代码的步骤:
1. 在设备树中添加 I2C 设备节点,并指定设备地址为 0x68。
2. 在设备驱动中使用 regmap_init_i2c() 函数初始化 regmap 实例,示例代码如下:
static const struct regmap_config reg_cfg = {
.reg_bits = 8,
.val_bits = 8,
.max_register = 0x1e,
};
static const struct i2c_device_id my_id[] = {
{ "my_i2c_device", 0 },
{ }
};
MODULE_DEVICE_TABLE(i2c, my_id);
static int my_i2c_probe(struct i2c_client *client,
const struct i2c_device_id *id)
{
struct regmap *map;
int ret;
map = devm_regmap_init_i2c(client, ®_cfg);
if (IS_ERR(map)) {
dev_err(&client->dev, "Failed to initialize regmap: %ld\n",
PTR_ERR(map));
return PTR_ERR(map);
}
ret = regmap_write(map, 0x32, 0x02041e);
if (ret) {
dev_err(&client->dev, "Failed to write to regmap: %d\n", ret);
return ret;
}
return 0;
}
static struct i2c_driver my_i2c_driver = {
.driver = {
.name = "my_i2c_device",
},
.probe = my_i2c_probe,
.id_table = my_id,
};
module_i2c_driver(my_i2c_driver);
3. 在 my_i2c_probe() 函数中,使用 regmap_write() 函数写入数据,其中第一个参数为寄存器地址,第二个参数为要写入的数据。在本例中,寄存器地址为 0x32,要写入的数据为 0x02041e。
这样,就可以使用 regmap 代码替代原来的命令行操作。
阅读全文