Merge tag 'drm-intel-next-2023-09-29' of git://anongit.freedesktop.org/drm/drm-intel...
[linux-2.6-microblaze.git] / drivers / gpu / drm / drm_edid.c
index 6e587f5..ec1cb48 100644 (file)
@@ -29,6 +29,7 @@
  */
 
 #include <linux/bitfield.h>
+#include <linux/cec.h>
 #include <linux/hdmi.h>
 #include <linux/i2c.h>
 #include <linux/kernel.h>
@@ -3110,7 +3111,7 @@ drm_monitor_supports_rb(const struct drm_edid *drm_edid)
                return ret;
        }
 
-       return ((drm_edid->edid->input & DRM_EDID_INPUT_DIGITAL) != 0);
+       return drm_edid_is_digital(drm_edid);
 }
 
 static void
@@ -6200,6 +6201,8 @@ drm_parse_hdmi_vsdb_video(struct drm_connector *connector, const u8 *db)
 
        info->is_hdmi = true;
 
+       info->source_physical_address = (db[4] << 8) | db[5];
+
        if (len >= 6)
                info->dvi_dual = db[6] & 1;
        if (len >= 7)
@@ -6478,6 +6481,8 @@ static void drm_reset_display_info(struct drm_connector *connector)
        info->vics_len = 0;
 
        info->quirks = 0;
+
+       info->source_physical_address = CEC_PHYS_ADDR_INVALID;
 }
 
 static void update_displayid_info(struct drm_connector *connector,
@@ -6527,7 +6532,7 @@ static void update_display_info(struct drm_connector *connector,
        if (edid->revision < 3)
                goto out;
 
-       if (!(edid->input & DRM_EDID_INPUT_DIGITAL))
+       if (!drm_edid_is_digital(drm_edid))
                goto out;
 
        info->color_formats |= DRM_COLOR_FORMAT_RGB444;
@@ -7343,3 +7348,16 @@ static void _drm_update_tile_info(struct drm_connector *connector,
                connector->tile_group = NULL;
        }
 }
+
+/**
+ * drm_edid_is_digital - is digital?
+ * @drm_edid: The EDID
+ *
+ * Return true if input is digital.
+ */
+bool drm_edid_is_digital(const struct drm_edid *drm_edid)
+{
+       return drm_edid && drm_edid->edid &&
+               drm_edid->edid->input & DRM_EDID_INPUT_DIGITAL;
+}
+EXPORT_SYMBOL(drm_edid_is_digital);