OSDN Git Service

input: keyboard: correct suspend/resume for gpio_keys
authorShantanu Jain <shjain@codeaurora.org>
Wed, 19 Mar 2014 14:54:22 +0000 (20:24 +0530)
committerShantanu Jain <shjain@codeaurora.org>
Fri, 10 Feb 2017 12:00:08 +0000 (17:30 +0530)
Execute pinctrl operations at correct place in
suspend/resume procedure of gpio_keys driver.

Change-Id: Ic393778e35f52859512bd32ccbf6c4d1079a7e37
Signed-off-by: Shantanu Jain <shjain@codeaurora.org>
drivers/input/keyboard/gpio_keys.c

index 517b08b..cf29f27 100644 (file)
@@ -870,6 +870,14 @@ static int gpio_keys_suspend(struct device *dev)
        struct input_dev *input = ddata->input;
        int i, ret;
 
+       if (ddata->key_pinctrl) {
+               ret = gpio_keys_pinctrl_configure(ddata, false);
+               if (ret) {
+                       dev_err(dev, "failed to put the pin in suspend state\n");
+                       return ret;
+               }
+       }
+
        if (device_may_wakeup(dev)) {
                for (i = 0; i < ddata->pdata->nbuttons; i++) {
                        struct gpio_button_data *bdata = &ddata->data[i];
@@ -883,14 +891,6 @@ static int gpio_keys_suspend(struct device *dev)
                mutex_unlock(&input->mutex);
        }
 
-       if (ddata->key_pinctrl) {
-               ret = gpio_keys_pinctrl_configure(ddata, false);
-               if (ret) {
-                       dev_err(dev, "failed to put the pin in suspend state\n");
-                       return ret;
-               }
-       }
-
        return 0;
 }
 
@@ -901,6 +901,14 @@ static int gpio_keys_resume(struct device *dev)
        int error = 0;
        int i;
 
+       if (ddata->key_pinctrl) {
+               error = gpio_keys_pinctrl_configure(ddata, true);
+               if (error) {
+                       dev_err(dev, "failed to put the pin in resume state\n");
+                       return error;
+               }
+       }
+
        if (device_may_wakeup(dev)) {
                for (i = 0; i < ddata->pdata->nbuttons; i++) {
                        struct gpio_button_data *bdata = &ddata->data[i];
@@ -917,15 +925,6 @@ static int gpio_keys_resume(struct device *dev)
        if (error)
                return error;
 
-       if (ddata->key_pinctrl) {
-               error = gpio_keys_pinctrl_configure(ddata, true);
-               if (error) {
-                       dev_err(dev, "failed to put the pin in resume state\n");
-                       return error;
-               }
-       }
-
-
        gpio_keys_report_state(ddata);
        return 0;
 }