diff options
| -rw-r--r-- | drivers/gpio/gpio-lynxpoint.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/drivers/gpio/gpio-lynxpoint.c b/drivers/gpio/gpio-lynxpoint.c index ff9eb911b5e4..fa945ec9ccff 100644 --- a/drivers/gpio/gpio-lynxpoint.c +++ b/drivers/gpio/gpio-lynxpoint.c | |||
| @@ -407,9 +407,27 @@ static int lp_gpio_runtime_resume(struct device *dev) | |||
| 407 | return 0; | 407 | return 0; |
| 408 | } | 408 | } |
| 409 | 409 | ||
| 410 | static int lp_gpio_resume(struct device *dev) | ||
| 411 | { | ||
| 412 | struct platform_device *pdev = to_platform_device(dev); | ||
| 413 | struct lp_gpio *lg = platform_get_drvdata(pdev); | ||
| 414 | unsigned long reg; | ||
| 415 | int i; | ||
| 416 | |||
| 417 | /* on some hardware suspend clears input sensing, re-enable it here */ | ||
| 418 | for (i = 0; i < lg->chip.ngpio; i++) { | ||
| 419 | if (gpiochip_is_requested(&lg->chip, i) != NULL) { | ||
| 420 | reg = lp_gpio_reg(&lg->chip, i, LP_CONFIG2); | ||
| 421 | outl(inl(reg) & ~GPINDIS_BIT, reg); | ||
| 422 | } | ||
| 423 | } | ||
| 424 | return 0; | ||
| 425 | } | ||
| 426 | |||
| 410 | static const struct dev_pm_ops lp_gpio_pm_ops = { | 427 | static const struct dev_pm_ops lp_gpio_pm_ops = { |
| 411 | .runtime_suspend = lp_gpio_runtime_suspend, | 428 | .runtime_suspend = lp_gpio_runtime_suspend, |
| 412 | .runtime_resume = lp_gpio_runtime_resume, | 429 | .runtime_resume = lp_gpio_runtime_resume, |
| 430 | .resume = lp_gpio_resume, | ||
| 413 | }; | 431 | }; |
| 414 | 432 | ||
| 415 | static const struct acpi_device_id lynxpoint_gpio_acpi_match[] = { | 433 | static const struct acpi_device_id lynxpoint_gpio_acpi_match[] = { |
