summaryrefslogtreecommitdiff
path: root/include/linux
diff options
context:
space:
mode:
authorIdo Yariv <ido@wizery.com>2011-03-31 12:07:01 +0400
committerLuciano Coelho <coelho@ti.com>2011-04-19 17:49:20 +0400
commit341b7cde6ccc60672fcd7fc84dd24a1b7c0b8d94 (patch)
tree25b284f436f24a0c21e4a656531831619002757c /include/linux
parentd2f4d47d84f8c665ab9babb2cc84d2e7872a96e1 (diff)
downloadlinux-341b7cde6ccc60672fcd7fc84dd24a1b7c0b8d94.tar.xz
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>
Diffstat (limited to 'include/linux')
-rw-r--r--include/linux/wl12xx.h4
1 files changed, 4 insertions, 0 deletions
diff --git a/include/linux/wl12xx.h b/include/linux/wl12xx.h
index c1a743ea7470..4b697395326e 100644
--- a/include/linux/wl12xx.h
+++ b/include/linux/wl12xx.h
@@ -53,8 +53,12 @@ struct wl12xx_platform_data {
bool use_eeprom;
int board_ref_clock;
int board_tcxo_clock;
+ unsigned long platform_quirks;
};
+/* Platform does not support level trigger interrupts */
+#define WL12XX_PLATFORM_QUIRK_EDGE_IRQ BIT(0)
+
#ifdef CONFIG_WL12XX_PLATFORM_DATA
int wl12xx_set_platform_data(const struct wl12xx_platform_data *data);