在引入ragmap API之前,SPI内核和I2C内核是独立的,二者有需要冗余代码。在引入Regmap API之后,无论是SPI还是I2C设备,只需要初始化配置Regmap,旧可以处理所有的读写修改操作。
Regmap API很简单,其中最重要的是两个结构struct regmap_config(代表regmap配置) 和struct regmap(代表regmap实例本身)。
1. regmap_config结构
struct regmap_config在驱动程序生命周期内保存Regmap配置,这些设置会影响读/写操作。
struct regmap_config {
char *name;
int reg_bits; // 寄存器地址的位数
int reg_stride;
int pad_bits;
int val_bits; // 寄存器值的位数
bool (*writable_reg)(struct device *dev, uint reg); // 在写入Reg之前,会调用检查是否可写
bool (*readable_reg)(struct device *dev, uint reg);// 在写入Reg之前,会调用检查是否可读
bool (*volatile_reg)(struct device *dev, uint reg); // 检查寄存器是否是易失的,确定是否使用缓存
bool (*precious_reg)(struct device *dev, uint reg);
regmap_lock lock;
regmap_unlock unlock;
void *lock_arg;
int (*reg_read)(void *context, uint reg, uint *val); // 在寄存器不支持简单的I2c/SPI读取操作时,需要自定

RegmapAPI通过统一的接口简化了对SPI和I2C设备寄存器的读写操作,减少了冗余代码。它包括regmap_config结构体,用于配置设备的寄存器属性,并提供了如regmap_write、regmap_read等便捷函数。Regmap还支持缓存机制和多种缓存类型,优化了读取性能。
最低0.47元/天 解锁文章
869

被折叠的 条评论
为什么被折叠?



