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