The meson HDMI encoder calls drm_atomic_helper_connector_reset()
during connector creation to allocate an initial connector state
needed by drm_connector_attach_max_bpc_property(). However, the
driver only needs to allocate a pristine state, which is exactly
what atomic_create_state provides.

Convert to drm_atomic_helper_connector_create_state() with proper
error handling.

Signed-off-by: Maxime Ripard <[email protected]>
---
Cc: Jerome Brunet <[email protected]>
Cc: Kevin Hilman <[email protected]>
Cc: Martin Blumenstingl <[email protected]>
Cc: [email protected]
---
 drivers/gpu/drm/meson/meson_encoder_hdmi.c | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/meson/meson_encoder_hdmi.c 
b/drivers/gpu/drm/meson/meson_encoder_hdmi.c
index c4355c5cc340..c04e381b2c10 100644
--- a/drivers/gpu/drm/meson/meson_encoder_hdmi.c
+++ b/drivers/gpu/drm/meson/meson_encoder_hdmi.c
@@ -446,11 +446,21 @@ int meson_encoder_hdmi_probe(struct meson_drm *priv)
 
        /*
         * drm_connector_attach_max_bpc_property() requires the
         * connector to have a state.
         */
-       drm_atomic_helper_connector_reset(meson_encoder_hdmi->connector);
+       if (!meson_encoder_hdmi->connector->state) {
+               struct drm_connector_state *conn_state;
+               
+               conn_state = 
drm_atomic_helper_connector_create_state(meson_encoder_hdmi->connector);
+               if (IS_ERR(conn_state)) {
+                       ret = PTR_ERR(conn_state);
+                       goto err_put_node;
+               }
+
+               meson_encoder_hdmi->connector->state = conn_state;
+       }
 
        if (meson_vpu_is_compatible(priv, VPU_COMPATIBLE_GXL) ||
            meson_vpu_is_compatible(priv, VPU_COMPATIBLE_GXM) ||
            meson_vpu_is_compatible(priv, VPU_COMPATIBLE_G12A))
                
drm_connector_attach_hdr_output_metadata_property(meson_encoder_hdmi->connector);

-- 
2.55.0

Reply via email to