mirror of
https://github.com/tbsdtv/linux_media.git
synced 2025-07-23 20:51:03 +02:00
pwm: lpss: Remove suspend/resume handlers
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. 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-8-hdegoede@redhat.com
This commit is contained in:
@@ -89,7 +89,6 @@ static int pwm_lpss_prepare(struct device *dev)
|
|||||||
|
|
||||||
static const struct dev_pm_ops pwm_lpss_platform_pm_ops = {
|
static const struct dev_pm_ops pwm_lpss_platform_pm_ops = {
|
||||||
.prepare = pwm_lpss_prepare,
|
.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[] = {
|
static const struct acpi_device_id pwm_lpss_acpi_match[] = {
|
||||||
|
@@ -260,30 +260,6 @@ int pwm_lpss_remove(struct pwm_lpss_chip *lpwm)
|
|||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(pwm_lpss_remove);
|
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_DESCRIPTION("PWM driver for Intel LPSS");
|
||||||
MODULE_AUTHOR("Mika Westerberg <mika.westerberg@linux.intel.com>");
|
MODULE_AUTHOR("Mika Westerberg <mika.westerberg@linux.intel.com>");
|
||||||
MODULE_LICENSE("GPL v2");
|
MODULE_LICENSE("GPL v2");
|
||||||
|
@@ -19,7 +19,6 @@ struct pwm_lpss_chip {
|
|||||||
struct pwm_chip chip;
|
struct pwm_chip chip;
|
||||||
void __iomem *regs;
|
void __iomem *regs;
|
||||||
const struct pwm_lpss_boardinfo *info;
|
const struct pwm_lpss_boardinfo *info;
|
||||||
u32 saved_ctrl[MAX_PWMS];
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct pwm_lpss_boardinfo {
|
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,
|
struct pwm_lpss_chip *pwm_lpss_probe(struct device *dev, struct resource *r,
|
||||||
const struct pwm_lpss_boardinfo *info);
|
const struct pwm_lpss_boardinfo *info);
|
||||||
int pwm_lpss_remove(struct pwm_lpss_chip *lpwm);
|
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 */
|
#endif /* __PWM_LPSS_H */
|
||||||
|
Reference in New Issue
Block a user