高通GPIO驅動(DTS方式)

2022-06-15 18:36:14 字數 1893 閱讀 5936

gpio除錯的方式有很多,linux3.0以上arm架構的處理器基本上都採用了dts的方式,在linux3.0可以通過獲取sysfs的方式來獲取gpio狀態;

sysfs檔案系統的建立可以參照下面的部落格:

在linux下,通過sysfs,獲取gpio狀態,也可以操作gpio。

1、獲取gpio狀態,實質上就是呼叫show函式

cd /sys/kernel/debug/

cat gpio

2、echo 'value' > value        //設定gpio暫存器值

在**中有兩種方式操作gpio,一種是一次申請單個gpio,通過裝置樹,成功後操縱該gpio,另一種是使用pinctrl子系統,通過裝置樹設定,一次操作多個gpio。

因為gpio一般都是平台裝置驅動,一般裝置樹掛載的節點都可以在&soc下:

1

device_node

驅動**:

1

int gpio_99 = of_get_named_gpio_flags(dev->of_node, "

gpio_name

", 0, null); //

從裝置數節點, 可選

2 gpio_request(gpio_99, "

gpio_name

"); //

通過gpio號申請gpio

3 gpio_direction_output(gpio_99, 1); //

設定gpio_99輸出,初始值為1

4 gpio_set_value(gpio_99, 0); //

設定gpio_99值為0

5 gpio_free(gpio_99); //

gpio_99不再使用後應當釋放

gpio的申請和設定都可能會出現失敗的情況,應該做好異常處理;;

pin control subsystem是linux核心抽象出的一套用於控制硬體引腳的一套子系統。比上面的方式多了許多配置gpio的方式,例如配置電流(可以用於睡眠喚醒的功能),管理pin腳的復用,介面規格等功能;蝸窩科技的大牛們就有幾篇寫的很好:

linux核心中的gpio系統之(1):軟體框架

linux核心中的gpio系統之(2):pin control subsystem

linux核心中的gpio系統之(3):pin controller driver**分析

linux核心中的gpio系統之(4):pinctrl驅動的理解和總結

linux核心中的gpio系統之(5):gpio subsysem和pinctrl subsystem之間的耦合

dts**:

1

device_node ;

驅動**:

1

struct pinctrl *pinctrl = devm_pinctrl_get(device); //

獲取device對應節點下的pinctrl

2struct pinctrl_state = pinctrl_lookup_state(pinctrl, "

gpio_active

"); //

通過pinctrl名獲取pinctrl對應狀態

3 pinctrl_select_state(pinctrl, pinctrl_state); //

設定pinctrl的狀態為'gpio_active

4 devm_pinctrl_put(pinctrl); //

使用完了釋放資源

高通AF驅動配置

1 進入vendor qcom proprietary mm camera mm camera2 media controller modules sensors actuator libs,複製乙個馬達名稱類似的資料夾,修改好裡面的檔名和巨集定義。2 修改h檔案的如下內容 actuator par...

高通WLAN驅動分析

一 硬體部分 整體架構 其實主要由三部分組成 執行在modem側的wcnss arm9處理器,ap,以及wlan晶元。二 軟體組成 1.位於modem側的hlos執行韌體,啟動子系統 高通wlan驅動,主要是通過ap去控制該wcnss arm9的wifi基帶處理器。三 驅動 組成 驅動初始化電源初始...

年前高通平台驅動除錯

最近接了個任務 再6085平台上除錯atheros6002wifi模組。按理說,高通已經把工作都做完了,我沒什麼好做的了。可是一直都不是很順。首先,我拿到的模組是sd插卡式的。結果我的開發板上沒有焊大sd插槽,只有乙個tf插槽。沒辦法,只能自己用排線飛了。飛完後,好像怎麼都沒有按照預期的執行。跟蹤日...