]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/edid: parse source physical address
authorJani Nikula <jani.nikula@intel.com>
Thu, 24 Aug 2023 13:46:04 +0000 (16:46 +0300)
committerJani Nikula <jani.nikula@intel.com>
Fri, 1 Sep 2023 08:47:53 +0000 (11:47 +0300)
CEC needs the source physical address. Parsing it is trivial with the
existing EDID CEA DB infrastructure.

Default to CEC_PHYS_ADDR_INVALID (0xffff) instead of 0 to cater for
easier CEC usage.

Cc: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Cc: linux-media@vger.kernel.org
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Reviewed-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Acked-by: Maxime Ripard <mripard@kernel.org>
Link: https://patchwork.freedesktop.org/patch/msgid/8c6b6403932536b6849e0b44e1ee6e7ebdbe4a69.1692884619.git.jani.nikula@intel.com
drivers/gpu/drm/drm_edid.c
include/drm/drm_connector.h

index 307a414733a4f3f6f1f3c2d78b1f43083bc0b444..6ef1f4cdd286af7cd88ebbbed450367fdc8c0d41 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>
@@ -6205,6 +6206,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)
@@ -6483,6 +6486,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,
index d300fde6c1a47a0330dc17d17725c26fa206235d..40a5e7acf2fa69ede12a5d38a6def64212af51c0 100644 (file)
@@ -816,6 +816,14 @@ struct drm_display_info {
         * @quirks: EDID based quirks. Internal to EDID parsing.
         */
        u32 quirks;
+
+       /**
+        * @source_physical_address: Source Physical Address from HDMI
+        * Vendor-Specific Data Block, for CEC usage.
+        *
+        * Defaults to CEC_PHYS_ADDR_INVALID (0xffff).
+        */
+       u16 source_physical_address;
 };
 
 int drm_display_info_set_bus_formats(struct drm_display_info *info,