drm/bridge: megachips: add helper to create connector
authorSam Ravnborg <sam@ravnborg.org>
Sun, 26 Jul 2020 20:33:18 +0000 (22:33 +0200)
committerSam Ravnborg <sam@ravnborg.org>
Mon, 27 Jul 2020 15:23:55 +0000 (17:23 +0200)
Factor out connector creation to a small helper function.

Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Cc: Peter Senna Tschudin <peter.senna@gmail.com>
Cc: Martin Donnelly <martin.donnelly@ge.com>
Cc: Martyn Welch <martyn.welch@collabora.co.uk>
Cc: Andrzej Hajda <a.hajda@samsung.com>
Cc: Neil Armstrong <narmstrong@baylibre.com>
Cc: Laurent Pinchart <Laurent.pinchart@ideasonboard.com>
Cc: Jonas Karlman <jonas@kwiboo.se>
Cc: Jernej Skrabec <jernej.skrabec@siol.net>
Link: https://patchwork.freedesktop.org/patch/msgid/20200726203324.3722593-10-sam@ravnborg.org
drivers/gpu/drm/bridge/megachips-stdpxxxx-ge-b850v3-fw.c

index 6200f12..258e052 100644 (file)
@@ -191,6 +191,32 @@ static const struct drm_connector_funcs ge_b850v3_lvds_connector_funcs = {
        .atomic_destroy_state = drm_atomic_helper_connector_destroy_state,
 };
 
+static int ge_b850v3_lvds_create_connector(struct drm_bridge *bridge)
+{
+       struct drm_connector *connector = &ge_b850v3_lvds_ptr->connector;
+       int ret;
+
+       if (!bridge->encoder) {
+               DRM_ERROR("Parent encoder object not found");
+               return -ENODEV;
+       }
+
+       connector->polled = DRM_CONNECTOR_POLL_HPD;
+
+       drm_connector_helper_add(connector,
+                                &ge_b850v3_lvds_connector_helper_funcs);
+
+       ret = drm_connector_init(bridge->dev, connector,
+                                &ge_b850v3_lvds_connector_funcs,
+                                DRM_MODE_CONNECTOR_DisplayPort);
+       if (ret) {
+               DRM_ERROR("Failed to initialize connector with drm\n");
+               return ret;
+       }
+
+       return drm_connector_attach_encoder(connector, bridge->encoder);
+}
+
 static irqreturn_t ge_b850v3_lvds_irq_handler(int irq, void *dev_id)
 {
        struct i2c_client *stdp4028_i2c
@@ -209,7 +235,6 @@ static irqreturn_t ge_b850v3_lvds_irq_handler(int irq, void *dev_id)
 static int ge_b850v3_lvds_attach(struct drm_bridge *bridge,
                                 enum drm_bridge_attach_flags flags)
 {
-       struct drm_connector *connector = &ge_b850v3_lvds_ptr->connector;
        struct i2c_client *stdp4028_i2c
                        = ge_b850v3_lvds_ptr->stdp4028_i2c;
        int ret;
@@ -219,25 +244,7 @@ static int ge_b850v3_lvds_attach(struct drm_bridge *bridge,
                return -EINVAL;
        }
 
-       if (!bridge->encoder) {
-               DRM_ERROR("Parent encoder object not found");
-               return -ENODEV;
-       }
-
-       connector->polled = DRM_CONNECTOR_POLL_HPD;
-
-       drm_connector_helper_add(connector,
-                                &ge_b850v3_lvds_connector_helper_funcs);
-
-       ret = drm_connector_init(bridge->dev, connector,
-                                &ge_b850v3_lvds_connector_funcs,
-                                DRM_MODE_CONNECTOR_DisplayPort);
-       if (ret) {
-               DRM_ERROR("Failed to initialize connector with drm\n");
-               return ret;
-       }
-
-       ret = drm_connector_attach_encoder(connector, bridge->encoder);
+       ret = ge_b850v3_lvds_create_connector(bridge);
        if (ret)
                return ret;