高通平台8953 Linux DTS(Device Tree Source)設備樹詳解之三(高通MSM8953 android7.1實例分析篇)


在前兩篇中我們了解了DTS的背景基礎知識以及發揮作用的流程,這篇文章我們以android 7.1 高通的MSM8953平台為例來添加一個基礎的i2c設備(包含一個gpio中斷)。

1,首先我們在該i2c設備的驅動中找到了匹配設備與驅動程序的compatible

 

[objc]   view plain   copy
 
  1. static const struct of_device_id iqs263_of_match[] = {  
  2.     { .compatible = "azopteq,iqs263", },  
  3.     { },  
  4. };  

2,由此compatible可以找到dts中對應的設備

 

kernel\arch\arm64\boot\dts\qcom\msm8953-mtp.dts

 

[objc]   view plain   copy
 
  1. &i2c_8 { /* BLSP2 QUP4 */  
  2.     iqs263@44 { //Capacitive Touch Controller Driver  
  3.         compatible = "azopteq,iqs263";  
  4.         reg = <0x44>;  
  5.           
  6.         pinctrl-names = "default";  
  7.         pinctrl-0 = <&iqs263_irq_config>;  
  8.           
  9.         vdd-supply = <&pm8953_l5>;  
  10.         vio-supply = <&pm8953_l5>;  
  11.         interrupt-parent = <&tlmm>;  
  12.         interrupts = <40x2>;  
  13.         azopteq,irq-gpio =<&tlmm 40x2>;  
  14.     };  
  15. };  

 

2.1,其中compatible屬性標識的名字是與驅動程序中名字相匹配的

2.2,其中reg屬性及@符號后的十六進制數字標識了該設備iqs263的i2c地址為0x44

2.3,&i2c_8前的&表明此處僅僅是對i2c_8節點的補充,我們可以找到該節點定義的地方

kernel\arch\arm64\boot\dts\qcom\msm8953.dtsi

 

[objc]   view plain   copy
 
  1. &soc {  
  2.     i2c_8: i2c@7af8000 { /* BLSP2 QUP4 */  
  3.         compatible = "qcom,i2c-msm-v2";  
  4.         #address-cells = <1>;  
  5.         #size-cells = <0>;  
  6.         reg-names = "qup_phys_addr";  
  7.         reg = <0x7af8000x600>;  
  8.         interrupt-names = "qup_irq";  
  9.         interrupts = <300>;  
  10.         qcom,clk-freq-out = <400000>;  
  11.         qcom,clk-freq-in  = <19200000>;  
  12.         clock-names = "iface_clk", "core_clk";  
  13.         clocks = <&clock_gcc clk_gcc_blsp2_ahb_clk>,  
  14.             <&clock_gcc clk_gcc_blsp2_qup4_i2c_apps_clk>;  
  15.   
  16.         pinctrl-names = "i2c_active", "i2c_sleep";  
  17.         pinctrl-0 = <&i2c_8_active>;  
  18.         pinctrl-1 = <&i2c_8_sleep>;  
  19.         qcom,noise-rjct-scl = <0>;  
  20.         qcom,noise-rjct-sda = <0>;  
  21.         qcom,master-id = <84>;  
  22.         dmas = <&dma_blsp160x20000020x20>,  
  23.             <&dma_blsp130x20000020x20>;  
  24.         dma-names = "tx", "rx";  
  25.     };  
  26.     rpm_bus: qcom,rpm-smd {  
  27.         compatible = "qcom,rpm-smd";  
  28.         rpm-channel-name = "rpm_requests";  
  29.         rpm-channel-type = <15>; /* SMD_APPS_RPM */  
  30.     };    


這當中的大部分屬性都與平台相關了,可以看到定義了該i2c接口的時鍾源、中斷格式等。這部分一般由平台提供,作為驅動工程師了解即可。

 

2.3.1,i2c_8節點中的pinctrl-0指向了定義其io口的節點i2c_8_active和i2c_8_sleep,代碼如下可見該i2c的IO口為Gpio98和Gpio99

kernel\arch\arm64\boot\dts\qcom\msm8953-pinctrl.dtsi

 

[objc]   view plain   copy
 
  1. &soc {  
  2.     tlmm: pinctrl@1000000 {  
  3.         i2c_8 {  
  4.             i2c_8_active: i2c_8_active {  
  5.                 /* active state */  
  6.                 mux {  
  7.                     pins = "gpio98", "gpio99";  
  8.                     function = "blsp_i2c8";  
  9.                 };  
  10.   
  11.                 config {  
  12.                     pins = "gpio98", "gpio99";  
  13.                     drive-strength = <2>;  
  14.                     bias-disable;  
  15.                 };  
  16.             };  
  17.   
  18.             i2c_8_sleep: i2c_8_sleep {  
  19.                 /* suspended state */  
  20.                 mux {  
  21.                     pins = "gpio98", "gpio99";  
  22.                     function = "gpio";  
  23.                 };  
  24.   
  25.                 config {  
  26.                     pins = "gpio98", "gpio99";  
  27.                     drive-strength = <2>;  
  28.                     bias-disable;  
  29.                 };  
  30.             };  
  31.         };  
  32.           
  33.         iqs263_irq_config: iqs263_irq_config {  
  34.             mux {  
  35.                 pins = "gpio48";  
  36.                 function = "gpio";  
  37.             };  
  38.   
  39.             config {  
  40.                 pins = "gpio48";  
  41.                 drive-strength = <2>;  
  42.                 bias-pull-up;  
  43.             };  
  44.         };    



 

2.4,iqs263節點中的pinctrl-0 屬性指向了表明其io口屬性的節點為iqs263_irq_config,相關代碼也在2.3.1指示的msm8953-pinctrl.dtsi文件中。

其中定義了iqs263的中斷IO腳為Gpio48

 

2.5,iqs263節點中的vdd-supply,vio-supply屬性指示了表明iqs263芯片供電的引腳的節點pm8953_l5,代碼如下

kernel\arch\arm64\boot\dts\qcom\msm8953-regulator.dtsi

 

[objc]   view plain   copy
 
  1. &rpm_bus {  
  2.     rpm-regulator-ldoa5 {  
  3.         status = "okay";  
  4.         pm8953_l5: regulator-l5 {  
  5.             regulator-min-microvolt = <1800000>;  
  6.             regulator-max-microvolt = <1800000>;  
  7.             qcom,init-voltage = <1800000>;  
  8.             status = "okay";  
  9.         };  
  10.     };  


2.6,iqs263的interrupts = <48 0x2>屬性表明中斷號為48,2代表下降沿觸發。相關知識可以參考: 高通平台8953 Linux DTS(Device Tree Source)設備樹詳解之二(DTS設備樹匹配過程)

 

##########################################################


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM