]> bbs.cooldavid.org Git - net-next-2.6.git/commitdiff
powerpc: Correct parport interrupt parsing
authorMartyn Welch <martyn.welch@ge.com>
Mon, 26 Apr 2010 22:50:21 +0000 (22:50 +0000)
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>
Thu, 6 May 2010 06:49:26 +0000 (16:49 +1000)
Currently the parsing of the device tree in
arch/powerpc/include/asm/parport.h assumes that the interrupt provided in
the parallel port node is a valid virtual irq. The values for the
interrupts provided in the device tree should have meaning in the context
of the driver for the specific interrupt controller to which the interrupt
is connected and irq_of_parse_and_map() should be used to determine the
correct virtual irq.

Signed-off-by: Martyn Welch <martyn.welch@ge.com>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
arch/powerpc/include/asm/parport.h

index 94942d60ddfd315e1600e414c1c4f641cb5a4abe..1ca1102b4a2f0386b5ee2993588d6fb48f832a91 100644 (file)
@@ -19,6 +19,8 @@ static int __devinit parport_pc_find_nonpci_ports (int autoirq, int autodma)
        u32 io1, io2;
        int propsize;
        int count = 0;
+       int virq;
+
        for (np = NULL; (np = of_find_compatible_node(np,
                                                      "parallel",
                                                      "pnpPNP,400")) != NULL;) {
@@ -26,10 +28,13 @@ static int __devinit parport_pc_find_nonpci_ports (int autoirq, int autodma)
                if (!prop || propsize > 6*sizeof(u32))
                        continue;
                io1 = prop[1]; io2 = prop[2];
-               prop = of_get_property(np, "interrupts", NULL);
-               if (!prop)
+
+               virq = irq_of_parse_and_map(np, 0);
+               if (virq == NO_IRQ)
                        continue;
-               if (parport_pc_probe_port(io1, io2, prop[0], autodma, NULL, 0) != NULL)
+
+               if (parport_pc_probe_port(io1, io2, virq, autodma, NULL, 0)
+                               != NULL)
                        count++;
        }
        return count;