regmap_i2c_read() 实例
时间: 2024-01-17 08:05:35 浏览: 164
I2C_example
下面是一个使用`regmap_i2c_read()`函数来读取I2C设备寄存器值的示例:
```
#include <linux/module.h>
#include <linux/i2c.h>
#include <linux/regmap.h>
static const struct regmap_config my_regmap_config = {
.reg_bits = 8,
.val_bits = 8,
.max_register = 0xFF,
};
static int my_probe(struct i2c_client *client, const struct i2c_device_id *id)
{
struct regmap *map;
int val;
map = devm_regmap_init_i2c(client, &my_regmap_config);
if (IS_ERR(map)) {
dev_err(&client->dev, "regmap initialization failed\n");
return PTR_ERR(map);
}
/* 读取寄存器的值 */
regmap_read(map, 0x10, &val);
printk(KERN_INFO "Read value from register 0x10: %d\n", val);
return 0;
}
static const struct i2c_device_id my_idtable[] = {
{ "my_device", 0 },
{ }
};
MODULE_DEVICE_TABLE(i2c, my_idtable);
static struct i2c_driver my_driver = {
.driver = {
.name = "my_device",
},
.probe = my_probe,
.id_table = my_idtable,
};
module_i2c_driver(my_driver);
MODULE_AUTHOR("Your Name");
MODULE_DESCRIPTION("I2C driver example");
MODULE_LICENSE("GPL");
```
在上面的示例中,我们定义了一个`regmap_config`结构体,指定了寄存器位数、值位数和最大寄存器地址。在`my_probe()`函数中,我们使用`devm_regmap_init_i2c()`函数初始化了一个`regmap`实例,并使用`regmap_read()`函数读取了地址为0x10的寄存器的值。需要注意的是,在使用`regmap_i2c_read()`函数之前,我们需要先通过`devm_regmap_init_i2c()`函数创建一个`regmap`实例。
阅读全文