static struct drm_encoder * exynos_dpi_best_encoder(struct drm_connector *connector) { struct exynos_dpi *ctx = connector_to_dpi(connector); return ctx->encoder; }
static enum drm_connector_status exynos_dpi_detect(struct drm_connector *connector, bool force) { struct exynos_dpi *ctx = connector_to_dpi(connector); if (ctx->panel && !ctx->panel->connector) drm_panel_attach(ctx->panel, &ctx->connector); return connector_status_connected; }
static enum drm_connector_status exynos_dpi_detect(struct drm_connector *connector, bool force) { struct exynos_dpi *ctx = connector_to_dpi(connector); /* panels supported only by boot-loader are always connected */ if (!ctx->panel_node) return connector_status_connected; if (!ctx->panel) { ctx->panel = of_drm_find_panel(ctx->panel_node); if (ctx->panel) drm_panel_attach(ctx->panel, &ctx->connector); } if (ctx->panel) return connector_status_connected; return connector_status_disconnected; }
static int exynos_dpi_get_modes(struct drm_connector *connector) { struct exynos_dpi *ctx = connector_to_dpi(connector); /* fimd timings gets precedence over panel modes */ if (ctx->vm) { struct drm_display_mode *mode; mode = drm_mode_create(connector->dev); if (!mode) { DRM_ERROR("failed to create a new display mode\n"); return 0; } drm_display_mode_from_videomode(ctx->vm, mode); mode->type = DRM_MODE_TYPE_DRIVER | DRM_MODE_TYPE_PREFERRED; drm_mode_probed_add(connector, mode); return 1; } if (ctx->panel) return ctx->panel->funcs->get_modes(ctx->panel); return 0; }