]> git.baikalelectronics.ru Git - kernel.git/commit
wl12xx: Handle platforms without level trigger interrupts
authorIdo Yariv <ido@wizery.com>
Thu, 31 Mar 2011 08:07:01 +0000 (10:07 +0200)
committerLuciano Coelho <coelho@ti.com>
Tue, 19 Apr 2011 13:49:20 +0000 (16:49 +0300)
commit4521025a0a69bb984f8eba65f9a33e56f4ae1107
tree25b284f436f24a0c21e4a656531831619002757c
parentf04f6a0c1e3f151ed2bb44477f82bbff9096de1c
wl12xx: Handle platforms without level trigger interrupts

Some platforms are incapable of triggering on level interrupts. Add a
platform quirks member in the platform data structure, as well as an
edge interrupt quirk which can be set on such platforms.

When the interrupt is requested with IRQF_TRIGGER_RISING, IRQF_ONESHOT
cannot be used, as we might miss interrupts that occur after the FW
status is cleared and before the threaded interrupt handler exits.

Moreover, when IRQF_ONESHOT is not set, iterating more than once in the
threaded interrupt handler introduces a few race conditions between this
handler and the hardirq handler. Currently this is worked around by
limiting the loop to one iteration only. This workaround has an impact
on performance. To remove to this restriction, the race conditions will
need to be addressed.

Signed-off-by: Ido Yariv <ido@wizery.com>
Signed-off-by: Luciano Coelho <coelho@ti.com>
drivers/net/wireless/wl12xx/main.c
drivers/net/wireless/wl12xx/sdio.c
drivers/net/wireless/wl12xx/spi.c
drivers/net/wireless/wl12xx/wl12xx.h
include/linux/wl12xx.h