diff options
author | Mathias Nyman <mathias.nyman@linux.intel.com> | 2014-08-19 07:00:01 -0400 |
---|---|---|
committer | Linus Walleij <linus.walleij@linaro.org> | 2014-08-21 08:44:57 -0400 |
commit | 8117bd531501ec329e4c9ea96fb7f9d5504c82f5 (patch) | |
tree | ede639d8682a7c4305fd46c87341785de50add23 /drivers/gpio/gpio-lynxpoint.c | |
parent | 58b84f6a97f7f8811e0636836734809ff52cad43 (diff) |
gpio-lynxpoint: enable input sensing in resume
It appears that input sensing bit might be reset during
suspend/resume. Set input sensing again for all requested gpios
in resume
Tested-by: Jerome Blin <jerome.blin@intel.com>
Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
Acked-by: Mika Westerberg <mika.westerberg@linux.intel.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Diffstat (limited to 'drivers/gpio/gpio-lynxpoint.c')
-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[] = { |