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

高通平台8953 Linux DTS(Device Tree Source)设备树详解之三(高通MSM8953 android7.1实例分析篇)[通俗易懂]高通平台8953 LinuxDTS(DeviceTreeSource)设备树详解之三(高通MSM8953android7.1实例分析篇)本系列导航:高通平台8953 LinuxDTS(DeviceTreeSource)设备树详解之一(背景基础知识篇)高通平台8953 LinuxDTS(DeviceTreeSource)设备树详解之二(DTS设备树匹配过程)高通平台8953 L…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

高通平台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.           
  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 = <48 0x2>;  
  13.         azopteq,irq-gpio =<&tlmm 48 0x2>;  
  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 = <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.   
  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_blsp2 10 64 0x20000020 0x20>,  
  23.             <&dma_blsp2 11 32 0x20000020 0x20>;  
  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设备树匹配过程)

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

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

  aiku老师 微信号  :aiku868

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

   aiku老师QQ:1653687969

   技术解答QQ群:234945702

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

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

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 列举出linux文件和目录常用的命令_linux常用命令

    列举出linux文件和目录常用的命令_linux常用命令目录命令总览ls(英文全拼:listfiles):列出目录及文件名cd(英文全拼:changedirectory):切换目录pwd(英文全拼:printworkdirectory):显

    2022年7月31日
    4
  • SpringBoot 配置Mybatis两种方式

    SpringBoot 配置Mybatis两种方式目前SpringBoot被各企业广泛使用,在SpringBoot结合Mybatis使用时,有的人将mapper.xml存放到resouce的目录下,有的想把Mapper.xml和接口放到一起,但是这样/就会存在Mapper.xml加载不了,导致方法无法找到,现在咱们看看两种方式的配置。首先说第一种:也就是网上说的最多的一种,添加依赖,我就不细说了。1.在application.pr…

    2022年6月24日
    31
  • dhcp snooping option 82_dhcpsnooping的原理配置案例

    dhcp snooping option 82_dhcpsnooping的原理配置案例DHCPSnooping-option82relay的原理及实例一、采用DHCP服务的常见问题架设DHCP服务器可以为客户端自动分配IP地址、掩码、默认网关、DNS服务器等网络参数,简化了网络配置,提高了管理效率。但在DHCP服务的管理上存在一些问题,常见的有:●DHCPServer的冒充●DHCPServer的DOS,如DHCP耗竭●某些用户随便指定IP地址,造成IP地址冲突1、D…

    2022年10月15日
    0
  • java环境变量完美配置教程

    java环境变量完美配置教程java环境变量配置教程首先,下载JDK开发包,官网和我的主页资源库都有,建议下载比较稳定普遍的1.8版本,安装时注意安装路径,安装完成后按路径找到相关文件,你会看到JDK1.8的文件夹,看见bin再点一次,然后点击正上方很长的那个输出栏,会出来一串路径复制他. 然后我们到了桌面找到我的电脑,如果没有我的电脑,自己在设置个性化中找桌面图标显示。还有某些系统是快捷方式,(右击,看到属性点击,打开文件所在位置即可)然后要是啥问题没有,咱们就右击,看见属性点击,你会看见高级系统设置点他,看没看见环境变

    2022年6月18日
    21
  • 最实用的高并发任务执行架构设计 | 架构篇

    最实用的高并发任务执行架构设计 | 架构篇目录前言高并发任务执行架构需求场景业务架构设计技术架构设计初始设计演化阶段一演化阶段二演化阶段三代码设计总结前言随着互联网与软件的发展,除了程序员,架构师也是越来越火的职业。他们伴随着项目的整个生命过程,他们更像是传统工业的设计师,将项目当做生命一般细心雕琢。目前对于项目架构而言,基本都会需要设计的几个架构。1、业务架构项目或者产品的市场定位、需求范围、作用场景都是需要在项目启动初期进行系统性分析的。在设计业务架构中,架构师还需要明

    2022年5月26日
    40
  • JAVA异常处理实战心得

    JAVA异常处理实战心得1.异常分类异常Exception是Java中非常常用的功能,它可以简化代码,并且增强代码的安全性。尤其是在各种服务相关的代码中,可能正常业务逻辑的代码量很少,大部分都是各种trycatch处理各种异常的代码,因为实际中异常情况很多,为了保证服务的健壮与稳定性,要尽可能考虑与处理掉各种异常情况。所以在java中遇到大段大段的trycatch也就不足为奇。(图片来自网络)从上面的图可以看…

    2022年5月19日
    31

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号