static int exynos_dp_create_connector(struct exynos_drm_display *display, struct drm_encoder *encoder) { struct exynos_dp_device *dp = display_to_dp(display); struct drm_connector *connector = &dp->connector; int ret; dp->encoder = encoder; /* Pre-empt DP connector creation if there's a bridge */ ret = exynos_drm_attach_lcd_bridge(dp->drm_dev, encoder); if (ret) return 0; connector->polled = DRM_CONNECTOR_POLL_HPD; ret = drm_connector_init(dp->drm_dev, connector, &exynos_dp_connector_funcs, DRM_MODE_CONNECTOR_eDP); if (ret) { DRM_ERROR("Failed to initialize connector with drm\n"); return ret; } drm_connector_helper_add(connector, &exynos_dp_connector_helper_funcs); drm_connector_register(connector); drm_mode_connector_attach_encoder(connector, encoder); if (dp->panel) ret = drm_panel_attach(dp->panel, &dp->connector); return ret; }
static int exynos_dp_bridge_attach(struct drm_bridge *bridge) { struct exynos_dp_device *dp = bridge->driver_private; struct drm_encoder *encoder = &dp->encoder; struct drm_connector *connector = &dp->connector; int ret; /* Pre-empt DP connector creation if there's a bridge */ if (dp->ptn_bridge) { ret = exynos_drm_attach_lcd_bridge(dp, encoder); if (!ret) return 0; } connector->polled = DRM_CONNECTOR_POLL_HPD; ret = drm_connector_init(dp->drm_dev, connector, &exynos_dp_connector_funcs, DRM_MODE_CONNECTOR_eDP); if (ret) { DRM_ERROR("Failed to initialize connector with drm\n"); return ret; } drm_connector_helper_add(connector, &exynos_dp_connector_helper_funcs); drm_connector_register(connector); drm_mode_connector_attach_encoder(connector, encoder); if (dp->panel) ret = drm_panel_attach(dp->panel, &dp->connector); return ret; }