static int analogix_dp_get_modes(struct drm_connector *connector) { struct analogix_dp_device *dp = to_dp(connector); struct edid *edid; int ret, num_modes = 0; if (dp->plat_data->panel) { num_modes += drm_panel_get_modes(dp->plat_data->panel); } else { ret = analogix_dp_prepare_panel(dp, true, false); if (ret) { DRM_ERROR("Failed to prepare panel (%d)\n", ret); return 0; } edid = drm_get_edid(connector, &dp->aux.ddc); if (edid) { drm_mode_connector_update_edid_property(&dp->connector, edid); num_modes += drm_add_edid_modes(&dp->connector, edid); kfree(edid); } ret = analogix_dp_prepare_panel(dp, false, false); if (ret) DRM_ERROR("Failed to unprepare panel (%d)\n", ret); } if (dp->plat_data->get_modes) num_modes += dp->plat_data->get_modes(dp->plat_data, connector); return num_modes; }
static int exynos_dp_get_modes(struct drm_connector *connector) { struct exynos_dp_device *dp = ctx_from_connector(connector); struct drm_display_mode *mode; if (dp->panel) return drm_panel_get_modes(dp->panel); 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(&dp->priv.vm, mode); mode->width_mm = dp->priv.width_mm; mode->height_mm = dp->priv.height_mm; connector->display_info.width_mm = mode->width_mm; connector->display_info.height_mm = mode->height_mm; mode->type = DRM_MODE_TYPE_DRIVER | DRM_MODE_TYPE_PREFERRED; drm_mode_set_name(mode); drm_mode_probed_add(connector, mode); return 1; }
int analogix_dp_get_modes(struct drm_connector *connector) { struct analogix_dp_device *dp = to_dp(connector); struct edid *edid = (struct edid *)dp->edid; int ret, num_modes = 0; ret = analogix_dp_prepare_panel(dp, true, false); if (ret) { DRM_ERROR("Failed to prepare panel (%d)\n", ret); return 0; } if (analogix_dp_handle_edid(dp) == 0) { drm_mode_connector_update_edid_property(&dp->connector, edid); num_modes += drm_add_edid_modes(&dp->connector, edid); } if (dp->plat_data->panel) num_modes += drm_panel_get_modes(dp->plat_data->panel); if (dp->plat_data->get_modes) num_modes += dp->plat_data->get_modes(dp->plat_data, connector); ret = analogix_dp_prepare_panel(dp, false, false); if (ret) DRM_ERROR("Failed to unprepare panel (%d)\n", ret); return num_modes; }
static int pl111_connector_helper_get_modes(struct drm_connector *connector) { struct pl111_drm_connector *pl111_connector = to_pl111_connector(connector); if (!pl111_connector->panel) return 0; return drm_panel_get_modes(pl111_connector->panel); }
static int dsi_mgr_connector_get_modes(struct drm_connector *connector) { int id = dsi_mgr_connector_get_id(connector); struct msm_dsi *msm_dsi = dsi_mgr_get_dsi(id); struct drm_panel *panel = msm_dsi->panel; int num; if (!panel) return 0; /* * In dual DSI mode, we have one connector that can be * attached to the drm_panel. */ drm_panel_attach(panel, connector); num = drm_panel_get_modes(panel); if (!num) return 0; return num; }
static int rcar_lvds_connector_get_modes(struct drm_connector *connector) { struct rcar_lvds *lvds = connector_to_rcar_lvds(connector); return drm_panel_get_modes(lvds->panel); }
static int dw_mipi_dsi_connector_get_modes(struct drm_connector *connector) { struct dw_mipi_dsi *dsi = con_to_dsi(connector); return drm_panel_get_modes(dsi->panel); }