高通平台8953 Linux DTS(Device Tree Source)设备树详解之三(高通MSM8953 android7.1实例分析篇)[通俗易懂]

2022-11-02 15:21:43 浏览数 (1)

高通平台8953 Linux DTS(Device Tree Source)设备树详解之三(高通MSM8953 android7.1实例分析篇)

本系列导航:

高通平台8953 Linux DTS(Device Tree Source)设备树详解之一(背景基础知识篇)

高通平台8953 Linux DTS(Device Tree Source)设备树详解之二(DTS设备树匹配过程)

高通平台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中对应的设备

kernelarcharm64bootdtsqcommsm8953-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. pinctrl-names = “default”;
  6. pinctrl-0 = <&iqs263_irq_config>;
  7. vdd-supply = <&pm8953_l5>;
  8. vio-supply = <&pm8953_l5>;
  9. interrupt-parent = <&tlmm>;
  10. interrupts = <48 0x2>;
  11. azopteq,irq-gpio =<&tlmm 48 0x2>;
  12. };
  13. };

2.1,其中compatible属性标识的名字是与驱动程序中名字相匹配的

2.2,其中reg属性及@符号后的十六进制数字标识了该设备iqs263的i2c地址为0x44

2.3,&i2c_8前的&表明此处仅仅是对i2c_8节点的补充,我们可以找到该节点定义的地方

kernelarcharm64bootdtsqcommsm8953.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 = <0x7af8000 0x600>;
  8. interrupt-names = “qup_irq”;
  9. interrupts = <0 302 0>;
  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. pinctrl-names = “i2c_active”, “i2c_sleep”;
  16. pinctrl-0 = <&i2c_8_active>;
  17. pinctrl-1 = <&i2c_8_sleep>;
  18. qcom,noise-rjct-scl = <0>;
  19. qcom,noise-rjct-sda = <0>;
  20. qcom,master-id = <84>;
  21. dmas = <&dma_blsp2 10 64 0x20000020 0x20>,
  22. <&dma_blsp2 11 32 0x20000020 0x20>;
  23. dma-names = “tx”, “rx”;
  24. };
  25. rpm_bus: qcom,rpm-smd {
  26. compatible = “qcom,rpm-smd”;
  27. rpm-channel-name = “rpm_requests”;
  28. rpm-channel-type = <15>; /* SMD_APPS_RPM */
  29. };

这当中的大部分属性都与平台相关了,可以看到定义了该i2c接口的时钟源、中断格式等。这部分一般由平台提供,作为驱动工程师了解即可。

2.3.1,i2c_8节点中的pinctrl-0指向了定义其io口的节点i2c_8_active和i2c_8_sleep,代码如下可见该i2c的IO口为Gpio98和Gpio99

kernelarcharm64bootdtsqcommsm8953-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. config {
  11. pins = “gpio98”, “gpio99”;
  12. drive-strength = <2>;
  13. bias-disable;
  14. };
  15. };
  16. i2c_8_sleep: i2c_8_sleep {
  17. /* suspended state */
  18. mux {
  19. pins = “gpio98”, “gpio99”;
  20. function = “gpio”;
  21. };
  22. config {
  23. pins = “gpio98”, “gpio99”;
  24. drive-strength = <2>;
  25. bias-disable;
  26. };
  27. };
  28. };
  29. iqs263_irq_config: iqs263_irq_config {
  30. mux {
  31. pins = “gpio48”;
  32. function = “gpio”;
  33. };
  34. config {
  35. pins = “gpio48”;
  36. drive-strength = <2>;
  37. bias-pull-up;
  38. };
  39. };

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,代码如下

kernelarcharm64bootdtsqcommsm8953-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设备树匹配过程)

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

欢迎广大学子交流嵌入式和安卓开发

aiku老师 微信号 :aiku868

微信公众平台:aiku嵌入式视频教程创科之龙

aiku老师QQ:1653687969

技术解答QQ群:234945702

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/180568.html原文链接:https://javaforall.cn

0 人点赞