diff --git a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c index 2276b0a78268..90cd6b1d6f59 100644 --- a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c +++ b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c @@ -811,12 +811,6 @@ static void analogix_dp_commit(struct analogix_dp_device *dp) struct video_info *video = &dp->video_info; int ret; - /* Keep the panel disabled while we configure video */ - if (dp->plat_data->panel) { - if (drm_panel_disable(dp->plat_data->panel)) - DRM_ERROR("failed to disable the panel\n"); - } - ret = analogix_dp_set_link_train(dp, dp->video_info.max_lane_count, dp->video_info.max_link_rate); if (ret) { @@ -837,12 +831,6 @@ static void analogix_dp_commit(struct analogix_dp_device *dp) ret = analogix_dp_config_video(dp); if (ret) dev_err(dp->dev, "unable to config video\n"); - - /* Safe to enable the panel now */ - if (dp->plat_data->panel) { - if (drm_panel_enable(dp->plat_data->panel)) - DRM_ERROR("failed to enable the panel\n"); - } } static int analogix_dp_get_modes(struct drm_connector *connector) @@ -997,6 +985,9 @@ static void analogix_dp_bridge_enable(struct drm_bridge *bridge) if (dp->dpms_mode == DRM_MODE_DPMS_ON) return; + if (dp->plat_data->panel) + drm_panel_prepare(dp->plat_data->panel); + pm_runtime_get_sync(dp->dev); if (dp->plat_data->power_on) @@ -1007,6 +998,9 @@ static void analogix_dp_bridge_enable(struct drm_bridge *bridge) enable_irq(dp->irq); analogix_dp_commit(dp); + if (dp->plat_data->panel) + drm_panel_enable(dp->plat_data->panel); + dp->dpms_mode = DRM_MODE_DPMS_ON; } @@ -1017,12 +1011,8 @@ static void analogix_dp_bridge_disable(struct drm_bridge *bridge) if (dp->dpms_mode != DRM_MODE_DPMS_ON) return; - if (dp->plat_data->panel) { - if (drm_panel_disable(dp->plat_data->panel)) { - DRM_ERROR("failed to disable the panel\n"); - return; - } - } + if (dp->plat_data->panel) + drm_panel_disable(dp->plat_data->panel); disable_irq_nosync(dp->irq); phy_power_off(dp->phy); @@ -1032,6 +1022,9 @@ static void analogix_dp_bridge_disable(struct drm_bridge *bridge) pm_runtime_put_sync(dp->dev); + if (dp->plat_data->panel) + drm_panel_unprepare(dp->plat_data->panel); + dp->dpms_mode = DRM_MODE_DPMS_OFF; } @@ -1282,13 +1275,6 @@ analogix_dp_bind(struct device *dev, struct drm_device *drm_dev, phy_power_on(dp->phy); - if (dp->plat_data->panel) { - if (drm_panel_prepare(dp->plat_data->panel)) { - DRM_ERROR("failed to setup the panel\n"); - return ERR_PTR(-EBUSY); - } - } - if (dp->hpd_gpio) { ret = devm_request_threaded_irq(dev, gpiod_to_irq(dp->hpd_gpio), NULL, @@ -1352,8 +1338,6 @@ void analogix_dp_unbind(struct analogix_dp_device *dp) dp->encoder->funcs->destroy(dp->encoder); if (dp->plat_data->panel) { - if (drm_panel_unprepare(dp->plat_data->panel)) - DRM_ERROR("failed to turnoff the panel\n"); if (drm_panel_detach(dp->plat_data->panel)) DRM_ERROR("failed to detach the panel\n"); } @@ -1370,11 +1354,6 @@ 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"); - } - return 0; } EXPORT_SYMBOL_GPL(analogix_dp_suspend); @@ -1389,13 +1368,6 @@ int analogix_dp_resume(struct analogix_dp_device *dp) return ret; } - if (dp->plat_data->panel) { - if (drm_panel_prepare(dp->plat_data->panel)) { - DRM_ERROR("failed to setup the panel\n"); - return -EBUSY; - } - } - return 0; } EXPORT_SYMBOL_GPL(analogix_dp_resume);