Linux 内核将 regmap 框架抽象为 regmap 结构体 , 这个结构体定义在文件 drivers/base/regmap/internal.h 中。 3、regmap_config 结构体 顾名思义,regmap_config 结构体就是用来初始化 regmap 的,这个结构体也定义在include/linux/regmap.h 文件中。 【文章福利】小编推荐自己的Linux内核技术交流群:【977878001】...
}// regmap-spi.c 在regmap_init函数中找到如下所示内容: if(config->read_flag_mask || config->write_flag_mask) {map->read_flag_mask = config->read_flag_mask;map->write_flag_mask = config->write_flag_mask; }elseif(bus) {map->read_flag_mask = bus->read_flag_mask; } 可以看到初始...
// 1.构建regmap_config结构staticconststructregmap_configmlx90632_regmap={// 寄存器地址位宽.reg_bits =16,// 寄存器值的位宽,必须填写.val_bits =16,// 可选,判断寄存器是否可写,可读,是否可缓冲等回调.volatile_table = &mlx90632_volatile_regs_tbl, .rd_table = &mlx90632_readable_regs_tbl, .wr_...
drivers/base/regmap/internal.h 中。 3、regmap_config 结构体 顾名思义,regmap_config 结构体就是用来初始化 regmap 的,这个结构体也定义在include/linux/regmap.h文件中。
Linux中的regmap是一个用于操作硬件寄存器的通用接口,它减少了I/O驱动上的重复逻辑代码,并提供了统一的访问方式。regmap自Linux 3.1版本引入以来,经历了多个版本的变化,主要改进和新增功能如下: 引入版本:regmap最初在Linux 3.1版本中被引入。 主要结构体:regmap_config结构体代表了设备的寄存器配置信息,包括寄存器地址...
我们一般会在 probe 函数中初始化 regmap_config,然后申请并初始化 regmap。 2、regmap 设备访问 API函数 不管是 I2C 还是 SPI 等接口,还是 SOC 内部的寄存器,对于寄存器的操作就两种:读和写。regmap 提供了最核心的两个读写操作:regmap_read和 regmap_write。这两个函数分别用来读/写寄存器。
1. struct regmap_config { 2. int reg_bits; // 寄存器地址的位数,必须配置,例如I2C寄存器地址位数为 8 3. int pad_bits; // 寄存器值的位数,必须配置 4. int val_bits; 5. bool (*writeable_reg)(struct device *dev, unsigned int reg); // 可写寄存器回调,maintain一个可写寄存器表 ...
创建regmap配置结构体:接下来,你需要创建一个regmap配置结构体,其中包含了寄存器地址、值和其他相关信息。例如: structregmap_configmy_regmap_config={.reg_bits=8,.val_bits=8,.max_register=0xFF,.cache_type=REGCACHE_RBTREE,.reg_defaults=my_reg_defaults,.num_reg_defaults=ARRAY_SIZE(my_reg_defaults)...
顾名思义,regmap_config 结构体就是用来初始化 regmap 的,这个结构体也定义在include/linux/regmap.h 文件中。 3、Regmap 操作函数 1、Regmap 申请与初始化 regmap 支持多种物理总线,比如 I2C 和 SPI,我们需要根据所使用的接口来选择合适的 regmap 初始化函数。Linux 内核提供了针对不同接口的 regmap 初始化函数...
const struct regmap_config *config) 读写I2C: int regmap_read(struct regmap *map, unsigned int reg, unsigned int *val);//读取reg中的值,保存在val中 int regmap_raw_read(struct regmap *map, unsigned int reg, void *val, size_t val_len); //从reg中读取val_len长度的数据,保存在val中 ...