All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 1/2] drm/edid: support Microsoft extension for HMDs and specialized monitors
@ 2022-01-23 10:16 Philipp Zabel
  2022-01-23 10:16 ` [PATCH v2 2/2] drm/edid: remove non_desktop quirk for HPN-3515 and LEN-B800 Philipp Zabel
  2022-01-24 15:05 ` [PATCH v2 1/2] drm/edid: support Microsoft extension for HMDs and specialized monitors Jani Nikula
  0 siblings, 2 replies; 3+ messages in thread
From: Philipp Zabel @ 2022-01-23 10:16 UTC (permalink / raw)
  To: dri-devel; +Cc: Jani Nikula, Jakob Bornecrantz

Add minimal support for parsing VSDBs documented in Microsoft's "EDID
extension for head-mounted and specialized monitors" [1]. The version
field and the desktop usage flag can be used to set the non_desktop
connector property.

[1] https://docs.microsoft.com/en-us/windows-hardware/drivers/display/specialized-monitors-edid-extension

Tested with HPN-36C1 and LEN-B800.

Signed-off-by: Philipp Zabel <philipp.zabel@gmail.com>
Reviewed-by: Jani Nikula <jani.nikula@intel.com>
---
Changes since v1 [2]:
 - Split out quirk removal into a separate patch.
 - Set non_desktop to true instead of 1.

[2] https://lore.kernel.org/all/20211213184706.5776-1-philipp.zabel@gmail.com/
---
 drivers/gpu/drm/drm_edid.c | 34 ++++++++++++++++++++++++++++++++++
 1 file changed, 34 insertions(+)

diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
index 12893e7be89b..271b5616cfaf 100644
--- a/drivers/gpu/drm/drm_edid.c
+++ b/drivers/gpu/drm/drm_edid.c
@@ -93,6 +93,8 @@ static int oui(u8 first, u8 second, u8 third)
 /* Non desktop display (i.e. HMD) */
 #define EDID_QUIRK_NON_DESKTOP			(1 << 12)
 
+#define MICROSOFT_IEEE_OUI	0xca125c
+
 struct detailed_mode_closure {
 	struct drm_connector *connector;
 	struct edid *edid;
@@ -4222,6 +4224,17 @@ static bool cea_db_is_hdmi_forum_vsdb(const u8 *db)
 	return oui(db[3], db[2], db[1]) == HDMI_FORUM_IEEE_OUI;
 }
 
+static bool cea_db_is_microsoft_vsdb(const u8 *db)
+{
+	if (cea_db_tag(db) != VENDOR_BLOCK)
+		return false;
+
+	if (cea_db_payload_len(db) != 21)
+		return false;
+
+	return oui(db[3], db[2], db[1]) == MICROSOFT_IEEE_OUI;
+}
+
 static bool cea_db_is_vcdb(const u8 *db)
 {
 	if (cea_db_tag(db) != USE_EXTENDED_TAG)
@@ -5149,6 +5162,25 @@ drm_parse_hdmi_vsdb_video(struct drm_connector *connector, const u8 *db)
 	drm_parse_hdmi_deep_color_info(connector, db);
 }
 
