int error;
        u64 keys;
 
-       error = pm_runtime_get_sync(dev);
-       if (error < 0) {
-               pm_runtime_put_noidle(dev);
+       error = pm_runtime_resume_and_get(dev);
+       if (error)
                return IRQ_NONE;
-       }
 
        low = kbd_readl(keypad_data, OMAP4_KBD_FULLCODE31_0);
        high = kbd_readl(keypad_data, OMAP4_KBD_FULLCODE63_32);
        struct device *dev = input->dev.parent;
        int error;
 
-       error = pm_runtime_get_sync(dev);
-       if (error < 0) {
-               pm_runtime_put_noidle(dev);
+       error = pm_runtime_resume_and_get(dev);
+       if (error)
                return error;
-       }
 
        disable_irq(keypad_data->irq);
 
        struct device *dev = input->dev.parent;
        int error;
 
-       error = pm_runtime_get_sync(dev);
-       if (error < 0)
-               pm_runtime_put_noidle(dev);
+       error = pm_runtime_resume_and_get(dev);
+       if (error)
+               dev_err(dev, "%s: pm_runtime_resume_and_get() failed: %d\n",
+                       __func__, error);
 
        disable_irq(keypad_data->irq);
        omap4_keypad_stop(keypad_data);
         * Enable clocks for the keypad module so that we can read
         * revision register.
         */
-       error = pm_runtime_get_sync(dev);
-       if (error < 0) {
-               dev_err(dev, "pm_runtime_get_sync() failed\n");
-               pm_runtime_put_noidle(dev);
+       error = pm_runtime_resume_and_get(dev);
+       if (error) {
+               dev_err(dev, "pm_runtime_resume_and_get() failed\n");
                return error;
        }