drm/edid: Add flag to drm_display_info to identify HDMI sinks
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Wed, 26 Feb 2020 11:24:23 +0000 (13:24 +0200)
committerTomi Valkeinen <tomi.valkeinen@ti.com>
Wed, 26 Feb 2020 11:31:19 +0000 (13:31 +0200)
The drm_display_info structure contains many fields related to HDMI
sinks, but none that identifies if a sink compliant with CEA-861 (EDID)
shall be treated as an HDMI sink or a DVI sink. Add such a flag, and
populate it according to section 8.3.3 ("DVI/HDMI Device
Discrimination") of the HDMI v1.3 specification.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Andrzej Hajda <a.hajda@samsung.com>
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com>
Acked-by: Sam Ravnborg <sam@ravnborg.org>
Tested-by: Sebastian Reichel <sebastian.reichel@collabora.com>
Reviewed-by: Sebastian Reichel <sebastian.reichel@collabora.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200226112514.12455-4-laurent.pinchart@ideasonboard.com
Documentation/gpu/todo.rst
drivers/gpu/drm/drm_edid.c
include/drm/drm_connector.h

index 370ac678106ed293918fa9b489af39e03c2095c9..ccf5e8e342225b4a9f2647aebc72a4421ae23b89 100644 (file)
@@ -407,6 +407,20 @@ Contact: Daniel Vetter
 
 Level: Intermediate
 
+Replace drm_detect_hdmi_monitor() with drm_display_info.is_hdmi
+---------------------------------------------------------------
+
+Once EDID is parsed, the monitor HDMI support information is available through
+drm_display_info.is_hdmi. Many drivers still call drm_detect_hdmi_monitor() to
+retrieve the same information, which is less efficient.
+
+Audit each individual driver calling drm_detect_hdmi_monitor() and switch to
+drm_display_info.is_hdmi if applicable.
+
+Contact: Laurent Pinchart, respective driver maintainers
+
+Level: Intermediate
+
 Core refactorings
 =================
 
index 5f3bc3486fde106a6d2c2988f2e9e6a2b10caef5..ad41764a4ebe5e2187565c18608681ca65bc74c1 100644 (file)
@@ -4647,6 +4647,9 @@ EXPORT_SYMBOL(drm_av_sync_delay);
  *
  * Parse the CEA extension according to CEA-861-B.
  *
+ * Drivers that have added the modes parsed from EDID to drm_display_info
+ * should use &drm_display_info.is_hdmi instead of calling this function.
+ *
  * Return: True if the monitor is HDMI, false if not or unknown.
  */
 bool drm_detect_hdmi_monitor(struct edid *edid)
@@ -4881,6 +4884,8 @@ drm_parse_hdmi_vsdb_video(struct drm_connector *connector, const u8 *db)
        struct drm_display_info *info = &connector->display_info;
        u8 len = cea_db_payload_len(db);
 
+       info->is_hdmi = true;
+
        if (len >= 6)
                info->dvi_dual = db[6] & 1;
        if (len >= 7)
@@ -4949,6 +4954,7 @@ drm_reset_display_info(struct drm_connector *connector)
        info->cea_rev = 0;
        info->max_tmds_clock = 0;
        info->dvi_dual = false;
+       info->is_hdmi = false;
        info->has_hdmi_infoframe = false;
        info->rgb_quant_range_selectable = false;
        memset(&info->hdmi, 0, sizeof(info->hdmi));
index c3bd5262db9c717ede2cabf044cb7c57f5763f4d..0df7a95ca5d96fc34f0c61a40ad61f345f7417c0 100644 (file)
@@ -434,6 +434,14 @@ struct drm_display_info {
         */
        bool dvi_dual;
 
+       /**
+        * @is_hdmi: True if the sink is an HDMI device.
+        *
+        * This field shall be used instead of calling
+        * drm_detect_hdmi_monitor() when possible.
+        */
+       bool is_hdmi;
+
        /**
         * @has_hdmi_infoframe: Does the sink support the HDMI infoframe?
         */