diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_logo.c b/drivers/gpu/drm/rockchip/rockchip_drm_logo.c index 8d2e680bcdf0..9d74f40a0350 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_logo.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_logo.c @@ -991,19 +991,35 @@ static int update_state(struct drm_device *drm_dev, { struct drm_crtc *crtc = set->crtc; struct drm_connector *connector = set->sub_dev->connector; + struct drm_encoder *encoder; struct drm_display_mode *mode = set->mode; struct drm_plane_state *primary_state; struct drm_crtc_state *crtc_state; struct drm_connector_state *conn_state; + const struct drm_connector_helper_funcs *connector_helper_funcs; int ret; struct rockchip_crtc_state *s; + connector_helper_funcs = connector->helper_private; + if (!connector_helper_funcs) + return -ENXIO; + if (connector_helper_funcs->best_encoder) + encoder = connector_helper_funcs->best_encoder(connector); + else + encoder = rockchip_drm_connector_get_single_encoder(connector); + if (!encoder) + return -ENXIO; + crtc_state = drm_atomic_get_crtc_state(state, crtc); if (IS_ERR(crtc_state)) return PTR_ERR(crtc_state); conn_state = drm_atomic_get_connector_state(state, connector); if (IS_ERR(conn_state)) return PTR_ERR(conn_state); + ret = drm_atomic_add_encoder_bridges(state, encoder); + if (ret) + return ret; + s = to_rockchip_crtc_state(crtc_state); s->left_margin = set->left_margin; s->right_margin = set->right_margin; @@ -1022,19 +1038,8 @@ static int update_state(struct drm_device *drm_dev, crtc_state->active = true; } else { const struct drm_encoder_helper_funcs *encoder_helper_funcs; - const struct drm_connector_helper_funcs *connector_helper_funcs; - struct drm_encoder *encoder; struct drm_bridge *bridge; - connector_helper_funcs = connector->helper_private; - if (!connector_helper_funcs) - return -ENXIO; - if (connector_helper_funcs->best_encoder) - encoder = connector_helper_funcs->best_encoder(connector); - else - encoder = rockchip_drm_connector_get_single_encoder(connector); - if (!encoder) - return -ENXIO; encoder_helper_funcs = encoder->helper_private; if (!encoder_helper_funcs->atomic_check) return -ENXIO;