linux/drivers/pwm
Hans de Goede 3e73a2e025 pwm: lpss: platform: Save/restore the ctrl register over a suspend/resume
commit 1d375b58c1 upstream.

On some devices the contents of the ctrl register get lost over a
suspend/resume and the PWM comes back up disabled after the resume.

This is seen on some Bay Trail devices with the PWM in ACPI enumerated
mode, so it shows up as a platform device instead of a PCI device.

If we still think it is enabled and then try to change the duty-cycle
after this, we end up with a "PWM_SW_UPDATE was not cleared" error and
the PWM is stuck in that state from then on.

This commit adds suspend and resume pm callbacks to the pwm-lpss-platform
code, which save/restore the ctrl register over a suspend/resume, fixing
this.

Note that:

1) There is no need to do this over a runtime suspend, since we
only runtime suspend when disabled and then we properly set the enable
bit and reprogram the timings when we re-enable the PWM.

2) This may be happening on more systems then we realize, but has been
covered up sofar by a bug in the acpi-lpss.c code which was save/restoring
the regular device registers instead of the lpss private registers due to
lpss_device_desc.prv_offset not being set. This is fixed by a later patch
in this series.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: Thierry Reding <thierry.reding@gmail.com>
[bwh: Backported to 3.16:
 - pwm-lpss is a single module, so make the new functions static
 - Only one PWM per chip is supported; remove the npwm assertion and loops
 - Adjust filenames, context]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
History 2018-11-20 18:05:11 +00:00
..
core.c pwm: Unexport children before chip removal 2017-02-23 03:53:57 +00:00
Kconfig pwm: kona: Introduce Kona PWM controller support 2014-04-28 13:07:44 +02:00
Makefile pwm: kona: Introduce Kona PWM controller support 2014-04-28 13:07:44 +02:00
pwm-ab8500.c pwm: ab8500: Fix wrong value shift for disable/enable PWM 2014-05-21 12:29:58 +02:00
pwm-atmel-tcb.c pwm: atmel-tcb: fix max time computation for slow clk source 2013-09-19 14:04:32 +02:00
pwm-atmel.c pwm: atmel: set pwm_chip can_sleep flag 2014-05-21 12:08:57 +02:00
pwm-bcm-kona.c pwm: kona: Introduce Kona PWM controller support 2014-04-28 13:07:44 +02:00
pwm-bfin.c pwm: Fill in missing .owner fields 2013-06-12 13:18:29 +02:00
pwm-clps711x.c pwm: Add CLPS711X PWM support 2014-03-18 21:15:16 +01:00
pwm-ep93xx.c pwm: ep93xx: split module author names 2013-12-20 10:53:50 +01:00
pwm-fsl-ftm.c pwm: fsl-ftm: set pwm_chip can_sleep flag 2014-05-23 09:11:21 +02:00
pwm-imx.c pwm: i.MX: Remove unnecessary OOM messages 2014-04-28 13:37:47 +02:00
pwm-jz4740.c pwm: jz4740: Use devm_clk_get() 2013-12-12 13:23:23 +01:00
pwm-lp3943.c pwm: lp3943: Set pwm_chip can_sleep flag 2014-05-21 12:09:09 +02:00
pwm-lpc32xx.c pwm: lpc32xx: Remove redundant of_match_ptr 2013-10-08 15:49:19 +02:00
pwm-lpss.c pwm: lpss: platform: Save/restore the ctrl register over a suspend/resume 2018-11-20 18:05:11 +00:00
pwm-mxs.c pwm: mxs: set pwm_chip can_sleep flag 2014-05-21 12:08:27 +02:00
pwm-pca9685.c pwm: pca9685: Fix wrong argument to set MODE1_SLEEP bit 2013-06-26 23:23:54 +02:00
pwm-puv3.c pwm: Fill in missing .owner fields 2013-06-12 13:18:29 +02:00
pwm-pxa.c pwm: pxa: Remove unnecessary OOM messages 2014-04-28 13:37:48 +02:00
pwm-renesas-tpu.c pwm: renesas-tpu: remove unused struct tpu_pwm_platform_data 2014-05-21 11:19:29 +02:00
pwm-samsung.c pwm: samsung: do not set manual update bit in pwm_samsung_config 2014-05-21 12:24:00 +02:00
pwm-spear.c pwm: Changes for v3.16-rc1 2014-06-11 14:06:55 -07:00
pwm-tegra.c pwm: tegra: Remove unnecessary OOM messages 2014-04-28 13:37:48 +02:00
pwm-tiecap.c pwm: pwm-tiecap: Remove unnecessary OOM messages 2014-04-28 13:37:48 +02:00
pwm-tiehrpwm.c pwm: tiehrpwm: fix clock imbalance in probe error path 2017-11-26 13:50:22 +00:00
pwm-tipwmss.c drivers/pwm: don't check resource with devm_ioremap_resource 2013-05-18 11:55:58 +02:00
pwm-tipwmss.h pwm: davinci: Add Kconfig support for ECAP & EHRPWM devices 2013-03-22 11:35:20 +01:00
pwm-twl-led.c pwm: twl-led: Include linux/of.h header 2013-10-08 15:45:44 +02:00
pwm-twl.c pwm: twl: Really disable twl6030 PWMs 2014-05-08 23:41:47 +02:00
pwm-vt8500.c pwm: vt8500: Remove unnecessary OOM messages 2014-04-28 13:37:48 +02:00
sysfs.c pwm: Fix device reference leak 2017-02-23 03:54:40 +00:00