Linux Regmap 操作函数

描述

Regmap 操作函数

1、Regmap 申请与初始化

regmap 支持多种物理总线,比如 I2C 和 SPI,我们需要根据所使用的接口来选择合适的 regmap 初始化函数。Linux 内核提供了针对不同接口的 regmap 初始化函数。

SPI 接口初始化函数为 regmap_init_spi

I2C 接口的初始化函数为 regmap_init_i2c

不管是什么接口,全部使用 regmap_exit 这个函数来释放 regmap

我们一般会在 probe 函数中初始化 regmap_config,然后申请并初始化 regmap。

2、regmap 设备访问 API 函数

不管是 I2C 还是 SPI 等接口,还是 SOC 内部的寄存器,对于寄存器的操作就两种:读和写。regmap 提供了最核心的两个读写操作:regmap_read 和 regmap_write。这两个函数分别用来读/写寄存器

在 regmap_read 和 regmap_write 的基础上还衍生出了其他一些 regmap 的 API 函数,首先是regmap_update_bits 函数。看名字就知道,此函数用来修改寄存器指定的 bit,函数原型如下:

int

 

regmap_update_bits

 (struct regmap *

map

    

unsigned

 

int

 reg,

    

unsigned

 

int

 mask,

    

unsigned

 

int

 val,

函数参数和返回值含义如下:

map:要操作的 regmap。

reg:要操作的寄存器。

mask:掩码,需要更新的位必须在掩码中设置为 1。

val:需要更新的位值。

返回值:0,写成功;其他值,写失败。

比如要将寄存器的 bit1 和 bit2 置 1,那么 mask 应该设置为 0X00000011,此时 val 的 bit1 和 bit2 应该设置为 1,也就是 0Xxxxxxx11。

如果要清除寄存器的 bit4 和 bit7,那么 mask 应该设置为 0X10010000,val 的 bit4 和 bit7 设置为 0,也就是 0X0xx0xxxx。

接下来看一下 regmap_bulk_read 函数,此函数用于读取多个寄存器的值,函数原型如下:

int

 

regmap_bulk_read

(struct regmap *

map

     

unsigned

 

int

 reg, 

     

void

 *val,

     

size_t

 val_count)

函数参数和返回值含义如下:

map:要操作的 regmap。

reg:要读取的第一个寄存器。

val:读取到的数据缓冲区。

val_count:要读取的寄存器数量。

返回值:0,写成功;其他值,读失败。

另外也有多个寄存器写函数 regmap_bulk_write,函数原型如下:

int

 

regmap_bulk_write

(struct regmap *

map

     

unsigned

 

int

 reg, 

     

const

 

void

 *val,

     

size_t

 val_count)

函数参数和返回值含义如下:

map:要操作的 regmap。

reg:要写的第一个寄存器。

val:要写的寄存器数据缓冲区。

val_count:要写的寄存器数量。

返回值:0,写成功;其他值,读失败。

关于 regmap 常用到 API 函数就讲解到这里,还有很多其他功能的 API 函数,大家自行查 阅 Linux 内核即可,内核里面对每个 API 函数都有详细的讲解。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分