[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