Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input
[sfrench/cifs-2.6.git] / drivers / input / keyboard / omap4-keypad.c
index a7dc286f406c992ebd55d764808691101dfff690..840e53732753f556a6f89e7afde3b2c1bf65edcc 100644 (file)
@@ -126,12 +126,8 @@ static irqreturn_t omap4_keypad_irq_handler(int irq, void *dev_id)
 {
        struct omap4_keypad *keypad_data = dev_id;
 
-       if (kbd_read_irqreg(keypad_data, OMAP4_KBD_IRQSTATUS)) {
-               /* Disable interrupts */
-               kbd_write_irqreg(keypad_data, OMAP4_KBD_IRQENABLE,
-                                OMAP4_VAL_IRQDISABLE);
+       if (kbd_read_irqreg(keypad_data, OMAP4_KBD_IRQSTATUS))
                return IRQ_WAKE_THREAD;
-       }
 
        return IRQ_NONE;
 }
@@ -173,11 +169,6 @@ static irqreturn_t omap4_keypad_irq_thread_fn(int irq, void *dev_id)
        kbd_write_irqreg(keypad_data, OMAP4_KBD_IRQSTATUS,
                         kbd_read_irqreg(keypad_data, OMAP4_KBD_IRQSTATUS));
 
-       /* enable interrupts */
-       kbd_write_irqreg(keypad_data, OMAP4_KBD_IRQENABLE,
-               OMAP4_DEF_IRQENABLE_EVENTEN |
-                               OMAP4_DEF_IRQENABLE_LONGKEY);
-
        return IRQ_HANDLED;
 }
 
@@ -214,9 +205,10 @@ static void omap4_keypad_close(struct input_dev *input)
 
        disable_irq(keypad_data->irq);
 
-       /* Disable interrupts */
+       /* Disable interrupts and wake-up events */
        kbd_write_irqreg(keypad_data, OMAP4_KBD_IRQENABLE,
                         OMAP4_VAL_IRQDISABLE);
+       kbd_writel(keypad_data, OMAP4_KBD_WAKEUPENABLE, 0);
 
        /* clear pending interrupts */
        kbd_write_irqreg(keypad_data, OMAP4_KBD_IRQSTATUS,
@@ -365,7 +357,7 @@ static int omap4_keypad_probe(struct platform_device *pdev)
        }
 
        error = request_threaded_irq(keypad_data->irq, omap4_keypad_irq_handler,
-                                    omap4_keypad_irq_thread_fn, 0,
+                                    omap4_keypad_irq_thread_fn, IRQF_ONESHOT,
                                     "omap4-keypad", keypad_data);
        if (error) {
                dev_err(&pdev->dev, "failed to register interrupt\n");