mfd: Support active high IRQs on WM835x
authorMark Brown <broonie@opensource.wolfsonmicro.com>
Fri, 6 Feb 2009 14:27:13 +0000 (15:27 +0100)
committerSamuel Ortiz <samuel@sortiz.org>
Sat, 4 Apr 2009 22:32:20 +0000 (00:32 +0200)
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 f22b18b70796b9668ff26fb688e22c0e0deac1f1..a285cc0cc704840da473b967e559a62a9ca6fb8a 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 980669d50dcaef1d450eec3d93412b7c3cdb38a1..42cca672f34061cc1072ae4e636d1e8770ba2bbf 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;
 };