regmap_raw_write()
时间: 2023-07-04 16:17:03 浏览: 85
read_write_image _raw.rar_.raw_RAW_addb7v_raw image_read write i
regmap_raw_write() 是 regmap 框架中用于直接向寄存器写入原始数据的函数。其函数原型如下:
```
int regmap_raw_write(struct regmap *map, unsigned int reg, const void *val,
size_t val_len);
```
其中,map 是一个指向 regmap 结构体的指针,reg 是要写入的寄存器地址,val 是一个指向要写入的数据的指针,val_len 是要写入的数据长度。
下面是一个示例,演示如何使用 regmap_raw_write() 函数向 I2C 设备的寄存器写入数据:
```
#include <linux/regmap.h>
#include <linux/i2c.h>
#include <linux/i2c-dev.h>
int write_i2c_reg(struct regmap *map, u8 reg, u8 *data, u8 len)
{
int ret;
ret = regmap_raw_write(map, reg, data, len);
if (ret < 0) {
dev_err(map->dev, "Failed to write to I2C device\n");
return ret;
}
return 0;
}
int probe(struct i2c_client *client)
{
struct regmap_config config = {
.reg_bits = 8,
.val_bits = 8,
.max_register = 0xff,
.write_flag_mask = 0x80,
.cache_type = REGCACHE_NONE,
};
struct regmap *map;
int ret;
u8 data[2] = {0xAA, 0xBB};
map = devm_regmap_init_i2c(client, &config);
if (IS_ERR(map)) {
ret = PTR_ERR(map);
dev_err(&client->dev, "Failed to initialize regmap: %d\n", ret);
return ret;
}
ret = write_i2c_reg(map, 0x12, data, 2);
if (ret) {
dev_err(&client->dev, "Failed to write register\n");
return ret;
}
return 0;
}
```
在此示例中,probe() 函数使用 devm_regmap_init_i2c() 函数初始化一个 regmap 结构体,然后调用 write_i2c_reg() 函数向指定寄存器写入数据。write_i2c_reg() 函数通过调用 regmap_raw_write() 函数来实现,其中,map 是一个指向 regmap 结构体的指针,reg 是要写入的寄存器地址,data 是一个指向要写入的数据的指针,len 是要写入的数据长度。如果写入操作失败,则函数会返回错误码。
阅读全文