drm/rockchip: analogix_dp: Add runtime PM callback to handle pclk

Ensure the pclk is enabled when register access occurs.

Change-Id: Id108a04aed8424725dcc02dec9fe46bfc724c09b
Signed-off-by: Wyon Bi <bivvy.bi@rock-chips.com>
This commit is contained in:
Wyon Bi
2020-07-27 09:53:42 +08:00
committed by Tao Huang
parent 4238c5d851
commit 6d63e141f9

View File

@@ -133,16 +133,9 @@ static int rockchip_dp_poweron_start(struct analogix_dp_plat_data *plat_data)
dev_warn(dp->dev, "failed to enable vccio: %d\n", ret);
}
ret = clk_prepare_enable(dp->pclk);
if (ret < 0) {
DRM_DEV_ERROR(dp->dev, "failed to enable pclk %d\n", ret);
return ret;
}
ret = rockchip_dp_pre_init(dp);
if (ret < 0) {
DRM_DEV_ERROR(dp->dev, "failed to dp pre init %d\n", ret);
clk_disable_unprepare(dp->pclk);
return ret;
}
@@ -165,8 +158,6 @@ static int rockchip_dp_powerdown(struct analogix_dp_plat_data *plat_data)
if (ret != 0)
return ret;
clk_disable_unprepare(dp->pclk);
if (dp->vccio_supply)
regulator_disable(dp->vccio_supply);
@@ -299,14 +290,10 @@ static int rockchip_dp_drm_encoder_loader_protect(struct drm_encoder *encoder,
"failed to enable vccio: %d\n", ret);
}
clk_prepare_enable(dp->pclk);
rockchip_drm_psr_inhibit_put(&dp->encoder);
} else {
rockchip_drm_psr_inhibit_get(&dp->encoder);
clk_disable_unprepare(dp->pclk);
if (dp->vccio_supply)
regulator_disable(dp->vccio_supply);
@@ -537,12 +524,32 @@ static int rockchip_dp_resume(struct device *dev)
return analogix_dp_resume(dp->adp);
}
static int rockchip_dp_runtime_suspend(struct device *dev)
{
struct rockchip_dp_device *dp = dev_get_drvdata(dev);
clk_disable_unprepare(dp->pclk);
return 0;
}
static int rockchip_dp_runtime_resume(struct device *dev)
{
struct rockchip_dp_device *dp = dev_get_drvdata(dev);
clk_prepare_enable(dp->pclk);
return 0;
}
#endif
static const struct dev_pm_ops rockchip_dp_pm_ops = {
#ifdef CONFIG_PM_SLEEP
.suspend_late = rockchip_dp_suspend,
.resume_early = rockchip_dp_resume,
.runtime_suspend = rockchip_dp_runtime_suspend,
.runtime_resume = rockchip_dp_runtime_resume,
#endif
};