Linux怎么查找dtsi文件,Linux DTS(Device Tree Source)设备树详解之三(高通MSM8953实例分析篇)...

在前两篇中我们了解了DTS的背景基础知识以及发挥作用的流程,这篇文章我们以高通的MSM8953平台为例来添加一个基础的i2c设备(包含一个gpio中断)。

首先我们在该i2c设备的驱动中找到了匹配设备与驱动程序的compatible

static const struct of_device_id iqs263_of_match[] = {

{ .compatible = "azopteq,iqs263", },

{ },

}

由此compatible可以找到dts中对应的设备

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

&i2c_8 { /* BLSP2 QUP4 */

iqs263@44 { //Capacitive Touch Controller Driver

compatible = "azopteq,iqs263";

reg = <0x44>;

pinctrl-names = "default";

pinctrl-0 = ;

vdd-supply = ;

vio-supply = ;

interrupt-parent = ;

interrupts = <48 0x2>;

azopteq,irq-gpio =;

};

};

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

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

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

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

&soc {

i2c_8: i2c@7af8000 { /* BLSP2 QUP4 */

compatible = "qcom,i2c-msm-v2";

#address-cells = <1>;

#size-cells = <0>;

reg-names = "qup_phys_addr";

reg = <0x7af8000 0x600>;

interrupt-names = "qup_irq";

interrupts = <0 302 0>;

qcom,clk-freq-out = <400000>;

qcom,clk-freq-in = <19200000>;

clock-names = "iface_clk", "core_clk";

clocks = ,

;

pinctrl-names = "i2c_active", "i2c_sleep";

pinctrl-0 = ;

pinctrl-1 = ;

qcom,noise-rjct-scl = <0>;

qcom,noise-rjct-sda = <0>;

qcom,master-id = <84>;

dmas = ,

;

dma-names = "tx", "rx";

};

rpm_bus: qcom,rpm-smd {

compatible = "qcom,rpm-smd";

rpm-channel-name = "rpm_requests";

rpm-channel-type = <15>; /* SMD_APPS_RPM */

};

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

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

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

&soc {

tlmm: pinctrl@1000000 {

i2c_8 {

i2c_8_active: i2c_8_active {

/* active state */

mux {

pins = "gpio98", "gpio99";

function = "blsp_i2c8";

};

config {

pins = "gpio98", "gpio99";

drive-strength = <2>;

bias-disable;

};

};

i2c_8_sleep: i2c_8_sleep {

/* suspended state */

mux {

pins = "gpio98", "gpio99";

function = "gpio";

};

config {

pins = "gpio98", "gpio99";

drive-strength = <2>;

bias-disable;

};

};

};

iqs263_irq_config: iqs263_irq_config {

mux {

pins = "gpio48";

function = "gpio";

};

config {

pins = "gpio48";

drive-strength = <2>;

bias-pull-up;

};

};

iqs263节点中的pinctrl-0 属性指向了表明其io口属性的节点为iqs263_irq_config,相关代码也在2.3.1指示的msm8953-pinctrl.dtsi文件中。

其中定义了iqs263的中断IO脚为Gpio48

iqs263节点中的vdd-supply,vio-supply属性指示了表明iqs263芯片供电的引脚的节点pm8953_l5,代码如下

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

&rpm_bus {

rpm-regulator-ldoa5 {

status = "okay";

pm8953_l5: regulator-l5 {

regulator-min-microvolt = <1800000>;

regulator-max-microvolt = <1800000>;

qcom,init-voltage = <1800000>;

status = "okay";

};

};

iqs263的interrupts = <48 0x2>属性表明中断号为48,2代表下降沿触发

文档信息

--------------

* 作者:

* 版权声明:自由转载-非商用

* 转载: []

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值