GPIO子系統下的API函式

2021-10-10 16:46:02 字數 1926 閱讀 6552

對於驅動開發人員,設定好裝置樹以後就可以使用 gpio 子系統提供的 api 函式來操作指定的 gpio, gpio 子系統向驅動開發人員遮蔽了具體的讀寫暫存器過程。這就是驅動分層與分離的好處,大家各司其職,做好自己的本職工作即可。 gpio 子系統提供的常用的 api 函式有下面幾個。

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 了,那麼就可以呼叫 gpio_free 函式進行釋放。函式原型如下:

void

gpio_free

(unsigned gpio)

引數:引數

意義gpio

要釋放的 gpio 標號。

返回值:無。

此函式用於設定某個 gpio 為輸入,函式原型如下所示:

int

gpio_direction_input

(unsigned gpio)

引數:引數

意義gpio

要設定為輸入的 gpio 標號。

返回值:

0,設定成功;負值,設定失敗。

此函式用於設定某個 gpio 為輸出,並且設定預設輸出值,函式原型如下:

int

gpio_direction_output

(unsigned gpio,

int value)

引數:引數

意義gpio

要設定為輸出的 gpio 標號。

value

gpio 預設輸出值。

返回值:

0,設定成功;負值,設定失敗。

此函式用於獲取某個 gpio 的值(0 或 1),此函式是個巨集,定義所示:

#define gpio_get_value __gpio_get_value

int__gpio_get_value

(unsigned gpio)

引數:引數

意義gpio

要獲取的 gpio 標號。

返回值:

非負值,得到的 gpio 值;負值,獲取失敗。

此函式用於設定某個 gpio 的值,此函式是個巨集,定義如下

#define gpio_set_value __gpio_set_value

void

__gpio_set_value

(unsigned gpio,

int value)

引數:引數

意義gpio

要設定的 gpio 標號。

value

要設定的值。

返回值:

關於 gpio 子系統常用的 api 函式就講這些,這些是我們用的最多的

pinctrl和gpio子系統

傳統配置pin的方式是直接操作暫存器,這種方式比較繁瑣和容易出問題,pinctrl子系統就是為了解決這個問題而引入的。pinctrl子系統的主要工作內容如下 獲取裝置樹中的pin資訊 根據獲取到的pin資訊來設定pin的復用功能 根據獲取到的pin資訊來設定pin的電氣特性,比如上下拉,速度,驅動能...

pinctrl 和 gpio 子系統

將工作分為兩部分 of device id 結構體陣列,它裡面儲存著這個驅動檔案的相容性值,裝置樹中的 compatible 屬性值會和 of device id 中的所有相容性字串比較,檢視是否可以使用此驅動。1 platform driver 是平台裝置驅動,2 platform driver ...

Linux核心驅動之gpio子系統的使用

linux 核心中gpio 是最簡單,最常用的資源 和 interrupt dma,timer一樣 驅動程式,應用程式都能夠通過相應的介面使用 gpio gpio使用0 max int 之間的整數標識,不能使用負數 gpio 與硬體體系密切相關的,不過 linux 有乙個框架處理 gpio 能夠使用...