Message ID | 20191203161914.1312555-5-thierry.reding@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | None | expand |
03.12.2019 19:19, Thierry Reding пишет: > From: Thierry Reding <treding@nvidia.com> > > Upon system suspend, make sure the +5V HDMI regulator is disabled. This > avoids potentially leaking current to the HDMI connector. This also > makes sure that upon resume the regulator is enabled again, which in > some cases is necessary to properly restore the state of the supply on > resume. > > Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch> > Signed-off-by: Thierry Reding <treding@nvidia.com> > --- > drivers/gpu/drm/tegra/sor.c | 24 +++++++++++++++++++----- > 1 file changed, 19 insertions(+), 5 deletions(-) > > diff --git a/drivers/gpu/drm/tegra/sor.c b/drivers/gpu/drm/tegra/sor.c > index 615cb319fa8b..2200f4cd397a 100644 > --- a/drivers/gpu/drm/tegra/sor.c > +++ b/drivers/gpu/drm/tegra/sor.c > @@ -3912,8 +3912,7 @@ static int tegra_sor_remove(struct platform_device *pdev) > return 0; > } > > -#ifdef CONFIG_PM > -static int tegra_sor_suspend(struct device *dev) > +static int tegra_sor_runtime_suspend(struct device *dev) > { > struct tegra_sor *sor = dev_get_drvdata(dev); > int err; > @@ -3935,7 +3934,7 @@ static int tegra_sor_suspend(struct device *dev) > return 0; > } > > -static int tegra_sor_resume(struct device *dev) > +static int tegra_sor_runtime_resume(struct device *dev) > { > struct tegra_sor *sor = dev_get_drvdata(dev); > int err; > @@ -3967,10 +3966,25 @@ static int tegra_sor_resume(struct device *dev) > > return 0; > } > -#endif > + > +static int tegra_sor_suspend(struct device *dev) > +{ > + struct tegra_sor *sor = dev_get_drvdata(dev); > + > + return regulator_disable(sor->hdmi_supply); > +} > + > +static int tegra_sor_resume(struct device *dev) > +{ > + struct tegra_sor *sor = dev_get_drvdata(dev); > + > + return regulator_enable(sor->hdmi_supply); > +} These functions should be annotated with __maybe_unused attribute. > static const struct dev_pm_ops tegra_sor_pm_ops = { > - SET_RUNTIME_PM_OPS(tegra_sor_suspend, tegra_sor_resume, NULL) > + SET_RUNTIME_PM_OPS(tegra_sor_runtime_suspend, tegra_sor_runtime_resume, > + NULL) > + SET_SYSTEM_SLEEP_PM_OPS(tegra_sor_suspend, tegra_sor_resume) > }; > > struct platform_driver tegra_sor_driver = { >
diff --git a/drivers/gpu/drm/tegra/sor.c b/drivers/gpu/drm/tegra/sor.c index 615cb319fa8b..2200f4cd397a 100644 --- a/drivers/gpu/drm/tegra/sor.c +++ b/drivers/gpu/drm/tegra/sor.c @@ -3912,8 +3912,7 @@ static int tegra_sor_remove(struct platform_device *pdev) return 0; } -#ifdef CONFIG_PM -static int tegra_sor_suspend(struct device *dev) +static int tegra_sor_runtime_suspend(struct device *dev) { struct tegra_sor *sor = dev_get_drvdata(dev); int err; @@ -3935,7 +3934,7 @@ static int tegra_sor_suspend(struct device *dev) return 0; } -static int tegra_sor_resume(struct device *dev) +static int tegra_sor_runtime_resume(struct device *dev) { struct tegra_sor *sor = dev_get_drvdata(dev); int err; @@ -3967,10 +3966,25 @@ static int tegra_sor_resume(struct device *dev) return 0; } -#endif + +static int tegra_sor_suspend(struct device *dev) +{ + struct tegra_sor *sor = dev_get_drvdata(dev); + + return regulator_disable(sor->hdmi_supply); +} + +static int tegra_sor_resume(struct device *dev) +{ + struct tegra_sor *sor = dev_get_drvdata(dev); + + return regulator_enable(sor->hdmi_supply); +} static const struct dev_pm_ops tegra_sor_pm_ops = { - SET_RUNTIME_PM_OPS(tegra_sor_suspend, tegra_sor_resume, NULL) + SET_RUNTIME_PM_OPS(tegra_sor_runtime_suspend, tegra_sor_runtime_resume, + NULL) + SET_SYSTEM_SLEEP_PM_OPS(tegra_sor_suspend, tegra_sor_resume) }; struct platform_driver tegra_sor_driver = {