> On Jan 19, 2026, at 8:39 AM, Jani Nikula <[email protected]> wrote:
>
> On Sat, 17 Jan 2026, Joshua Peisach <[email protected]
> <mailto:[email protected]>> wrote:
>> drm_parse_hdmi_vsdb_video is one of the parsers that still do not use the
>> cea_db struct, and currently passes a u8 pointer.
>>
>> Set the correct struct type and update references to the data accordingly.
>> This also makes the same change to drm_parse_hdmi_deep_color_info as
>> necessary.
>>
>> Signed-off-by: Joshua Peisach <[email protected]>
>> ---
>> drivers/gpu/drm/drm_edid.c | 26 +++++++++++++-------------
>> 1 file changed, 13 insertions(+), 13 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
>> index 26bb7710a..15bd99e65 100644
>> --- a/drivers/gpu/drm/drm_edid.c
>> +++ b/drivers/gpu/drm/drm_edid.c
>> @@ -6290,7 +6290,7 @@ static void drm_parse_hdmi_forum_scds(struct
>> drm_connector *connector,
>> }
>>
>> static void drm_parse_hdmi_deep_color_info(struct drm_connector *connector,
>> - const u8 *hdmi)
>> + const struct cea_db *db)
>> {
>> struct drm_display_info *info = &connector->display_info;
>> unsigned int dc_bpc = 0;
>> @@ -6298,24 +6298,24 @@ static void drm_parse_hdmi_deep_color_info(struct
>> drm_connector *connector,
>> /* HDMI supports at least 8 bpc */
>> info->bpc = 8;
>>
>> - if (cea_db_payload_len(hdmi) < 6)
>> + if (cea_db_payload_len(db) < 6)
>> return;
>>
>> - if (hdmi[6] & DRM_EDID_HDMI_DC_30) {
>> + if (db->data[6] & DRM_EDID_HDMI_DC_30) {
>
> That's not the same thing, but off-by-one now. Ditto everywhere that
> changes from u8* to db->data[].
>
> The main problem with the change (even with fixed offsets) is that the
> *specs* typically use indexing from the beginning of the data block, not
> from the beginning of payload data.
>
> We've discussed this before with Ville (Cc'd) but I'm not sure if we
> reached a conclusion.
>
Okay, I'll thought the pointer was to the literal same information.
Keep me posted about the indexing of the specs, I will probably submit a v2.
Thanks,
-Josh
> BR,
> Jani.
>
>
>> dc_bpc = 10;
>> info->edid_hdmi_rgb444_dc_modes |= DRM_EDID_HDMI_DC_30;
>> drm_dbg_kms(connector->dev, "[CONNECTOR:%d:%s] HDMI sink does
>> deep color 30.\n",
>> connector->base.id, connector->name);
>> }
>>
>> - if (hdmi[6] & DRM_EDID_HDMI_DC_36) {
>> + if (db->data[6] & DRM_EDID_HDMI_DC_36) {
>> dc_bpc = 12;
>> info->edid_hdmi_rgb444_dc_modes |= DRM_EDID_HDMI_DC_36;
>> drm_dbg_kms(connector->dev, "[CONNECTOR:%d:%s] HDMI sink does
>> deep color 36.\n",
>> connector->base.id, connector->name);
>> }
>>
>> - if (hdmi[6] & DRM_EDID_HDMI_DC_48) {
>> + if (db->data[6] & DRM_EDID_HDMI_DC_48) {
>> dc_bpc = 16;
>> info->edid_hdmi_rgb444_dc_modes |= DRM_EDID_HDMI_DC_48;
>> drm_dbg_kms(connector->dev, "[CONNECTOR:%d:%s] HDMI sink does
>> deep color 48.\n",
>> @@ -6333,7 +6333,7 @@ static void drm_parse_hdmi_deep_color_info(struct
>> drm_connector *connector,
>> info->bpc = dc_bpc;
>>
>> /* YCRCB444 is optional according to spec. */
>> - if (hdmi[6] & DRM_EDID_HDMI_DC_Y444) {
>> + if (db->data[6] & DRM_EDID_HDMI_DC_Y444) {
>> info->edid_hdmi_ycbcr444_dc_modes =
>> info->edid_hdmi_rgb444_dc_modes;
>> drm_dbg_kms(connector->dev, "[CONNECTOR:%d:%s] HDMI sink does
>> YCRCB444 in deep color.\n",
>> connector->base.id, connector->name);
>> @@ -6343,7 +6343,7 @@ static void drm_parse_hdmi_deep_color_info(struct
>> drm_connector *connector,
>> * Spec says that if any deep color mode is supported at all,
>> * then deep color 36 bit must be supported.
>> */
>> - if (!(hdmi[6] & DRM_EDID_HDMI_DC_36)) {
>> + if (!(db->data[6] & DRM_EDID_HDMI_DC_36)) {
>> drm_dbg_kms(connector->dev, "[CONNECTOR:%d:%s] HDMI sink should
>> do DC_36, but does not!\n",
>> connector->base.id, connector->name);
>> }
>> @@ -6351,19 +6351,19 @@ static void drm_parse_hdmi_deep_color_info(struct
>> drm_connector *connector,
>>
>> /* HDMI Vendor-Specific Data Block (HDMI VSDB, H14b-VSDB) */
>> static void
>> -drm_parse_hdmi_vsdb_video(struct drm_connector *connector, const u8 *db)
>> +drm_parse_hdmi_vsdb_video(struct drm_connector *connector, const struct
>> cea_db *db)
>> {
>> struct drm_display_info *info = &connector->display_info;
>> u8 len = cea_db_payload_len(db);
>>
>> info->is_hdmi = true;
>>
>> - info->source_physical_address = (db[4] << 8) | db[5];
>> + info->source_physical_address = (db->data[4] << 8) | db->data[5];
>>
>> if (len >= 6)
>> - info->dvi_dual = db[6] & 1;
>> + info->dvi_dual = db->data[6] & 1;
>> if (len >= 7)
>> - info->max_tmds_clock = db[7] * 5000;
>> + info->max_tmds_clock = db->data[7] * 5000;
>>
>> /*
>> * Try to infer whether the sink supports HDMI infoframes.
>> @@ -6371,7 +6371,7 @@ drm_parse_hdmi_vsdb_video(struct drm_connector
>> *connector, const u8 *db)
>> * HDMI infoframe support was first added in HDMI 1.4. Assume the sink
>> * supports infoframes if HDMI_Video_present is set.
>> */
>> - if (len >= 8 && db[8] & BIT(5))
>> + if (len >= 8 && db->data[8] & BIT(5))
>> info->has_hdmi_infoframe = true;
>>
>> drm_dbg_kms(connector->dev, "[CONNECTOR:%d:%s] HDMI: DVI dual %d, max
>> TMDS clock %d kHz\n",
>> @@ -6443,7 +6443,7 @@ static void drm_parse_cea_ext(struct drm_connector
>> *connector,
>> const u8 *data = (const u8 *)db;
>>
>> if (cea_db_is_hdmi_vsdb(db))
>> - drm_parse_hdmi_vsdb_video(connector, data);
>> + drm_parse_hdmi_vsdb_video(connector, db);
>> else if (cea_db_is_hdmi_forum_vsdb(db) ||
>> cea_db_is_hdmi_forum_scdb(db))
>> drm_parse_hdmi_forum_scds(connector, data);
>
> --
> Jani Nikula, Intel