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文章
11351瀏覽量
210497 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4346瀏覽量
63012 -
系統(tǒng)
+關(guān)注
關(guān)注
1文章
1020瀏覽量
21440
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
「正點(diǎn)原子Linux連載」第六十章Linux RTC驅(qū)動(dòng)實(shí)驗(yàn)
「正點(diǎn)原子Linux連載」第六十章Linux RTC驅(qū)動(dòng)實(shí)驗(yàn)
linux基本操作與C語言基礎(chǔ)
以rk808驅(qū)動(dòng)為例子講解i2c regmap方式讀寫
Linux操作系統(tǒng)
![<b class='flag-5'>Linux</b><b class='flag-5'>操作</b>系統(tǒng)](https://file.elecfans.com/web2/M00/48/94/pYYBAGKhtA-AfTnQAABM_zpn8SE782.jpg)
Linux教程之Linux C函數(shù)參考教程免費(fèi)下載
![<b class='flag-5'>Linux</b>教程之<b class='flag-5'>Linux</b> C<b class='flag-5'>函數(shù)</b>參考教程免費(fèi)下載](https://file.elecfans.com/web1/M00/8A/88/o4YBAFyRk0qASN6VAAYgz4K0vHA536.png)
Linux內(nèi)核GPIO操作函數(shù)的詳解分析
linux操作系統(tǒng)中的進(jìn)程創(chuàng)建和銷毀函數(shù)解析
![<b class='flag-5'>linux</b><b class='flag-5'>操作</b>系統(tǒng)中的進(jìn)程創(chuàng)建和銷毀<b class='flag-5'>函數(shù)</b>解析](https://file1.elecfans.com/web2/M00/8B/69/wKgaomSY5r-AHpgwAAAvTQ55hdI165.png)
Linux中什么是 Regmap
Linux Regmap 驅(qū)動(dòng)框架
![<b class='flag-5'>Linux</b> <b class='flag-5'>Regmap</b> 驅(qū)動(dòng)框架](https://file1.elecfans.com/web2/M00/8C/28/wKgaomSmiLGAWQXqAADe40k7Wh8718.jpg)
Linux內(nèi)核如何使用結(jié)構(gòu)體和函數(shù)指針?
![<b class='flag-5'>Linux</b>內(nèi)核如何使用結(jié)構(gòu)體和<b class='flag-5'>函數(shù)</b>指針?](https://file1.elecfans.com/web2/M00/A1/C9/wKgZomT38MGANWMgAABk_lYUJ0w67.jpeg)
評(píng)論