Linux设备树,同一irq上的多个设备

Linux设备树,同一irq上的多个设备,linux,linux-kernel,linux-device-driver,device-tree,Linux,Linux Kernel,Linux Device Driver,Device Tree,我有一个嵌入式系统,可以连接两个不同的触摸屏控制器(ft5x06或sitronix),具体取决于我的供应商 我只想要一个软件 我将两个控制器放在设备树中,探测机制将完成这项工作 i2c1: i2c@f0018000 { edt-ft5x06@38 { compatible = "edt,edt-ft5x06"; reg = <0x38>;

我有一个嵌入式系统,可以连接两个不同的触摸屏控制器(ft5x06或sitronix),具体取决于我的供应商

我只想要一个软件

我将两个控制器放在设备树中,探测机制将完成这项工作

        i2c1: i2c@f0018000 {              
            edt-ft5x06@38 {
                compatible = "edt,edt-ft5x06";
                reg = <0x38>;
                pinctrl-names = "default";
                pinctrl-0 = <&pinctrl_ft5x06>;
                interrupt-parent = <&pioE>;
                interrupts = <7 0>;
                reset-gpios = <&pioE 6 GPIO_ACTIVE_LOW>;
            };
            sitronix_ts@55 {
                compatible = "sitronix,ST1633";
                reg = <0x55>;
                pinctrl-names = "default";
                pinctrl-0 = <&pinctrl_st1633>;
                interrupt-parent = <&pioE>;
                interrupts = <7 0>;
                reset-gpios = <&pioE 6 GPIO_ACTIVE_LOW>;
            };
        };
i2c1:i2c@f0018000 {              
乙二胺四乙酸-ft5x06@38 {
compatible=“edt,edt-ft5x06”;
reg=;
pinctrl names=“默认”;
pinctrl-0=;
中断父项=;
中断=;
重置gpios=;
};
西特罗尼克斯_ts@55 {
compatible=“sitronix,ST1633”;
reg=;
pinctrl names=“默认”;
pinctrl-0=;
中断父项=;
中断=;
重置gpios=;
};
};
除了中断之外,它还能工作: ft5x06获得分配的IRQ 7,但sitronix没有:( (如果在I2C总线上未检测到该部件,则探针功能不会请求irq,因此irq对另一个保持空闲)


有什么东西可以共享此中断,还是我应该以其他方式共享此中断?

中断的第二个参数是标志。您需要在两个设备上启用
IRQF_SHARED
。请做好准备,并非所有驱动程序都是为此而设计的。IMHO,您需要有两个不同的设备树文件,具体取决于您的提供商;并放置一个I2C设备n两个设备树上的ode。这就是设备树背后的全部要点-在其中存储特定于硬件的详细信息,并将其传递给内核,以便不需要对内核进行任何更改。感谢您的响应!@0andriy:IRQF_SHARED在编译时给了我“语法错误”(linux内核3.10)@vtha:创建2个不同的dtb是一个简单的解决方案,但我们如何管理自定义硬件扩展总线和自定义即插即用板(ISA旧式)?我是否应该删除设备树并返回板/平台描述?@Yvan,我认为您需要检查设备上的中断控制器及其设备树绑定,以了解它是否支持传递标志(IRQF_共享)。我快速检查了内核4.4.X和“pioE”作为中断父级,它看起来像基于atmel的AIC,不支持传递IRQF_共享标志。不过我不确定。