• 正文
  • 相关推荐
申请入驻 产业图谱

飞凌嵌入式ElfBoard ELF 1板卡-Regmap使用

2025/05/22
880
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

一、regmap_config用来配置regmap对象

常见的结构体成员如下:

int reg_bits;// 寄存器地址的位数

int val_bits;// 存储寄存器的位数

unsigned int max_register; // 最大寄存器地址,防止访问越界

int (*reg_read)(void *context, unsigned int reg, unsigned int *val);//读寄存器

int (*reg_write)(void *context, unsigned int reg, unsigned int val);//写寄存器

u8 read_flag_mask;// 读寄存器掩码

u8 write_flag_mask;// 写寄存器掩码

二、regmap初始化

Regmap支持多种硬件接口的初始化API,最常用的为I2CSPI,初始化函数原型如下:

regmap_init_i2c(struct i2c_client *i2c, struct regmap_config *config);

regmap_init_spi(struct spi_device *spi, strcut regmap_config *config);

regmap_init_spi()"函数接受一个指向SPI设备的指针(spi)和Regmap配置参数(config)。它首先分配内存以存储Regmap对象,然后设置Regmap的相关字段和操作函数,以便与SPI总线进行通信。最后,函数返回指向初始化的Regmap对象的指针

三、使用regmap

配置和注册regmap实例后,就可以调用regmap提供的read/write/update等操作了。常用的操作函数原型如下:

//向单个reg写入val

int regmap_write(struct regmap *map, int reg, int val);

//向单个reg写入指定长度的数据,数据存放在val中

int regmap_raw_write(struct regmap *map, int reg, void *val, size_t val_len);

// 写多个reg

int regmap_bulk_write(struct regmap *map, unsigned int reg, const void *val,size_t val_count);

// 直接写入reg,不经过regmap cache

int regmap_multi_reg_write_bypassed(struct regmap *map, const struct reg_sequence *regs,int num_regs);

//写多个reg,并立即刷新cache写入

int regmap_raw_write_async(struct regmap *map, unsigned int reg,const void *val, size_t val_len);

// 读取单个reg的数据到val中/

int regmap_read(struct regmap *map, int reg, int *val);

// 读取单个reg中指定长度的数据

int regmap_raw_read(struct regmap *map, int reg, void *val, size_t val_len);

// 读取从reg开始之后val_count个寄存器的数据到val中

int regmap_bulk_read(struct regmap *map, int reg, void *val, size_t val_count);

// 更新reg寄存器中mask指定的位

int regmap_update_bits(struct regmap *map, int reg, int mask, int val);

//写入寄存器值指定bit *

int regmap_write_bits(struct regmap *map, unsigned int reg, unsigned int mask, unsigned int val);

// 设置读写寄存器不通过cache模式而是bypass模式,读写立即生效,一般在audio等确保时序性驱动中用到

void regcache_cache_bypass(arizona->regmap, true);

四、释放regmap

在驱动注销时释放已注册的regmap。

void regmap_exit(struct regmap *map);

相关推荐