unsigned int reg, void *val, size_t len); int regmap_write(struct regmap *regmap, unsigned int reg, const void *val, size_t len); int main() { struct regmap *regmap; unsigned int reg; int ret; uint32_t data; // 初始化regmap... ...
// drivers/base/regmap/regmap-i2c.cstaticconststructregmap_bus*regmap_get_i2c_bus(structi2c_client*i2c,conststructregmap_config*config){if(i2c_check_functionality(i2c->adapter,I2C_FUNC_I2C))return®map_i2c;// ...returnERR_PTR(-ENOTSUPP);}staticstructregmap_busregmap_i2c={.write=regmap_i2c_...
1、Regmap 申请与初始化 regmap 支持多种物理总线,比如 I2C 和 SPI,我们需要根据所使用的接口来选择合适的 regmap 初始化函数。Linux 内核提供了针对不同接口的 regmap初始化函数。 SPI 接口初始化函数为 regmap_init_spi I2C 接口的初始化函数为 regmap_init_i2c 不管是什么接口,全部使用 regmap_exit 这个函数来...
例如,在用户空间应用程序中,可以使用libregmap库来简化regmap的使用。 系统调用和内核模块:在某些情况下,系统调用和内核模块也可以使用regmap来访问设备寄存器。例如,在内核模块中,可以使用regmap_init、regmap_write和regmap_read等函数来操作设备寄存器。 总之,regmap在Linux内核中被广泛应用于设备驱动程序、用户空间应用程...
如果具有相同读写属性的设备 IO 寄存器是连续的,则 struct regmap_access_table 要方便很多,否则用回调函数比较方便。Linux 设备驱动程序,可以通过 reg_read 和reg_write 字段配置设备 IO 寄存器的读写操作。对于 I2C、SPI、I3C、AC97 和 mmio 等标准总线,Linux 内核已经提供相应的设备 IO 寄存器的读写操作。对于...
Linux引入regmap是为了统一管理内核的i2c,spi等总线,将i2c、spi驱动做了一次重构,把I/O读写的重复逻辑在regmap中实现。只需初始化时指定总线类型、寄存器位宽等关键参数,即可通过regmap模型接口来操作器件寄存器。 将i2c、spi、mmio、irq等抽象出统一接口regmap_read,regmap_write,regmap_update_bits等接口,从而提高代码...
regmap_bulk_write (structregmap* map , unsigned int reg, const void *val, size_t val_count) 函数参数和返回值含义如下: map:要操作的 regmap。 reg:要写的第一个寄存器。 val:要写的寄存器数据缓冲区。 val_count:要写的寄存器数量。 返回值:0,写成功;其他值,读失败。
1. regmap_write(struct regmap *map, int reg, int val); // 向reg写入val 2. regmap_raw_write(struct regmap *map, int reg, void *val, size_t val_len); // 向reg写入指定长度的数据,数据存放在val中 3. regmap_read(struct regmap *map, int reg, int *val); // 读取reg的数据到val中...
在regmap_read 和 regmap_write 的基础上还衍生出了其他一些 regmap 的 API 函数,首先是regmap_update_bits 函数。看名字就知道,此函数用来修改寄存器指定的 bit,函数原型如下: 代码语言:javascript 代码运行次数:0 复制 Cloud Studio代码运行 intregmap_update_bits(struct regmap*map,unsigned int reg,unsigned int...
/* 27+i: write mask, 11+i: value */ value = BIT(27 + bus_nr) | BIT(11 + bus_nr); ret = regmap_write(grf, i2c->soc_data->grf_offset, value); if (ret != 0) { dev_err(i2c->dev, "Could not write to GRF: %d