Commit 217a8c63 authored by Jani Nikula's avatar Jani Nikula Committed by Dmitry Osipenko
Browse files

drm/edid: update non-desktop use also from DisplayID



Use the DisplayID 2.0 primary use case information to deduce whether
this is a head-mounted display, and should not be used for desktop.

Cc: Iaroslav Boliukin <iam@lach.pw>
Cc: Dmitry Osipenko <dmitry.osipenko@collabora.com>
Signed-off-by: default avatarJani Nikula <jani.nikula@intel.com>
Tested-by: Dmitry Osipenko <dmitry.osipenko@collabora.com> # HTC VIVE Pro 2
Reviewed-by: default avatarDmitry Osipenko <dmitry.osipenko@collabora.com>
Signed-off-by: default avatarDmitry Osipenko <dmitry.osipenko@collabora.com>
Link: https://patchwork.freedesktop.org/patch/msgid/de75b2edddd7d30216e4dd5699a064dc737688f5.1676580180.git.jani.nikula@intel.com
parent b568e6bb
Loading
Loading
Loading
Loading
+25 −0
Original line number Original line Diff line number Diff line
@@ -6433,6 +6433,29 @@ static void drm_reset_display_info(struct drm_connector *connector)
	info->quirks = 0;
	info->quirks = 0;
}
}


static void update_displayid_info(struct drm_connector *connector,
				  const struct drm_edid *drm_edid)
{
	struct drm_display_info *info = &connector->display_info;
	const struct displayid_block *block;
	struct displayid_iter iter;

	displayid_iter_edid_begin(drm_edid, &iter);
	displayid_iter_for_each(block, &iter) {
		if (displayid_version(&iter) == DISPLAY_ID_STRUCTURE_VER_20 &&
		    (displayid_primary_use(&iter) == PRIMARY_USE_HEAD_MOUNTED_VR ||
		     displayid_primary_use(&iter) == PRIMARY_USE_HEAD_MOUNTED_AR))
			info->non_desktop = true;

		/*
		 * We're only interested in the base section here, no need to
		 * iterate further.
		 */
		break;
	}
	displayid_iter_end(&iter);
}

static void update_display_info(struct drm_connector *connector,
static void update_display_info(struct drm_connector *connector,
				const struct drm_edid *drm_edid)
				const struct drm_edid *drm_edid)
{
{
@@ -6463,6 +6486,8 @@ static void update_display_info(struct drm_connector *connector,
	info->color_formats |= DRM_COLOR_FORMAT_RGB444;
	info->color_formats |= DRM_COLOR_FORMAT_RGB444;
	drm_parse_cea_ext(connector, drm_edid);
	drm_parse_cea_ext(connector, drm_edid);


	update_displayid_info(connector, drm_edid);

	/*
	/*
	 * Digital sink with "DFP 1.x compliant TMDS" according to EDID 1.3?
	 * Digital sink with "DFP 1.x compliant TMDS" according to EDID 1.3?
	 *
	 *