提交 7cad1978 编写于 作者: M Martyn Welch 提交者: Benjamin Herrenschmidt

powerpc: Correct parport interrupt parsing

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: NMartyn Welch <martyn.welch@ge.com>
Signed-off-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
上级 75c1d539
...@@ -19,6 +19,8 @@ static int __devinit parport_pc_find_nonpci_ports (int autoirq, int autodma) ...@@ -19,6 +19,8 @@ static int __devinit parport_pc_find_nonpci_ports (int autoirq, int autodma)
u32 io1, io2; u32 io1, io2;
int propsize; int propsize;
int count = 0; int count = 0;
int virq;
for (np = NULL; (np = of_find_compatible_node(np, for (np = NULL; (np = of_find_compatible_node(np,
"parallel", "parallel",
"pnpPNP,400")) != NULL;) { "pnpPNP,400")) != NULL;) {
...@@ -26,10 +28,13 @@ static int __devinit parport_pc_find_nonpci_ports (int autoirq, int autodma) ...@@ -26,10 +28,13 @@ static int __devinit parport_pc_find_nonpci_ports (int autoirq, int autodma)
if (!prop || propsize > 6*sizeof(u32)) if (!prop || propsize > 6*sizeof(u32))
continue; continue;
io1 = prop[1]; io2 = prop[2]; 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; 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++; count++;
} }
return count; return count;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册