drm/rockchip: analogix_dp: Fix unbalanced clock

Fixes: ad3cad3616 ("drm/rockchip: analogix_dp: Covert to use bulk clk")
Change-Id: I5a980fdef172013138293c999a00014141a0ffbd
Signed-off-by: Wyon Bi <bivvy.bi@rock-chips.com>
This commit is contained in:
Wyon Bi
2021-09-23 11:34:52 +08:00
committed by Tao Huang
parent 25003d386c
commit fa11be322f
3 changed files with 9 additions and 36 deletions

View File

@@ -1258,12 +1258,6 @@ static int analogix_dp_set_bridge(struct analogix_dp_device *dp)
pm_runtime_get_sync(dp->dev);
ret = clk_prepare_enable(dp->clock);
if (ret < 0) {
DRM_ERROR("Failed to prepare_enable the clock clk [%d]\n", ret);
goto out_dp_clk_pre;
}
if (dp->plat_data->power_on_start)
dp->plat_data->power_on_start(dp->plat_data);
@@ -1303,8 +1297,6 @@ out_dp_init:
analogix_dp_phy_power_off(dp);
if (dp->plat_data->power_off)
dp->plat_data->power_off(dp->plat_data);
clk_disable_unprepare(dp->clock);
out_dp_clk_pre:
pm_runtime_put_sync(dp->dev);
return ret;
@@ -1355,8 +1347,6 @@ static void analogix_dp_bridge_disable(struct drm_bridge *bridge)
analogix_dp_set_analog_power_down(dp, POWER_ALL, 1);
analogix_dp_phy_power_off(dp);
clk_disable_unprepare(dp->clock);
pm_runtime_put_sync(dp->dev);
if (dp->plat_data->panel) {
@@ -1641,14 +1631,6 @@ analogix_dp_bind(struct device *dev, struct drm_device *drm_dev,
}
}
dp->clock = devm_clk_get(&pdev->dev, "dp");
if (IS_ERR(dp->clock)) {
dev_err(&pdev->dev, "failed to get clock\n");
return ERR_CAST(dp->clock);
}
clk_prepare_enable(dp->clock);
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
dp->reg_base = devm_ioremap_resource(&pdev->dev, res);
@@ -1742,15 +1724,12 @@ void analogix_dp_unbind(struct analogix_dp_device *dp)
drm_dp_aux_unregister(&dp->aux);
pm_runtime_disable(dp->dev);
clk_disable_unprepare(dp->clock);
}
EXPORT_SYMBOL_GPL(analogix_dp_unbind);
#ifdef CONFIG_PM
int analogix_dp_suspend(struct analogix_dp_device *dp)
{
clk_disable_unprepare(dp->clock);
if (dp->plat_data->panel) {
if (drm_panel_unprepare(dp->plat_data->panel))
DRM_ERROR("failed to turnoff the panel\n");
@@ -1762,14 +1741,6 @@ EXPORT_SYMBOL_GPL(analogix_dp_suspend);
int analogix_dp_resume(struct analogix_dp_device *dp)
{
int ret;
ret = clk_prepare_enable(dp->clock);
if (ret < 0) {
DRM_ERROR("Failed to prepare_enable the clock clk [%d]\n", ret);
return ret;
}
if (dp->plat_data->panel) {
if (drm_panel_prepare(dp->plat_data->panel)) {
DRM_ERROR("failed to setup the panel\n");

View File

@@ -171,7 +171,6 @@ struct analogix_dp_device {
struct drm_connector connector;
struct drm_bridge *bridge;
struct drm_dp_aux aux;
struct clk *clock;
unsigned int irq;
void __iomem *reg_base;

View File

@@ -530,12 +530,6 @@ static int rockchip_dp_bind(struct device *dev, struct device *master,
if (ret < 0)
goto err_cleanup_encoder;
dp->adp = analogix_dp_bind(dev, dp->drm_dev, &dp->plat_data);
if (IS_ERR(dp->adp)) {
ret = PTR_ERR(dp->adp);
goto err_unreg_psr;
}
if (dp->data->audio) {
struct hdmi_codec_pdata codec_data = {
.ops = &rockchip_dp_audio_codec_ops,
@@ -555,11 +549,20 @@ static int rockchip_dp_bind(struct device *dev, struct device *master,
}
}
dp->adp = analogix_dp_bind(dev, dp->drm_dev, &dp->plat_data);
if (IS_ERR(dp->adp)) {
ret = PTR_ERR(dp->adp);
goto err_unreg_audio;
}
dp->sub_dev.connector = &dp->adp->connector;
dp->sub_dev.of_node = dev->of_node;
rockchip_drm_register_sub_dev(&dp->sub_dev);
return 0;
err_unreg_audio:
if (dp->audio_pdev)
platform_device_unregister(dp->audio_pdev);
err_unreg_psr:
rockchip_drm_psr_unregister(&dp->encoder);
err_cleanup_encoder: