[Intel-gfx] [PATCH v10 07/17] pwm: lpss: Remove suspend/resume handlers
Andy Shevchenko
andriy.shevchenko at linux.intel.com
Thu Sep 3 12:48:16 UTC 2020
On Thu, Sep 03, 2020 at 01:23:27PM +0200, Hans de Goede wrote:
> PWM controller drivers should not restore the PWM state on resume. The
> convention is that PWM consumers do this by calling pwm_apply_state(),
> so that it can be done at the exact moment when the consumer needs
> the state to be stored, avoiding e.g. backlight flickering.
>
> The only in kernel consumers of the pwm-lpss code, the i915 driver
> and the pwm-class sysfs interface code both correctly restore the
> state on resume, so there is no need to do this in the pwm-lpss code.
>
> More-over the removed resume handler is buggy, since it blindly
> restores the ctrl-register contents without setting the update
> bit, which is necessary to get the controller to actually use/apply
> the restored base-unit and on-time-div values.
While this is okay
Reviewed-by: Andy Shevchenko <andriy.shevchenko at linux.intel.com>
the question is do we need to have similar in acpi_lpss.c?
For example,
static const struct lpss_device_desc byt_pwm_dev_desc = {
.flags = LPSS_SAVE_CTX,
^^^^^^^^^^^^^^
.prv_offset = 0x800,
.setup = byt_pwm_setup,
};
static const struct lpss_device_desc bsw_pwm_dev_desc = {
.flags = LPSS_SAVE_CTX | LPSS_NO_D3_DELAY,
^^^^^^^^^^^^^^
.prv_offset = 0x800,
.setup = bsw_pwm_setup,
};
> Acked-by: Thierry Reding <thierry.reding at gmail.com>
> Signed-off-by: Hans de Goede <hdegoede at redhat.com>
> ---
> Changes in v9:
> - This is a new patch in v9 of this series
> ---
> drivers/pwm/pwm-lpss-platform.c | 1 -
> drivers/pwm/pwm-lpss.c | 24 ------------------------
> drivers/pwm/pwm-lpss.h | 3 ---
> 3 files changed, 28 deletions(-)
>
> diff --git a/drivers/pwm/pwm-lpss-platform.c b/drivers/pwm/pwm-lpss-platform.c
> index 48f34d20aecd..c6502cf7a7af 100644
> --- a/drivers/pwm/pwm-lpss-platform.c
> +++ b/drivers/pwm/pwm-lpss-platform.c
> @@ -89,7 +89,6 @@ static int pwm_lpss_prepare(struct device *dev)
>
> static const struct dev_pm_ops pwm_lpss_platform_pm_ops = {
> .prepare = pwm_lpss_prepare,
> - SET_SYSTEM_SLEEP_PM_OPS(pwm_lpss_suspend, pwm_lpss_resume)
> };
>
> static const struct acpi_device_id pwm_lpss_acpi_match[] = {
> diff --git a/drivers/pwm/pwm-lpss.c b/drivers/pwm/pwm-lpss.c
> index 9c5c7217c9b6..3444c56b4bed 100644
> --- a/drivers/pwm/pwm-lpss.c
> +++ b/drivers/pwm/pwm-lpss.c
> @@ -260,30 +260,6 @@ int pwm_lpss_remove(struct pwm_lpss_chip *lpwm)
> }
> EXPORT_SYMBOL_GPL(pwm_lpss_remove);
>
> -int pwm_lpss_suspend(struct device *dev)
> -{
> - struct pwm_lpss_chip *lpwm = dev_get_drvdata(dev);
> - int i;
> -
> - for (i = 0; i < lpwm->info->npwm; i++)
> - lpwm->saved_ctrl[i] = readl(lpwm->regs + i * PWM_SIZE + PWM);
> -
> - return 0;
> -}
> -EXPORT_SYMBOL_GPL(pwm_lpss_suspend);
> -
> -int pwm_lpss_resume(struct device *dev)
> -{
> - struct pwm_lpss_chip *lpwm = dev_get_drvdata(dev);
> - int i;
> -
> - for (i = 0; i < lpwm->info->npwm; i++)
> - writel(lpwm->saved_ctrl[i], lpwm->regs + i * PWM_SIZE + PWM);
> -
> - return 0;
> -}
> -EXPORT_SYMBOL_GPL(pwm_lpss_resume);
> -
> MODULE_DESCRIPTION("PWM driver for Intel LPSS");
> MODULE_AUTHOR("Mika Westerberg <mika.westerberg at linux.intel.com>");
> MODULE_LICENSE("GPL v2");
> diff --git a/drivers/pwm/pwm-lpss.h b/drivers/pwm/pwm-lpss.h
> index 7909fa12fca2..70db7e389d66 100644
> --- a/drivers/pwm/pwm-lpss.h
> +++ b/drivers/pwm/pwm-lpss.h
> @@ -19,7 +19,6 @@ struct pwm_lpss_chip {
> struct pwm_chip chip;
> void __iomem *regs;
> const struct pwm_lpss_boardinfo *info;
> - u32 saved_ctrl[MAX_PWMS];
> };
>
> struct pwm_lpss_boardinfo {
> @@ -37,7 +36,5 @@ struct pwm_lpss_boardinfo {
> struct pwm_lpss_chip *pwm_lpss_probe(struct device *dev, struct resource *r,
> const struct pwm_lpss_boardinfo *info);
> int pwm_lpss_remove(struct pwm_lpss_chip *lpwm);
> -int pwm_lpss_suspend(struct device *dev);
> -int pwm_lpss_resume(struct device *dev);
>
> #endif /* __PWM_LPSS_H */
> --
> 2.28.0
>
--
With Best Regards,
Andy Shevchenko
More information about the Intel-gfx
mailing list