我正在使用Linux内核设备树,乍一看似乎有多个中断父母的节点缺少功能。我有一个控制自定义臂嵌入板的司机,它需要GPIO和引脚中断多个GPIO中断父母,并管理车载电池,电压低IRQ,RESET_PENDER等。

我发现了一个来源,似乎有人在额外的功能中被攻击以处理这一点,但这不是官方的,并且涉及修改我不想要的中断源文件。 修改为术语添加了一个名为“中断 - 扩展”的术语。在这里,中断父级在元组中指定。

    #interrupt-cells = <2>;
    interrupts-extended = <&gpio3 21 1>, <&gpio7 13 2>; /* voltage/reset irq */
.

我尚未找到如何使用中断映射属性的任何手段或示例来实现简单的GPIO中断映射,以便在那里丢失。

如果我只使用单个GPIO中断父级,那就是这样的正确方法就是这样。

interrupt-parent = <&gpio1>;
interrupts = <9 2>, <8,1>;
.

但只允许声明一个一个中断父级,其中包含“中断”中指定的多个中断,并且它们必须都属于指定的父级。我正在使用2个中断父母,GPIO7和GPIO3。

在设备树中的单个设备节点中使用不同中断父项实现多个中断的正确方法?

有帮助吗?

解决方案

我不知道这是否适用于GPIO中断父母,但对于其他类型的中断控制器,使用“中断映射”属性,并使用Phandles指定每个单独的控制器的中断列表。以下是我看到驾驶员所需3中断的示例,从“INTC”控制器和“SPMI”控制器中有1个中断:

interrupts = <0 1 2>;
interrupt-map = <0 &intc 0 134 0
                 1 &intc 0 140 0
                 2 &spmi 0 0x9 0 0>;
interrupt-names = "core_irq", "async_irq", "pmic_id_irq";
interrupt-map-mask = <0 0 0 0>;
.

在此示例中,INTC节点具有<3>的#中断单元值,SPMI节点具有#中断单元值为4(这意味着需要与其各自的Phandles一起使用的许多参数)。

中断名称字段是可选的,但允许您按代码中的姓名请求IRQ(即,使用platform_get_irq_byname(),而不是platform_get_irq())

说实话,我有点不确定用于什么中断地图掩码。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top