MIPS: DB1200: PCMCIA card detection must not be auto-enabled.
Same issues as SD card detection: One of both is always triggering and the handlers take care to shut it up and enable the other. To avoid messages about "unbalanced interrupt enable/disable" they must not be automatically enabled when initally requested. This was not an issue with the db1200_defconfig due to fortunate timings; on a build without network chip support the warnings appear. Signed-off-by: Manuel Lauss <manuel.lauss@gmail.com> To: Linux-MIPS <linux-mips@linux-mips.org> Patchwork: http://patchwork.linux-mips.org/patch/1133/ Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
This commit is contained in:
parent
0dfeecacd8
commit
0000a53901
2 changed files with 11 additions and 15 deletions
|
@ -66,12 +66,16 @@ static int __init db1200_arch_init(void)
|
|||
set_irq_type(AU1200_GPIO7_INT, IRQF_TRIGGER_LOW);
|
||||
bcsr_init_irq(DB1200_INT_BEGIN, DB1200_INT_END, AU1200_GPIO7_INT);
|
||||
|
||||
/* do not autoenable these: CPLD has broken edge int handling,
|
||||
* and the CD handler setup requires manual enabling to work
|
||||
* around that.
|
||||
/* insert/eject pairs: one of both is always screaming. To avoid
|
||||
* issues they must not be automatically enabled when initially
|
||||
* requested.
|
||||
*/
|
||||
irq_to_desc(DB1200_SD0_INSERT_INT)->status |= IRQ_NOAUTOEN;
|
||||
irq_to_desc(DB1200_SD0_EJECT_INT)->status |= IRQ_NOAUTOEN;
|
||||
irq_to_desc(DB1200_PC0_INSERT_INT)->status |= IRQ_NOAUTOEN;
|
||||
irq_to_desc(DB1200_PC0_EJECT_INT)->status |= IRQ_NOAUTOEN;
|
||||
irq_to_desc(DB1200_PC1_INSERT_INT)->status |= IRQ_NOAUTOEN;
|
||||
irq_to_desc(DB1200_PC1_EJECT_INT)->status |= IRQ_NOAUTOEN;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -146,7 +146,6 @@ static irqreturn_t db1200_pcmcia_cdirq(int irq, void *data)
|
|||
static int db1x_pcmcia_setup_irqs(struct db1x_pcmcia_sock *sock)
|
||||
{
|
||||
int ret;
|
||||
unsigned long flags;
|
||||
|
||||
if (sock->stschg_irq != -1) {
|
||||
ret = request_irq(sock->stschg_irq, db1000_pcmcia_stschgirq,
|
||||
|
@ -162,30 +161,23 @@ static int db1x_pcmcia_setup_irqs(struct db1x_pcmcia_sock *sock)
|
|||
* active one disabled.
|
||||
*/
|
||||
if (sock->board_type == BOARD_TYPE_DB1200) {
|
||||
local_irq_save(flags);
|
||||
|
||||
ret = request_irq(sock->insert_irq, db1200_pcmcia_cdirq,
|
||||
IRQF_DISABLED, "pcmcia_insert", sock);
|
||||
if (ret) {
|
||||
local_irq_restore(flags);
|
||||
if (ret)
|
||||
goto out1;
|
||||
}
|
||||
|
||||
ret = request_irq(sock->eject_irq, db1200_pcmcia_cdirq,
|
||||
IRQF_DISABLED, "pcmcia_eject", sock);
|
||||
if (ret) {
|
||||
free_irq(sock->insert_irq, sock);
|
||||
local_irq_restore(flags);
|
||||
goto out1;
|
||||
}
|
||||
|
||||
/* disable the currently active one */
|
||||
/* enable the currently silent one */
|
||||
if (db1200_card_inserted(sock))
|
||||
disable_irq_nosync(sock->insert_irq);
|
||||
enable_irq(sock->eject_irq);
|
||||
else
|
||||
disable_irq_nosync(sock->eject_irq);
|
||||
|
||||
local_irq_restore(flags);
|
||||
enable_irq(sock->insert_irq);
|
||||
} else {
|
||||
/* all other (older) Db1x00 boards use a GPIO to show
|
||||
* card detection status: use both-edge triggers.
|
||||
|
|
Loading…
Reference in a new issue