Merge branch 'core/softlockup' of git://git.kernel.org/pub/scm/linux/kernel/git/tip...
[firefly-linux-kernel-4.4.55.git] / drivers / mfd / wm8350-core.c
index f22b18b70796b9668ff26fb688e22c0e0deac1f1..c2be3088e2e1dd0c2e9936e020fc42e1d7209586 100644 (file)
@@ -1111,7 +1111,7 @@ int wm8350_read_auxadc(struct wm8350 *wm8350, int channel, int scale, int vref)
        do {
                schedule_timeout_interruptible(1);
                reg = wm8350_reg_read(wm8350, WM8350_DIGITISER_CONTROL_1);
-       } while (--tries && (reg & WM8350_AUXADC_POLL));
+       } while ((reg & WM8350_AUXADC_POLL) && --tries);
 
        if (!tries)
                dev_err(wm8350->dev, "adc chn %d read timeout\n", channel);
@@ -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",