Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

[ARM] sa1111: avoid using hardcoded IRQ numbers for PCMCIA driver

The IRQs for card detect and status change are currently hardcoded in
SA1111 PCMCIA driver, which can be actually obtained from the .irq[]
from 'struct sa1111_dev' to keep it generic.

Signed-off-by: Eric Miao <eric.y.miao@gmail.com>

Eric Miao 08fa1590 ac609d26

+20 -5
+20 -5
drivers/pcmcia/sa1111_generic.c
··· 21 21 22 22 #include "sa1111_generic.h" 23 23 24 + #define IDX_IRQ_S0_READY_NINT (0) 25 + #define IDX_IRQ_S0_CD_VALID (1) 26 + #define IDX_IRQ_S0_BVD1_STSCHG (2) 27 + #define IDX_IRQ_S1_READY_NINT (3) 28 + #define IDX_IRQ_S1_CD_VALID (4) 29 + #define IDX_IRQ_S1_BVD1_STSCHG (5) 30 + 24 31 static struct pcmcia_irqs irqs[] = { 25 - { 0, IRQ_S0_CD_VALID, "SA1111 PCMCIA card detect" }, 26 - { 0, IRQ_S0_BVD1_STSCHG, "SA1111 PCMCIA BVD1" }, 27 - { 1, IRQ_S1_CD_VALID, "SA1111 CF card detect" }, 28 - { 1, IRQ_S1_BVD1_STSCHG, "SA1111 CF BVD1" }, 32 + { 0, NO_IRQ, "SA1111 PCMCIA card detect" }, 33 + { 0, NO_IRQ, "SA1111 PCMCIA BVD1" }, 34 + { 1, NO_IRQ, "SA1111 CF card detect" }, 35 + { 1, NO_IRQ, "SA1111 CF BVD1" }, 29 36 }; 30 37 31 38 static int sa1111_pcmcia_hw_init(struct soc_pcmcia_socket *skt) ··· 143 136 s->soc.ops = ops; 144 137 s->soc.socket.owner = ops->owner; 145 138 s->soc.socket.dev.parent = &dev->dev; 146 - s->soc.socket.pci_irq = s->soc.nr ? IRQ_S1_READY_NINT : IRQ_S0_READY_NINT; 139 + s->soc.socket.pci_irq = s->soc.nr ? 140 + dev->irq[IDX_IRQ_S0_READY_NINT] : 141 + dev->irq[IDX_IRQ_S1_READY_NINT]; 147 142 s->dev = dev; 148 143 149 144 ret = add(&s->soc); ··· 170 161 return -EBUSY; 171 162 172 163 base = dev->mapbase; 164 + 165 + /* Initialize PCMCIA IRQs */ 166 + irqs[0].irq = dev->irq[IDX_IRQ_S0_CD_VALID]; 167 + irqs[1].irq = dev->irq[IDX_IRQ_S0_BVD1_STSCHG]; 168 + irqs[2].irq = dev->irq[IDX_IRQ_S1_CD_VALID]; 169 + irqs[3].irq = dev->irq[IDX_IRQ_S1_BVD1_STSCHG]; 173 170 174 171 /* 175 172 * Initialise the suspend state.