From fa11be322f8abd27aaca784662150ac5bd36de89 Mon Sep 17 00:00:00 2001 From: Wyon Bi Date: Thu, 23 Sep 2021 11:34:52 +0800 Subject: [PATCH] drm/rockchip: analogix_dp: Fix unbalanced clock Fixes: ad3cad36162e ("drm/rockchip: analogix_dp: Covert to use bulk clk") Change-Id: I5a980fdef172013138293c999a00014141a0ffbd Signed-off-by: Wyon Bi --- .../drm/bridge/analogix/analogix_dp_core.c | 29 ------------------- .../drm/bridge/analogix/analogix_dp_core.h | 1 - .../gpu/drm/rockchip/analogix_dp-rockchip.c | 15 ++++++---- 3 files changed, 9 insertions(+), 36 deletions(-) diff --git a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c index 866bd9ba2fb9..0a73585de7ff 100644 --- a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c +++ b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c @@ -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"); diff --git a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.h b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.h index 67d6ad1c8447..86dc6b6e225a 100644 --- a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.h +++ b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.h @@ -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; diff --git a/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c b/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c index 47d10d4626c3..26ba45e24acc 100644 --- a/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c +++ b/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c @@ -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: