我一直在学习linux设备树,我们一直在尝试开始移植一些较旧的代码以使用它们。我在gpio Controller 节点上遇到了一些麻烦:

gpio1: gpio-controller@c00 {
    #gpio-cells = <2>;
    compatible = "cavium,octeon-3860-gpio";
    reg = <0xc00 0x100>;
    gpio-controller;
    /* Interrupts are specified by two parts:
     * 1) GPIO pin number (0..15)
     * 2) Triggering (1 - edge rising
     *                2 - edge falling
     *                4 - level active high
     *                8 - level active low)
     */
    interrupt-controller;
    interrupt-cells = <2>;
    interrupts = <0 24>, <1 25>, <2 26>, <3 27>;

};

我正在尝试将某些IRQ映射到GPIO引脚,但是,它似乎唯一将第一个 IRQ 24映射到gpio引脚0。设备树绑定(bind)文本文件似乎暗示它会(设备树/绑定(bind)/gpio/cavium-octeon-gpio.txt)。有谁知道我如何将少数中断映射到不同的gpio引脚?

最佳答案

平台之间的gpio处理仍然不是100%相同,因此,我将为您提供要点,您可能需要适应您的平台(查找使用相同或相似SoC的dts)。
我的平台是飞思卡尔imx.6
这是它的要旨:

第一的:
单独保留gpio1节点。 (它可能是在您从上游供应商处获得的dtsi中正确设置的)

第二:
如果您想要gpio 1 15为中断,高电平有效
在您要使用gpio中断的设备节点中,添加

interrupt-parent = <&gpio1>;
interrupts = <15 IRQ_TYPE_LEVEL_HIGH>;

例如:来自arch/arm/boot/dts/imx6qdl-gw52xx.dtsi
touchscreen: egalax_ts@04 {
        compatible = "eeti,egalax_ts";
        reg = <0x04>;
        interrupt-parent = <&gpio7>;
        interrupts = <12 2>;
        wakeup-gpios = <&gpio7 12 GPIO_ACTIVE_LOW>;
};

关于Linux设备树帮助(GPIO Controller /中断),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23494743/

10-13 05:02