linux驱动开发学习笔记十六:gpio相关OF函数和子系统API函数
一、gpio相關(guān)OF函數(shù)
我們?cè)谠O(shè)備節(jié)點(diǎn)中會(huì)定義了一個(gè)名為“gpios”的屬性,當(dāng)然不一定是“gpios”,你可以自定義。gpios 屬性描述了 test 這個(gè)設(shè)備所使用的 GPIO。在驅(qū)動(dòng)程序中需要讀取 gpios 屬性內(nèi)容,Linux 內(nèi)核提供了幾個(gè)與 GPIO 有關(guān)的 OF 函數(shù),常用的幾個(gè) OF 函數(shù)如下所示:
- of_gpio_named_count 函數(shù)
of_gpio_named_count 函數(shù)用于獲取設(shè)備樹某個(gè)屬性里面定義了幾個(gè) GPIO 信息,要注意的是空的 GPIO 信息也會(huì)被統(tǒng)計(jì)到,比如:
gpios = <0&gpio1 1 20&gpio2 3 4>;上述代碼的“gpios”屬性一共定義了 4 個(gè) GPIO,但是有 2 個(gè)是空的,沒有實(shí)際的含義。
通過 of_gpio_named_count 函數(shù)統(tǒng)計(jì)出來的 GPIO 數(shù)量就是 4 個(gè),此函數(shù)原型如下:
函數(shù)參數(shù)和返回值含義如下:
np:設(shè)備節(jié)點(diǎn)。
propname:要統(tǒng)計(jì)的 GPIO 屬性。
返回值:正值,統(tǒng)計(jì)到的 GPIO 數(shù)量;負(fù)值,失敗。
- of_gpio_count 函數(shù)
和 of_gpio_named_count 函數(shù)一樣,但是不同的地方在于,此函數(shù)統(tǒng)計(jì)的是“gpios”這個(gè)屬性的 GPIO 數(shù)量,而 of_gpio_named_count 函數(shù)可以統(tǒng)計(jì)任意屬性的 GPIO 信息,函數(shù)原型如下所示:
int of_gpio_count(struct device_node *np)函數(shù)參數(shù)和返回值含義如下:
np:設(shè)備節(jié)點(diǎn)。
返回值:正值,統(tǒng)計(jì)到的 GPIO 數(shù)量;負(fù)值,失敗
- of_get_named_gpio 函數(shù)
此函數(shù)獲取 GPIO 編號(hào),因?yàn)?Linux 內(nèi)核中關(guān)于 GPIO 的 API 函數(shù)都要使用 GPIO 編號(hào),此函數(shù)會(huì)將設(shè)備樹中類似<&gpio5 7 GPIO_ACTIVE_LOW>的屬性信息轉(zhuǎn)換為對(duì)應(yīng)的 GPIO 編號(hào),此函數(shù)在驅(qū)動(dòng)中使用很頻繁!函數(shù)原型如下:
int of_get_named_gpio(struct device_node *np,const char *propname, int index)函數(shù)參數(shù)和返回值含義如下:
np:設(shè)備節(jié)點(diǎn)。
propname:包含要獲取 GPIO 信息的屬性名。
index:GPIO 索引,因?yàn)橐粋€(gè)屬性里面可能包含多個(gè) GPIO,此參數(shù)指定要獲取哪個(gè) GPIO的編號(hào),如果只有一個(gè) GPIO 信息的話此參數(shù)為 0。
返回值:正值,獲取到的 GPIO 編號(hào);負(fù)值,失敗。
二、gpio子系統(tǒng)API函數(shù)
對(duì)于驅(qū)動(dòng)開發(fā)人員,設(shè)置好設(shè)備樹以后就可以使用 gpio 子系統(tǒng)提供的 API 函數(shù)來操作指定的 GPIO,gpio 子系統(tǒng)向驅(qū)動(dòng)開發(fā)人員屏蔽了具體的讀寫寄存器過程。這就是驅(qū)動(dòng)分層與分離的好處,大家各司其職,做好自己的本職工作即可。gpio 子系統(tǒng)提供的常用的 API 函數(shù)有下面幾個(gè):
- gpio_request 函數(shù)
gpio_request 函數(shù)用于申請(qǐng)一個(gè) GPIO 管腳,在使用一個(gè) GPIO 之前一定要使用 gpio_request進(jìn)行申請(qǐng),函數(shù)原型如下:
int gpio_request(unsigned gpio, const char *label)函數(shù)參數(shù)和返回值含義如下:
gpio:要申請(qǐng)的 gpio 標(biāo)號(hào),使用 of_get_named_gpio 函數(shù)從設(shè)備樹獲取指定 GPIO 屬性信息,此函數(shù)會(huì)返回這個(gè) GPIO 的標(biāo)號(hào)。
label:給 gpio 設(shè)置個(gè)名字。
返回值:0,申請(qǐng)成功;其他值,申請(qǐng)失敗
- gpio_free 函數(shù)
如果不使用某個(gè) GPIO 了,那么就可以調(diào)用 gpio_free 函數(shù)進(jìn)行釋放。函數(shù)原型如下:
void gpio_free(unsigned gpio)函數(shù)參數(shù)和返回值含義如下:
gpio:要釋放的 gpio 標(biāo)號(hào)。
返回值:無
- gpio_direction_input 函數(shù)
此函數(shù)用于設(shè)置某個(gè) GPIO 為輸入,函數(shù)原型如下所示:
int gpio_direction_input(unsigned gpio)函數(shù)參數(shù)和返回值含義如下:
gpio:要設(shè)置為輸入的 GPIO 標(biāo)號(hào)。
返回值:0,設(shè)置成功;負(fù)值,設(shè)置失敗。
- gpio_direction_output 函數(shù)
此函數(shù)用于設(shè)置某個(gè) GPIO 為輸出,并且設(shè)置默認(rèn)輸出值,函數(shù)原型如下:
int gpio_direction_output(unsigned gpio, int value)函數(shù)參數(shù)和返回值含義如下:
gpio:要設(shè)置為輸出的 GPIO 標(biāo)號(hào)。
value:GPIO 默認(rèn)輸出值。
返回值:0,設(shè)置成功;負(fù)值,設(shè)置失敗。
- gpio_get_value 函數(shù)
此函數(shù)用于獲取某個(gè) GPIO 的值(0 或 1),此函數(shù)是個(gè)宏,定義所示:
#define gpio_get_value __gpio_get_value int __gpio_get_value(unsigned gpio)函數(shù)參數(shù)和返回值含義如下:
gpio:要獲取的 GPIO 標(biāo)號(hào)。
返回值:非負(fù)值,得到的 GPIO 值;負(fù)值,獲取失敗
- gpio_set_value 函數(shù)
此函數(shù)用于設(shè)置某個(gè) GPIO 的值,此函數(shù)是個(gè)宏,定義如下
#define gpio_set_value __gpio_set_value void __gpio_set_value(unsigned gpio, int value)函數(shù)參數(shù)和返回值含義如下:
gpio:要設(shè)置的 GPIO 標(biāo)號(hào)。
value:要設(shè)置的值。
返回值:無
總結(jié)
以上是生活随笔為你收集整理的linux驱动开发学习笔记十六:gpio相关OF函数和子系统API函数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何发布google离线地图及二次开发A
- 下一篇: 程序设计语言基础知识复习