50 lines
1.3 KiB
Diff
50 lines
1.3 KiB
Diff
|
--- a/drivers/bcma/driver_mips.c
|
||
|
+++ b/drivers/bcma/driver_mips.c
|
||
|
@@ -75,11 +75,16 @@ static u32 bcma_core_mips_irqflag(struct
|
||
|
return dev->core_index;
|
||
|
flag = bcma_aread32(dev, BCMA_MIPS_OOBSELOUTA30);
|
||
|
|
||
|
- return flag & 0x1F;
|
||
|
+ if (flag)
|
||
|
+ return flag & 0x1F;
|
||
|
+ else
|
||
|
+ return 0x3f;
|
||
|
}
|
||
|
|
||
|
/* Get the MIPS IRQ assignment for a specified device.
|
||
|
* If unassigned, 0 is returned.
|
||
|
+ * If disabled, 5 is returned.
|
||
|
+ * If not supported, 6 is returned.
|
||
|
*/
|
||
|
unsigned int bcma_core_mips_irq(struct bcma_device *dev)
|
||
|
{
|
||
|
@@ -88,13 +93,18 @@ unsigned int bcma_core_mips_irq(struct b
|
||
|
unsigned int irq;
|
||
|
|
||
|
irqflag = bcma_core_mips_irqflag(dev);
|
||
|
+ if (irqflag == 0x3f)
|
||
|
+ return 6;
|
||
|
|
||
|
for (irq = 1; irq <= 4; irq++)
|
||
|
if (bcma_read32(mdev, BCMA_MIPS_MIPS74K_INTMASK(irq)) &
|
||
|
(1 << irqflag))
|
||
|
return irq;
|
||
|
|
||
|
- return 0;
|
||
|
+ if ((1 << irqflag) & bcma_read32(mdev, BCMA_MIPS_MIPS74K_INTMASK(0)))
|
||
|
+ return 0;
|
||
|
+
|
||
|
+ return 5;
|
||
|
}
|
||
|
EXPORT_SYMBOL(bcma_core_mips_irq);
|
||
|
|
||
|
@@ -115,7 +125,7 @@ static void bcma_core_mips_set_irq(struc
|
||
|
bcma_write32(mdev, BCMA_MIPS_MIPS74K_INTMASK(0),
|
||
|
bcma_read32(mdev, BCMA_MIPS_MIPS74K_INTMASK(0)) &
|
||
|
~(1 << irqflag));
|
||
|
- else
|
||
|
+ else if (oldirq != 5)
|
||
|
bcma_write32(mdev, BCMA_MIPS_MIPS74K_INTMASK(oldirq), 0);
|
||
|
|
||
|
/* assign the new one */
|