mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2025-02-27 15:29:54 +07:00
![]() Before this commit pwm_lpss_apply() was assuming 2 pre-conditions were met by the existing hardware state: 1. That the base-unit and on-time-div read back from the control register are those actually in use, so that it can skip setting the update bit if the read-back value matches the desired values. 2. That the controller is enabled when the cached pwm_state.enabled says that the controller is enabled. As the long history of fixes for subtle (often suspend/resume) lpss-pwm issues shows, these assumptions are not necessary always true. 1. Specifically is not true on some (*) Cherry Trail devices with a nasty GFX0._PS3 method which: a. saves the ctrl reg value. b. sets the base-unit to 0 and writes the update bit to apply/commit c. restores the original ctrl value without setting the update bit, so that the 0 base-unit value is still in use. 2. Assumption 2. currently is true, but only because of the code which saves/restores the state on suspend/resume. By convention restoring the PWM state should be done by the PWM consumer and the presence of this code in the pmw-lpss driver is a bug. Therefor the save/restore code will be dropped in the next patch in this series, after which this assumption also is no longer true. This commit changes the pwm_lpss_apply() to not make any assumptions about the state the hardware is in. Instead it makes pwm_lpss_apply() always fully program the PWM controller, making it much less fragile. *) Seen on the Acer One 10 S1003, Lenovo Ideapad Miix 310 and 320 models and various Medion models. Acked-by: Thierry Reding <thierry.reding@gmail.com> Signed-off-by: Hans de Goede <hdegoede@redhat.com> Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20200903112337.4113-7-hdegoede@redhat.com |
||
---|---|---|
.. | ||
core.c | ||
Kconfig | ||
Makefile | ||
pwm-ab8500.c | ||
pwm-atmel-hlcdc.c | ||
pwm-atmel-tcb.c | ||
pwm-atmel.c | ||
pwm-bcm2835.c | ||
pwm-bcm-iproc.c | ||
pwm-bcm-kona.c | ||
pwm-berlin.c | ||
pwm-brcmstb.c | ||
pwm-clps711x.c | ||
pwm-crc.c | ||
pwm-cros-ec.c | ||
pwm-ep93xx.c | ||
pwm-fsl-ftm.c | ||
pwm-hibvt.c | ||
pwm-img.c | ||
pwm-imx1.c | ||
pwm-imx27.c | ||
pwm-imx-tpm.c | ||
pwm-iqs620a.c | ||
pwm-jz4740.c | ||
pwm-lp3943.c | ||
pwm-lpc18xx-sct.c | ||
pwm-lpc32xx.c | ||
pwm-lpss-pci.c | ||
pwm-lpss-platform.c | ||
pwm-lpss.c | ||
pwm-lpss.h | ||
pwm-mediatek.c | ||
pwm-meson.c | ||
pwm-mtk-disp.c | ||
pwm-mxs.c | ||
pwm-omap-dmtimer.c | ||
pwm-pca9685.c | ||
pwm-puv3.c | ||
pwm-pxa.c | ||
pwm-rcar.c | ||
pwm-renesas-tpu.c | ||
pwm-rockchip.c | ||
pwm-samsung.c | ||
pwm-sifive.c | ||
pwm-spear.c | ||
pwm-sprd.c | ||
pwm-sti.c | ||
pwm-stm32-lp.c | ||
pwm-stm32.c | ||
pwm-stmpe.c | ||
pwm-sun4i.c | ||
pwm-tegra.c | ||
pwm-tiecap.c | ||
pwm-tiehrpwm.c | ||
pwm-twl-led.c | ||
pwm-twl.c | ||
pwm-vt8500.c | ||
pwm-zx.c | ||
sysfs.c |