+/*
+ * See EDID extension for head-mounted and specialized monitors, specified at:
+ * https://docs.microsoft.com/en-us/windows-hardware/drivers/display/specialized-monitors-edid-extension
+ */
+static void drm_parse_microsoft_vsdb(struct drm_connector *connector,
+				     const u8 *db)
+{
+	struct drm_display_info *info = &connector->display_info;
+	u8 version = db[4];
+	bool desktop_usage = db[5] & BIT(6);
+
+	/* Version 1 and 2 for HMDs, version 3 flags desktop usage explicitly */
+	if (version == 1 || version == 2 || (version == 3 && !desktop_usage))
+		info->non_desktop = true;
+
+	drm_dbg_kms(connector->dev, "HMD or specialized display VSDB version %u: 0x%02x\n",
+		    version, db[5]);
+}
+
 static void drm_parse_cea_ext(struct drm_connector *connector,
 			      const struct edid *edid)
 {
@@ -5179,6 +5211,8 @@ static void drm_parse_cea_ext(struct drm_connector *connector,
 			drm_parse_hdmi_vsdb_video(connector, db);
 		if (cea_db_is_hdmi_forum_vsdb(db))
 			drm_parse_hdmi_forum_vsdb(connector, db);
+		if (cea_db_is_microsoft_vsdb(db))
+			drm_parse_microsoft_vsdb(connector, db);
 		if (cea_db_is_y420cmdb(db))
 			drm_parse_y420cmdb_bitmap(connector, db);
 		if (cea_db_is_vcdb(db))

base-commit: e783362eb54cd99b2cac8b3a9aeac942e6f6ac07
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* [PATCH v2 2/2] drm/edid: remove non_desktop quirk for HPN-3515 and LEN-B800.
  2022-01-23 10:16 [PATCH v2 1/2] drm/edid: support Microsoft extension for HMDs and specialized monitors Philipp Zabel
@ 2022-01-23 10:16 ` Philipp Zabel
  2022-01-24 15:05 ` [PATCH v2 1/2] drm/edid: support Microsoft extension for HMDs and specialized monitors Jani Nikula
  1 sibling, 0 replies; 3+ messages in thread
From: Philipp Zabel @ 2022-01-23 10:16 UTC (permalink / raw)
  To: dri-devel; +Cc: Jani Nikula, Jakob Bornecrantz

Now that there is support for the Microsoft VSDB for HMDs, remove the
non-desktop quirk for two devices that are verified to contain it in
their EDID: HPN-3515 and LEN-B800.
Presumably most of the other Windows Mixed Reality headsets contain it
as well, but there are ACR-7FCE and SEC-5194 devices without it.

Tested with LEN-B800.

Signed-off-by: Philipp Zabel <philipp.zabel@gmail.com>
Reviewed-by: Jani Nikula <jani.nikula@intel.com>
---
Changes since v1 [1]:
 - Quirk removal split out of patch 1.

[1] https://lore.kernel.org/all/20211213184706.5776-1-philipp.zabel@gmail.com/
---
 drivers/gpu/drm/drm_edid.c | 2 --
 1 file changed, 2 deletions(-)

diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
index 271b5616cfaf..c23ad8f0b3e9 100644
--- a/drivers/gpu/drm/drm_edid.c
+++ b/drivers/gpu/drm/drm_edid.c
@@ -214,9 +214,7 @@ static const struct edid_quirk {
 
 	/* Windows Mixed Reality Headsets */
 	EDID_QUIRK('A', 'C', 'R', 0x7fce, EDID_QUIRK_NON_DESKTOP),
-	EDID_QUIRK('H', 'P', 'N', 0x3515, EDID_QUIRK_NON_DESKTOP),
 	EDID_QUIRK('L', 'E', 'N', 0x0408, EDID_QUIRK_NON_DESKTOP),
-	EDID_QUIRK('L', 'E', 'N', 0xb800, EDID_QUIRK_NON_DESKTOP),
 	EDID_QUIRK('F', 'U', 'J', 0x1970, EDID_QUIRK_NON_DESKTOP),
 	EDID_QUIRK('D', 'E', 'L', 0x7fce, EDID_QUIRK_NON_DESKTOP),
 	EDID_QUIRK('S', 'E', 'C', 0x144a, EDID_QUIRK_NON_DESKTOP),
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH v2 1/2] drm/edid: support Microsoft extension for HMDs and specialized monitors
  2022-01-23 10:16 [PATCH v2 1/2] drm/edid: support Microsoft extension for HMDs and specialized monitors Philipp Zabel
  2022-01-23 10:16 ` [PATCH v2 2/2] drm/edid: remove non_desktop quirk for HPN-3515 and LEN-B800 Philipp Zabel
@ 2022-01-24 15:05 ` Jani Nikula
  1 sibling, 0 replies; 3+ messages in thread
From: Jani Nikula @ 2022-01-24 15:05 UTC (permalink / raw)
  To: Philipp Zabel, dri-devel; +Cc: Jakob Bornecrantz

On Sun, 23 Jan 2022, Philipp Zabel <philipp.zabel@gmail.com> wrote:
> Add minimal support for parsing VSDBs documented in Microsoft's "EDID
> extension for head-mounted and specialized monitors" [1]. The version
> field and the desktop usage flag can be used to set the non_desktop
> connector property.
>
> [1] https://docs.microsoft.com/en-us/windows-hardware/drivers/display/specialized-monitors-edid-extension
>
> Tested with HPN-36C1 and LEN-B800.
>
> Signed-off-by: Philipp Zabel <philipp.zabel@gmail.com>
> Reviewed-by: Jani Nikula <jani.nikula@intel.com>

Thanks for the patches, both pushed to drm-misc-next.

BR,
Jani.


> ---
> Changes since v1 [2]:
>  - Split out quirk removal into a separate patch.
>  - Set non_desktop to true instead of 1.
>
> [2] https://lore.kernel.org/all/20211213184706.5776-1-philipp.zabel@gmail.com/
> ---
>  drivers/gpu/drm/drm_edid.c | 34 ++++++++++++++++++++++++++++++++++
>  1 file changed, 34 insertions(+)
>
> diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
> index 12893e7be89b..271b5616cfaf 100644
> --- a/drivers/gpu/drm/drm_edid.c
> +++ b/drivers/gpu/drm/drm_edid.c
> @@ -93,6 +93,8 @@ static int oui(u8 first, u8 second, u8 third)
>  /* Non desktop display (i.e. HMD) */
>  #define EDID_QUIRK_NON_DESKTOP			(1 << 12)
>  
> +#define MICROSOFT_IEEE_OUI	0xca125c
> +
>  struct detailed_mode_closure {
>  	struct drm_connector *connector;
>  	struct edid *edid;
> @@ -4222,6 +4224,17 @@ static bool cea_db_is_hdmi_forum_vsdb(const u8 *db)
>  	return oui(db[3], db[2], db[1]) == HDMI_FORUM_IEEE_OUI;
>  }
>  
> +static bool cea_db_is_microsoft_vsdb(const u8 *db)
> +{
> +	if (cea_db_tag(db) != VENDOR_BLOCK)
> +		return false;
> +
> +	if (cea_db_payload_len(db) != 21)
> +		return false;
> +
> +	return oui(db[3], db[2], db[1]) == MICROSOFT_IEEE_OUI;
> +}
> +
>  static bool cea_db_is_vcdb(const u8 *db)
>  {
>  	if (cea_db_tag(db) != USE_EXTENDED_TAG)
> @@ -5149,6 +5162,25 @@ drm_parse_hdmi_vsdb_video(struct drm_connector *connector, const u8 *db)
>  	drm_parse_hdmi_deep_color_info(connector, db);
>  }
>  
> +/*
> + * See EDID extension for head-mounted and specialized monitors, specified at:
> + * https://docs.microsoft.com/en-us/windows-hardware/drivers/display/specialized-monitors-edid-extension
> + */
> +static void drm_parse_microsoft_vsdb(struct drm_connector *connector,
> +				     const u8 *db)
> +{
> +	struct drm_display_info *info = &connector->display_info;
> +	u8 version = db[4];
> +	bool desktop_usage = db[5] & BIT(6);
> +
> +	/* Version 1 and 2 for HMDs, version 3 flags desktop usage explicitly */
> +	if (version == 1 || version == 2 || (version == 3 && !desktop_usage))
> +		info->non_desktop = true;
> +
> +	drm_dbg_kms(connector->dev, "HMD or specialized display VSDB version %u: 0x%02x\n",
> +		    version, db[5]);
> +}
> +
>  static void drm_parse_cea_ext(struct drm_connector *connector,
>  			      const struct edid *edid)
>  {
> @@ -5179,6 +5211,8 @@ static void drm_parse_cea_ext(struct drm_connector *connector,
>  			drm_parse_hdmi_vsdb_video(connector, db);
>  		if (cea_db_is_hdmi_forum_vsdb(db))
>  			drm_parse_hdmi_forum_vsdb(connector, db);
> +		if (cea_db_is_microsoft_vsdb(db))
> +			drm_parse_microsoft_vsdb(connector, db);
>  		if (cea_db_is_y420cmdb(db))
>  			drm_parse_y420cmdb_bitmap(connector, db);
>  		if (cea_db_is_vcdb(db))
>
> base-commit: e783362eb54cd99b2cac8b3a9aeac942e6f6ac07

-- 
Jani Nikula, Intel Open Source Graphics Center

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2022-01-24 15:05 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-01-23 10:16 [PATCH v2 1/2] drm/edid: support Microsoft extension for HMDs and specialized monitors Philipp Zabel
2022-01-23 10:16 ` [PATCH v2 2/2] drm/edid: remove non_desktop quirk for HPN-3515 and LEN-B800 Philipp Zabel
2022-01-24 15:05 ` [PATCH v2 1/2] drm/edid: support Microsoft extension for HMDs and specialized monitors Jani Nikula

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.