裝置樹和pinctrl粗解

2021-08-21 05:26:32 字數 1595 閱讀 5085

上次文章中 我以ds18b20為例,在裝置樹中定義了ds18b20的資源(device),當時是依葫蘆畫瓢,沒有深入**,本文主要**下pin在裝置樹中的描述

參考文章:linux核心中的gpio系統之(3):pin controller driver**分析 、fsl,imx6q-pinctrl.txt、fsl,imx-pinctrl.txt

my-ds18b20 ;
其實這是不完整的描述,因為我們僅僅指定了哪個引腳,而作為gpio是這個引腳的功能之一,也許他還可以作為uart1_tx_data等等。那為何我們這個驅動可以成功呢?因為這個引腳在其他地方進行了初始化配置為了普通gpio。

所以完整的描述應該這樣:

pinctrl_nandf_pad: nandfpadgrp ;

my-ds18b20 ;

gpios = <&gpio2 3 1>; 對應了mx6qdl_pad_nandf_d3__gpio2_io03 (巨集定義) 的pin configuration,我們具體來看看這個巨集定arch\arm\boot\dts\imx6dl-pinfunc.h

//

#define mx6qdl_pad_nandf_d3__gpio2_io03 0x290 0x678 0x000 0x5 0x0

我們再來說說pinctrl-names 和pinctrl-x。(以下兩段摘自wowo科技)

(1)pinctrl-names定義了乙個state列表。那麼什麼是state呢?具體說應該是pin state,對於乙個client device,它使用了一組pin,這一組pin應該同時處於某種狀態,畢竟這些pin是屬於乙個具體的裝置功能。state的定義和電源管理關係比較緊密,例如當裝置active的時候,我們需要pin controller將相關的一組pin設定為具體的裝置功能,而當裝置進入sleep狀態的時候,需要pin controller將相關的一組pin設定為普通gpio,並精確的控制gpio狀態以便節省系統的功耗。state有兩種,標識,一種就是pinctrl-names定義的字串列表,另外一種就是id。id從0開始,依次加一。根據例子中的定義,state id等於0(名字是active)的state對應pinctrl-0屬性,state id等於1(名字是idle)的state對應pinctrl-1屬性。具體裝置state的定義和各個裝置相關,具體參考在自己的device bind。

(2)pinctrl-x的定義。pinctrl-x是乙個控制代碼(phandle)列表,每個控制代碼指向乙個pin configuration。有時候,乙個state對應多個pin configure。例如在active的時候,i2c功能有兩種配置,一種是從pin id引出,另外乙個是從pin id引出。

下面我再給一段,供大家分析練手

pinctrl_nandf_keys: nandfkeysgrp ;

pinctrl_gpio_keys: gpiokeysgrp ;

gpio-keys ;

volume-up ;

volume-down ;

};

2017-11-09

6 3在裝置樹中pinctrl的簡單使用

文件 核心 documentation devicetree bindings pinctrl samsung pinctrl.txt 幾個概念 bank 以引腳名為依據,這些引腳分為若干組,每組稱為乙個bank 比如s3c2440裡有gpa gpb gpc等bank,每個bank中有若干個引腳,比...

apr協議的使用粗解和練習

每一台主機都有乙個arp快取記憶體 arp cache 用於儲存本局城網上其它所有主機和路由器的ip位址到mac位址的對映關係。每當一台主機a要向本區域網中的另一台主機b傳送資料報時,主機a就先從自己的arp快取記憶體中根據主機b的ip位址查詢其mac位址。如果找到主機b的對映記錄,就把主機b的ma...

linux 裝置樹和atags

linux接受引數有兩種方式。一種是atags 一種是dtb atags是傳統的方式,傳遞命令列等等資訊。dtb是傳遞了更多的硬體資訊。atag 通過啟動將各種引數打包成atag tag標記傳遞資訊。而dtb則是通過可描述的dtsi編譯成dtb塊。將dtb和atag放到記憶體當中。通過暫存器r2引數...