GPIO配置和管理

2021-08-03 08:24:17 字數 1427 閱讀 7503

bootloader階段

bootloader階段可以呼叫gpio_tlmm_config()函式完成gpio_cfgn暫存器的配置,舉例如下:

#define tlmm_vol_up_btn_gpio    85  

gpio_tlmm_config(tlmm_vol_up_btn_gpio, 0,gpio_input, gpio_pull_up, gpio_2ma, gpio_enable)  

gpio_tlmm_config()定義如下:  

void gpio_tlmm_config(uint32_t gpio,uint8_t func,  

uint8_tdir, uint8_t pull,  

uint8_tdrvstr, uint32_t enable)  

其中驅動強度的可用定義如下:

/* gpio tlmm: drive strength */  

#define gpio_2ma        0  

#define gpio_4ma        1  

#define gpio_6ma        2  

#define gpio_8ma        3  

#define gpio_10ma       4  

#define gpio_12ma       5  

#define gpio_14ma       6  

#define gpio_16ma       7

gpiolib架構

使用gpiolib實現框架的平台可選擇配置乙個gpio的sysfs使用者介面,這不同於debugfs介面,因為它提供gpio方向和值的控制,而不僅是顯示gpio狀態摘要,另外,它可在沒有除錯支援的產品級系統中使用。

gpio在sysfs的路徑/sys/class/gpio中有三類入口:

1)用來獲取gpio使用者控制項控制的控制介面

控制介面是只寫的,有export和unexport,用於請求核心匯出gpio的控制,成功的話會建立gpion節點。

2)gpio本身

即/sys/class/gpio/gpion節點

3)gpio控制器(gpiochip例項)

這裡的label包含的裝置資訊(如1000000和modalias的值)對應於msm8937-pinctrl.dtsi中的內容。

核心**中還可以直接完成gpio匯出到sysfs的功能:

1)首先通過gpio_request()申請gpio

2)核心驅動成功申請乙個gpio後,可通過gpiod_export()使它在sysfs介面可見(如gpio19)

3)在gpio被匯出之後,gpiod_export_link()允許在sysfs檔案系統的任何地方建立乙個到該gpio sysfs節點的符號鏈結。這樣驅動就可以通過乙個描述性名字,在sysfs中他們所擁有的裝置下提供乙個介面(到該gpio sysfs節點的)。

gpiolib管理gpio過程

在linux2.6.38中提供了統一管理外部io的模組。本文的內容是跟蹤這些模組,是如何關聯起來的。環境 龍芯1b開發板 一 重點關注的相關的結構體 gpiolib.c檔案,被移植到driver gpio 目錄下。structgpio desc 對於上面這個結構體,現在只關心structgpio c...

gpiolib管理gpio過程

在linux2.6.38中提供了統一管理外部io的模組。本文的內容是跟蹤這些模組,是如何關聯起來的。環境 龍芯1b開發板 一 重點關注的相關的結構體 gpiolib.c檔案,被移植到driver gpio 目錄下。structgpio desc 對於上面這個結構體,現在只關心structgpio c...

gpiolib管理gpio過程

一 重點關注的相關的結構體 gpiolib.c檔案,被移植到driver gpio 目錄下。structgpio desc 對於上面這個結構體,現在只關心structgpio chip chip structgpio chip 二 把目光轉到龍芯自身的 gpio 檔案。在 1b的內容是放在 arch...