[Nouveau] [PATCH 5/6] drm: Delete "mandatory" stereographic modes

Ilia Mirkin imirkin at alum.mit.edu
Wed Jan 18 05:10:56 UTC 2017


On Tue, Jan 17, 2017 at 5:42 PM, Alastair Bridgewater
<alastair.bridgewater at gmail.com> wrote:
> HDMI specification 1.4a, table 8-15 is very explicitly a "must
> support at least one of" table, not a "must support all of" table.
> It is not hard to find hardware that does not support some of the
> so-called "mandatory" modes.
>
> More seriously, this code generates invalid display modes for both
> of the 3D-capable panels that I have (a 42-inch LG TV and a Sony
> PlayStation 3D Display).
>
> If we want to be persnickety, one option would be to check the
> final list of modes against the table and give some message if
> none of them are valid, but it's a whole lot easier just to delete
> the code in question.

Damien added this in commit c858cfcae6d some 3 years ago.

Damien, do you remember why you added these "required" modes? Did you
have a monitor that only advertised 3D support without the actual
modes?

>
> Signed-off-by: Alastair Bridgewater <alastair.bridgewater at gmail.com>
> ---
>  drivers/gpu/drm/drm_edid.c | 66 ----------------------------------------------
>  1 file changed, 66 deletions(-)
>
> diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
> index 336be31..723116a 100644
> --- a/drivers/gpu/drm/drm_edid.c
> +++ b/drivers/gpu/drm/drm_edid.c
> @@ -2926,70 +2926,6 @@ do_cea_modes(struct drm_connector *connector, const u8 *db, u8 len)
>         return modes;
>  }
>
> -struct stereo_mandatory_mode {
> -       int width, height, vrefresh;
> -       unsigned int flags;
> -};
> -
> -static const struct stereo_mandatory_mode stereo_mandatory_modes[] = {
> -       { 1920, 1080, 24, DRM_MODE_FLAG_3D_TOP_AND_BOTTOM },
> -       { 1920, 1080, 24, DRM_MODE_FLAG_3D_FRAME_PACKING },
> -       { 1920, 1080, 50,
> -         DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_3D_SIDE_BY_SIDE_HALF },
> -       { 1920, 1080, 60,
> -         DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_3D_SIDE_BY_SIDE_HALF },
> -       { 1280, 720,  50, DRM_MODE_FLAG_3D_TOP_AND_BOTTOM },
> -       { 1280, 720,  50, DRM_MODE_FLAG_3D_FRAME_PACKING },
> -       { 1280, 720,  60, DRM_MODE_FLAG_3D_TOP_AND_BOTTOM },
> -       { 1280, 720,  60, DRM_MODE_FLAG_3D_FRAME_PACKING }
> -};
> -
> -static bool
> -stereo_match_mandatory(const struct drm_display_mode *mode,
> -                      const struct stereo_mandatory_mode *stereo_mode)
> -{
> -       unsigned int interlaced = mode->flags & DRM_MODE_FLAG_INTERLACE;
> -
> -       return mode->hdisplay == stereo_mode->width &&
> -              mode->vdisplay == stereo_mode->height &&
> -              interlaced == (stereo_mode->flags & DRM_MODE_FLAG_INTERLACE) &&
> -              drm_mode_vrefresh(mode) == stereo_mode->vrefresh;
> -}
> -
> -static int add_hdmi_mandatory_stereo_modes(struct drm_connector *connector)
> -{
> -       struct drm_device *dev = connector->dev;
> -       const struct drm_display_mode *mode;
> -       struct list_head stereo_modes;
> -       int modes = 0, i;
> -
> -       INIT_LIST_HEAD(&stereo_modes);
> -
> -       list_for_each_entry(mode, &connector->probed_modes, head) {
> -               for (i = 0; i < ARRAY_SIZE(stereo_mandatory_modes); i++) {
> -                       const struct stereo_mandatory_mode *mandatory;
> -                       struct drm_display_mode *new_mode;
> -
> -                       if (!stereo_match_mandatory(mode,
> -                                                   &stereo_mandatory_modes[i]))
> -                               continue;
> -
> -                       mandatory = &stereo_mandatory_modes[i];
> -                       new_mode = drm_mode_duplicate(dev, mode);
> -                       if (!new_mode)
> -                               continue;
> -
> -                       new_mode->flags |= mandatory->flags;
> -                       list_add_tail(&new_mode->head, &stereo_modes);
> -                       modes++;
> -               }
> -       }
> -
> -       list_splice_tail(&stereo_modes, &connector->probed_modes);
> -
> -       return modes;
> -}
> -
>  static int add_hdmi_mode(struct drm_connector *connector, u8 vic)
>  {
>         struct drm_device *dev = connector->dev;
> @@ -3090,8 +3026,6 @@ do_hdmi_vsdb_modes(struct drm_connector *connector, const u8 *db, u8 len,
>         /* 3D_Present */
>         offset++;
>         if (db[8 + offset] & (1 << 7)) {
> -               modes += add_hdmi_mandatory_stereo_modes(connector);
> -
>                 /* 3D_Multi_present */
>                 multi_present = (db[8 + offset] & 0x60) >> 5;
>         }
> --
> 2.10.2
>
> _______________________________________________
> Nouveau mailing list
> Nouveau at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/nouveau


More information about the Nouveau mailing list