The &drm_panel_funcs.enable() and &drm_panel_funcs.disable() mainly help turn on/off the backlight to make the image visible, and the backlight operations are even needless if drm_panel_of_backlight() or drm_panel_dp_aux_backlight() is applied, in which case the enabling and disabling process just add necessary delays.
Therefore, it should make sense to remove panel disabling and move panel enabling after analogix_dp_set_bridge() finished. Signed-off-by: Damon Ding <damon.d...@rock-chips.com> --- drivers/gpu/drm/bridge/analogix/analogix_dp_core.c | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c index b67087639609..f4807ef337e6 100644 --- a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c +++ b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c @@ -840,9 +840,6 @@ static int analogix_dp_commit(struct analogix_dp_device *dp) { int ret; - /* Keep the panel disabled while we configure video */ - drm_panel_disable(dp->plat_data->panel); - ret = analogix_dp_train_link(dp); if (ret) { dev_err(dp->dev, "unable to do link train, ret=%d\n", ret); @@ -862,9 +859,6 @@ static int analogix_dp_commit(struct analogix_dp_device *dp) return ret; } - /* Safe to enable the panel now */ - drm_panel_enable(dp->plat_data->panel); - /* Check whether panel supports fast training */ ret = analogix_dp_fast_link_train_detection(dp); if (ret) @@ -1242,6 +1236,7 @@ static void analogix_dp_bridge_atomic_enable(struct drm_bridge *bridge, while (timeout_loop < MAX_PLL_LOCK_LOOP) { if (analogix_dp_set_bridge(dp) == 0) { dp->dpms_mode = DRM_MODE_DPMS_ON; + drm_panel_enable(dp->plat_data->panel); return; } dev_err(dp->dev, "failed to set bridge, retry: %d\n", -- 2.34.1