libertas_sdio: handle spurious interrupts
authorDaniel Drake <dsd@laptop.org>
Thu, 2 Jun 2011 23:13:26 +0000 (00:13 +0100)
committerJohn W. Linville <linville@tuxdriver.com>
Fri, 3 Jun 2011 18:22:06 +0000 (14:22 -0400)
commitd2ac49fe3c7c4730323c1042fb53a2e008643b6a
treec216b63dcbf466cdf6ceac26d11a6a0a19bb5e39
parent59e7e7078d6c2c6294caf454c6e3695f9d3e46a2
libertas_sdio: handle spurious interrupts

Commit 06e8935febe687e2a561707d4c7ca4245d261dbe adds an IRQ handling
optimization for single-function SDIO cards like this one, but at the
same time exposes a small hardware bug.

During hardware init, an interrupt is generated with (apparently) no
source. Previously, mmc threw this interrupt away, but now (due to the
optimization), the mmc layer passes this onto libertas, before it is ready
(and before it has enabled interrupts), causing a crash.

Work around this hardware bug by registering the IRQ handler later and
making it capable of handling interrupts with no cause. The change that
makes the IRQ handler registration happen later actually eliminates
the spurious interrupt as well.

Signed-off-by: Daniel Drake <dsd@laptop.org>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/libertas/if_sdio.c