| From 455295419672b76313bf19b5a0c32fd839977df7 Mon Sep 17 00:00:00 2001 |
| From: Damien Lespiau <damien.lespiau@intel.com> |
| Date: Wed, 25 Sep 2013 16:45:29 +0100 |
| Subject: drm: Make exposing stereo modes a per-connector opt-in |
| MIME-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| Just like with interlaced or double scan modes, make stereo modes a |
| per-connector opt-in to give a chance to driver authors to make it work |
| before enabling it. |
| |
| Suggested-by: Daniel Vetter <daniel.vetter@ffwll.ch> |
| Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com> |
| Signed-off-by: Damien Lespiau <damien.lespiau@intel.com> |
| Acked-by: Dave Airlie <airlied@gmail.com> |
| Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> |
| (cherry picked from commit 560a067a93520a18a1dd7cf07ebd759a45270855) |
| Signed-off-by: Darren Hart <dvhart@linux.intel.com> |
| --- |
| drivers/gpu/drm/drm_crtc_helper.c | 8 +++++++- |
| include/drm/drm_crtc.h | 2 ++ |
| 2 files changed, 9 insertions(+), 1 deletion(-) |
| |
| diff --git a/drivers/gpu/drm/drm_crtc_helper.c b/drivers/gpu/drm/drm_crtc_helper.c |
| index ed1334e27c33..bdcdbb156d08 100644 |
| --- a/drivers/gpu/drm/drm_crtc_helper.c |
| +++ b/drivers/gpu/drm/drm_crtc_helper.c |
| @@ -76,7 +76,8 @@ static void drm_mode_validate_flag(struct drm_connector *connector, |
| { |
| struct drm_display_mode *mode; |
| |
| - if (flags == (DRM_MODE_FLAG_DBLSCAN | DRM_MODE_FLAG_INTERLACE)) |
| + if (flags == (DRM_MODE_FLAG_DBLSCAN | DRM_MODE_FLAG_INTERLACE | |
| + DRM_MODE_FLAG_3D_MASK)) |
| return; |
| |
| list_for_each_entry(mode, &connector->modes, head) { |
| @@ -86,6 +87,9 @@ static void drm_mode_validate_flag(struct drm_connector *connector, |
| if ((mode->flags & DRM_MODE_FLAG_DBLSCAN) && |
| !(flags & DRM_MODE_FLAG_DBLSCAN)) |
| mode->status = MODE_NO_DBLESCAN; |
| + if ((mode->flags & DRM_MODE_FLAG_3D_MASK) && |
| + !(flags & DRM_MODE_FLAG_3D_MASK)) |
| + mode->status = MODE_NO_STEREO; |
| } |
| |
| return; |
| @@ -175,6 +179,8 @@ int drm_helper_probe_single_connector_modes(struct drm_connector *connector, |
| mode_flags |= DRM_MODE_FLAG_INTERLACE; |
| if (connector->doublescan_allowed) |
| mode_flags |= DRM_MODE_FLAG_DBLSCAN; |
| + if (connector->stereo_allowed) |
| + mode_flags |= DRM_MODE_FLAG_3D_MASK; |
| drm_mode_validate_flag(connector, mode_flags); |
| |
| list_for_each_entry(mode, &connector->modes, head) { |
| diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h |
| index b79a01507db4..2743dad5fe88 100644 |
| --- a/include/drm/drm_crtc.h |
| +++ b/include/drm/drm_crtc.h |
| @@ -107,6 +107,7 @@ enum drm_mode_status { |
| MODE_ONE_HEIGHT, /* only one height is supported */ |
| MODE_ONE_SIZE, /* only one resolution is supported */ |
| MODE_NO_REDUCED, /* monitor doesn't accept reduced blanking */ |
| + MODE_NO_STEREO, /* stereo modes not supported */ |
| MODE_UNVERIFIED = -3, /* mode needs to reverified */ |
| MODE_BAD = -2, /* unspecified reason */ |
| MODE_ERROR = -1 /* error condition */ |
| @@ -593,6 +594,7 @@ struct drm_connector { |
| int connector_type_id; |
| bool interlace_allowed; |
| bool doublescan_allowed; |
| + bool stereo_allowed; |
| struct list_head modes; /* list of modes on this connector */ |
| |
| enum drm_connector_status status; |
| -- |
| 1.8.5.rc3 |
| |