日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux驱动开发学习笔记十六:gpio相关OF函数和子系统API函数

發布時間:2023/12/14 linux 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 個,此函數原型如下:

int of_gpio_named_count(struct device_node *np, const char *propname)

函數參數和返回值含義如下:
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函数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。