Regmap 操作函數(shù)
1、Regmap 申請(qǐng)與初始化
regmap 支持多種物理總線,比如 I2C 和 SPI,我們需要根據(jù)所使用的接口來選擇合適的 regmap 初始化函數(shù)。Linux 內(nèi)核提供了針對(duì)不同接口的 regmap 初始化函數(shù)。
SPI 接口初始化函數(shù)為 regmap_init_spi
I2C 接口的初始化函數(shù)為 regmap_init_i2c
不管是什么接口,全部使用 regmap_exit 這個(gè)函數(shù)來釋放 regmap
我們一般會(huì)在 probe 函數(shù)中初始化 regmap_config,然后申請(qǐng)并初始化 regmap。
2、regmap 設(shè)備訪問 API 函數(shù)
不管是 I2C 還是 SPI 等接口,還是 SOC 內(nèi)部的寄存器,對(duì)于寄存器的操作就兩種:讀和寫。regmap 提供了最核心的兩個(gè)讀寫操作:regmap_read 和 regmap_write。這兩個(gè)函數(shù)分別用來讀/寫寄存器。
在 regmap_read 和 regmap_write 的基礎(chǔ)上還衍生出了其他一些 regmap 的 API 函數(shù),首先是regmap_update_bits 函數(shù)??疵志椭溃撕瘮?shù)用來修改寄存器指定的 bit,函數(shù)原型如下:
int
regmap_update_bits
(structregmap*
map
,
unsigned
int
reg,
unsigned
int
mask,
unsigned
int
val,
函數(shù)參數(shù)和返回值含義如下:
map:要操作的 regmap。
reg:要操作的寄存器。
mask:掩碼,需要更新的位必須在掩碼中設(shè)置為 1。
val:需要更新的位值。
返回值:0,寫成功;其他值,寫失敗。
比如要將寄存器的 bit1 和 bit2 置 1,那么 mask 應(yīng)該設(shè)置為 0X00000011,此時(shí) val 的 bit1 和 bit2 應(yīng)該設(shè)置為 1,也就是 0Xxxxxxx11。
如果要清除寄存器的 bit4 和 bit7,那么 mask 應(yīng)該設(shè)置為 0X10010000,val 的 bit4 和 bit7 設(shè)置為 0,也就是 0X0xx0xxxx。
接下來看一下 regmap_bulk_read 函數(shù),此函數(shù)用于讀取多個(gè)寄存器的值,函數(shù)原型如下:
int
regmap_bulk_read
(structregmap*
map
,
unsigned
int
reg,
void
*val,
size_t
val_count)
函數(shù)參數(shù)和返回值含義如下:
map:要操作的 regmap。
reg:要讀取的第一個(gè)寄存器。
val:讀取到的數(shù)據(jù)緩沖區(qū)。
val_count:要讀取的寄存器數(shù)量。
返回值:0,寫成功;其他值,讀失敗。
另外也有多個(gè)寄存器寫函數(shù) regmap_bulk_write,函數(shù)原型如下:
int
regmap_bulk_write
(structregmap*
map
,
unsigned
int
reg,
const
void
*val,
size_t
val_count)
函數(shù)參數(shù)和返回值含義如下:
map:要操作的 regmap。
reg:要寫的第一個(gè)寄存器。
val:要寫的寄存器數(shù)據(jù)緩沖區(qū)。
val_count:要寫的寄存器數(shù)量。
返回值:0,寫成功;其他值,讀失敗。
關(guān)于 regmap 常用到 API 函數(shù)就講解到這里,還有很多其他功能的 API 函數(shù),大家自行查 閱 Linux 內(nèi)核即可,內(nèi)核里面對(duì)每個(gè) API 函數(shù)都有詳細(xì)的講解。
-
Linux
+關(guān)注
關(guān)注
87文章
11212瀏覽量
208721 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4284瀏覽量
62325 -
系統(tǒng)
+關(guān)注
關(guān)注
1文章
1006瀏覽量
21293
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論