regmap_i2c_smbus_i2c_write()
时间: 2023-06-28 08:15:55 浏览: 106
regmap_i2c_smbus_i2c_write() 是 Linux 内核中的一个函数,用于通过 I2C 总线向寄存器映射中写入数据。其函数原型如下:
```
int regmap_i2c_smbus_i2c_write(struct regmap *map, unsigned int reg,
unsigned int val);
```
其中,map 是一个 regmap 结构体指针,表示要进行寄存器写入操作的寄存器映射;reg 是一个无符号整型数,表示要写入的寄存器地址;val 是一个无符号整型数,表示要写入的数据。
函数返回 0 表示写入成功,否则返回一个负数错误码。
该函数的作用是向指定的寄存器地址写入数据。使用该函数前,需要先初始化 I2C 总线和寄存器映射等相关内容。在进行寄存器写入操作时,需要指定要写入的寄存器地址和要写入的数据。
相关问题
regmap()使用 regmap_i2c_smbus_i2c_write regmap_i2c_smbus_i2c_read 读设备温度
好的,让我解释一下这个问题。
首先,regmap()是一个Linux内核提供的寄存器映射框架,用于访问设备的寄存器。regmap_i2c_smbus_i2c_write和regmap_i2c_smbus_i2c_read是regmap的两个函数,用于通过I2C总线读写设备寄存器。
如果要读取设备的温度,可以通过以下步骤实现:
1. 使用regmap_init_i2c()函数初始化I2C总线上的regmap。
2. 使用regmap_update_bits()函数设置寄存器,使设备开始转换温度。
3. 使用regmap_i2c_smbus_i2c_read()函数读取温度寄存器的值。
4. 根据设备的温度寄存器格式,计算温度值。
需要注意的是,具体的寄存器地址和格式需要根据设备手册来确定。
regmap_i2c_smbus_i2c_write() 使用实例
regmap_i2c_smbus_i2c_write() 是linux内核中一种用于通过I2C总线向寄存器映射中写入数据的函数。使用实例如下:
```
#include <linux/i2c.h>
#include <linux/regmap.h>
struct regmap *map;
struct i2c_client *client;
// 初始化i2c_client
client = i2c_new_client_device(adapter, &addr);
if (!client)
return -ENODEV;
// 创建regmap
map = devm_regmap_init_i2c(client, ®s_config);
if (IS_ERR(map)) {
ret = PTR_ERR(map);
dev_err(&client->dev, "Failed to allocate regmap: %d\n", ret);
return ret;
}
// 使用regmap_i2c_smbus_i2c_write()写入数据
ret = regmap_i2c_smbus_i2c_write(map, reg, val);
if (ret) {
dev_err(&client->dev, "Failed to write reg: %d\n", ret);
return ret;
}
```
其中,adapter 是 i2c_adapter 结构体,addr 是I2C设备的地址,regs_config 是用于初始化regmap的配置参数,reg 是需要写入的寄存器地址,val 是需要写入的数据。调用该函数后,会自动将 reg 和 val 一起写入到对应的寄存器中。
阅读全文