mfd: Support active high IRQs on WM835x
Mark Brown [Fri, 6 Feb 2009 14:27:13 +0000 (15:27 +0100)]
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Samuel Ortiz <sameo@openedhand.com>

drivers/mfd/wm8350-core.c
include/linux/mfd/wm8350/core.h

index f22b18b..a285cc0 100644 (file)
@@ -1438,7 +1438,21 @@ int wm8350_device_init(struct wm8350 *wm8350, int irq,
        mutex_init(&wm8350->irq_mutex);
        INIT_WORK(&wm8350->irq_work, wm8350_irq_worker);
        if (irq) {
-               ret = request_irq(irq, wm8350_irq, 0,
+               int flags = 0;
+
+               if (pdata && pdata->irq_high) {
+                       flags |= IRQF_TRIGGER_HIGH;
+
+                       wm8350_set_bits(wm8350, WM8350_SYSTEM_CONTROL_1,
+                                       WM8350_IRQ_POL);
+               } else {
+                       flags |= IRQF_TRIGGER_LOW;
+
+                       wm8350_clear_bits(wm8350, WM8350_SYSTEM_CONTROL_1,
+                                         WM8350_IRQ_POL);
+               }
+
+               ret = request_irq(irq, wm8350_irq, flags,
                                  "wm8350", wm8350);
                if (ret != 0) {
                        dev_err(wm8350->dev, "Failed to request IRQ: %d\n",
index 980669d..42cca67 100644 (file)
@@ -640,9 +640,11 @@ struct wm8350 {
  *
  * @init: Function called during driver initialisation.  Should be
  *        used by the platform to configure GPIO functions and similar.
+ * @irq_high: Set if WM8350 IRQ is active high.
  */
 struct wm8350_platform_data {
        int (*init)(struct wm8350 *wm8350);
+       int irq_high;
 };