To support bridge hotplug we will need better control over the steps
involved in the crm_connector creation, especially in terms of error
management. This will be complicated by the length and amount of return
points in this function. In preparation, split the code to initialize HDMI
audio and CEC fields out to a separate function.

No functional changes. Just moving code around.

Signed-off-by: Luca Ceresoli <[email protected]>
---
 drivers/gpu/drm/display/drm_bridge_connector.c | 102 ++++++++++++++-----------
 1 file changed, 57 insertions(+), 45 deletions(-)

diff --git a/drivers/gpu/drm/display/drm_bridge_connector.c 
b/drivers/gpu/drm/display/drm_bridge_connector.c
index d8a033ed8f41..e6306e98a167 100644
--- a/drivers/gpu/drm/display/drm_bridge_connector.c
+++ b/drivers/gpu/drm/display/drm_bridge_connector.c
@@ -930,6 +930,60 @@ static int drm_bridge_connector_get_bridges(struct 
drm_bridge_connector *bridge_
        return 0;
 }
 
+static struct drm_bridge_connector *
+drm_bridge_connector_init_hdmi_audio_cec(struct drm_bridge_connector 
*bridge_connector)
+{
+       int ret;
+
+       if (bridge_connector->bridge_hdmi_audio ||
+           bridge_connector->bridge_dp_audio) {
+               struct device *dev;
+               struct drm_bridge *bridge;
+
+               if (bridge_connector->bridge_hdmi_audio)
+                       bridge = bridge_connector->bridge_hdmi_audio;
+               else
+                       bridge = bridge_connector->bridge_dp_audio;
+
+               dev = bridge->hdmi_audio_dev;
+
+               ret = drm_connector_hdmi_audio_init(&bridge_connector->base, 
dev,
+                                                   
&drm_bridge_connector_hdmi_audio_funcs,
+                                                   
bridge->hdmi_audio_max_i2s_playback_channels,
+                                                   
bridge->hdmi_audio_i2s_formats,
+                                                   
bridge->hdmi_audio_spdif_playback,
+                                                   
bridge->hdmi_audio_dai_port);
+               if (ret)
+                       return ERR_PTR(ret);
+       }
+
+       if (bridge_connector->bridge_hdmi_cec &&
+           bridge_connector->bridge_hdmi_cec->ops & 
DRM_BRIDGE_OP_HDMI_CEC_NOTIFIER) {
+               struct drm_bridge *bridge = bridge_connector->bridge_hdmi_cec;
+
+               ret = 
drmm_connector_hdmi_cec_notifier_register(&bridge_connector->base,
+                                                               NULL,
+                                                               
bridge->hdmi_cec_dev);
+               if (ret)
+                       return ERR_PTR(ret);
+       }
+
+       if (bridge_connector->bridge_hdmi_cec &&
+           bridge_connector->bridge_hdmi_cec->ops & 
DRM_BRIDGE_OP_HDMI_CEC_ADAPTER) {
+               struct drm_bridge *bridge = bridge_connector->bridge_hdmi_cec;
+
+               ret = drmm_connector_hdmi_cec_register(&bridge_connector->base,
+                                                      
&drm_bridge_connector_hdmi_cec_funcs,
+                                                      
bridge->hdmi_cec_adapter_name,
+                                                      
bridge->hdmi_cec_available_las,
+                                                      bridge->hdmi_cec_dev);
+               if (ret)
+                       return ERR_PTR(ret);
+       }
+
+       return bridge_connector;
+}
+
 /**
  * drm_bridge_connector_add_connector - add the drm_connector
  * @bridge_connector: drm_bridge_connector to add the drm_connector to
@@ -997,51 +1051,9 @@ drm_bridge_connector_add_connector(struct 
drm_bridge_connector *bridge_connector
                        return ERR_PTR(ret);
        }
 
-       if (bridge_connector->bridge_hdmi_audio ||
-           bridge_connector->bridge_dp_audio) {
-               struct device *dev;
-               struct drm_bridge *bridge;
-
-               if (bridge_connector->bridge_hdmi_audio)
-                       bridge = bridge_connector->bridge_hdmi_audio;
-               else
-                       bridge = bridge_connector->bridge_dp_audio;
-
-               dev = bridge->hdmi_audio_dev;
-
-               ret = drm_connector_hdmi_audio_init(connector, dev,
-                                                   
&drm_bridge_connector_hdmi_audio_funcs,
-                                                   
bridge->hdmi_audio_max_i2s_playback_channels,
-                                                   
bridge->hdmi_audio_i2s_formats,
-                                                   
bridge->hdmi_audio_spdif_playback,
-                                                   
bridge->hdmi_audio_dai_port);
-               if (ret)
-                       return ERR_PTR(ret);
-       }
-
-       if (bridge_connector->bridge_hdmi_cec &&
-           bridge_connector->bridge_hdmi_cec->ops & 
DRM_BRIDGE_OP_HDMI_CEC_NOTIFIER) {
-               struct drm_bridge *bridge = bridge_connector->bridge_hdmi_cec;
-
-               ret = drmm_connector_hdmi_cec_notifier_register(connector,
-                                                               NULL,
-                                                               
bridge->hdmi_cec_dev);
-               if (ret)
-                       return ERR_PTR(ret);
-       }
-
-       if (bridge_connector->bridge_hdmi_cec &&
-           bridge_connector->bridge_hdmi_cec->ops & 
DRM_BRIDGE_OP_HDMI_CEC_ADAPTER) {
-               struct drm_bridge *bridge = bridge_connector->bridge_hdmi_cec;
-
-               ret = drmm_connector_hdmi_cec_register(connector,
-                                                      
&drm_bridge_connector_hdmi_cec_funcs,
-                                                      
bridge->hdmi_cec_adapter_name,
-                                                      
bridge->hdmi_cec_available_las,
-                                                      bridge->hdmi_cec_dev);
-               if (ret)
-                       return ERR_PTR(ret);
-       }
+       bridge_connector = 
drm_bridge_connector_init_hdmi_audio_cec(bridge_connector);
+       if (IS_ERR(bridge_connector))
+               return bridge_connector;
 
        drm_connector_helper_add(connector, &drm_bridge_connector_helper_funcs);
 

-- 
2.54.0

Reply via email to