@@ -218,14 +218,29 @@ static int matrix_keypad_suspend(struct platform_device *pdev, pm_message_t stat
struct matrix_keypad *keypad = platform_get_drvdata(pdev);
const struct matrix_keypad_platform_data *pdata = keypad->pdata;
int i;
+ int err;
matrix_keypad_stop(keypad->input_dev);
- if (device_may_wakeup(&pdev->dev))
- for (i = 0; i < pdata->num_row_gpios; i++)
- enable_irq_wake(gpio_to_irq(pdata->row_gpios[i]));
+ if (device_may_wakeup(&pdev->dev)) {
+ for (i = 0; i < pdata->num_row_gpios; i++) {
+ err = enable_irq_wake(gpio_to_irq(pdata->row_gpios[i]));
+ if (err) {
+ dev_err(&pdev->dev,
+ "Failed to setup GPIO %d as "
+ "wakeup source, err: %d\n",
+ pdata->row_gpios[i], err);
+ goto err_out;
+ }
+ }
+ }
return 0;
+
+ err_out:
+ while (--i >= 0)
+ disable_irq_wake(gpio_to_irq(pdata->row_gpios[i]));
+ return err;
}
static int matrix_keypad_resume(struct platform_device *pdev)