Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ebb177d2 authored by Dave Airlie's avatar Dave Airlie
Browse files

drm/edid: fixup detailed timings like the X server.



this syncs the versioning check with the code the X server uses.

Reported-by: default avatarAnssi Hannula <anssi.hannula@iki.fi>
Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
parent 616b8434
Loading
Loading
Loading
Loading
+34 −38
Original line number Diff line number Diff line
@@ -502,25 +502,9 @@ static int add_detailed_info(struct drm_connector *connector,
		struct detailed_non_pixel *data = &timing->data.other_data;
		struct drm_display_mode *newmode;

		/* EDID up to and including 1.2 may put monitor info here */
		if (edid->version == 1 && edid->revision < 3)
			continue;

		/* Detailed mode timing */
		if (timing->pixel_clock) {
			newmode = drm_mode_detailed(dev, edid, timing, quirks);
			if (!newmode)
				continue;

			/* First detailed mode is preferred */
			if (i == 0 && (edid->features & DRM_EDID_FEATURE_PREFERRED_TIMING))
				newmode->type |= DRM_MODE_TYPE_PREFERRED;
			drm_mode_probed_add(connector, newmode);

			modes++;
			continue;
		}

		/* X server check is version 1.1 or higher */
		if (edid->version == 1 && edid->revision >= 1 &&
		    !timing->pixel_clock) {
			/* Other timing or info */
			switch (data->type) {
			case EDID_DETAIL_MONITOR_SERIAL:
@@ -551,6 +535,18 @@ static int add_detailed_info(struct drm_connector *connector,
			default:
				break;
			}
		} else {
			newmode = drm_mode_detailed(dev, edid, timing, quirks);
			if (!newmode)
				continue;

			/* First detailed mode is preferred */
			if (i == 0 && (edid->features & DRM_EDID_FEATURE_PREFERRED_TIMING))
				newmode->type |= DRM_MODE_TYPE_PREFERRED;
			drm_mode_probed_add(connector, newmode);

			modes++;
		}
	}

	return modes;