• 正文
    • 一、regmap_config用來配置regmap對象
    • 二、regmap初始化
    • 三、使用regmap
    • 四、釋放regmap
  • 相關推薦
申請入駐 產業(yè)圖譜

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

4小時前
70
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

一、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);

相關推薦