前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >高通平台8953 Linux DTS(Device Tree Source)设备树详解之三(高通MSM8953 android7.1实例分析篇)[通俗易懂]

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

作者头像
全栈程序员站长
发布2022-11-02 15:21:43
1.6K0
发布2022-11-02 15:21:43
举报

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

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. 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节点的补充,我们可以找到该节点定义的地方

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 = <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

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

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

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

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

aiku老师 微信号 :aiku868

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

aiku老师QQ:1653687969

技术解答QQ群:234945702

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

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

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022年10月18日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档