aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/drm/drm_edid.c41
1 files changed, 22 insertions, 19 deletions
diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
index 2283631c9a51..478b122ad1ba 100644
--- a/drivers/gpu/drm/drm_edid.c
+++ b/drivers/gpu/drm/drm_edid.c
@@ -1474,26 +1474,29 @@ void drm_edid_to_eld(struct drm_connector *connector, struct edid *edid)
1474 eld[18] = edid->prod_code[0]; 1474 eld[18] = edid->prod_code[0];
1475 eld[19] = edid->prod_code[1]; 1475 eld[19] = edid->prod_code[1];
1476 1476
1477 for (db = cea + 4; db < cea + cea[2]; db += dbl + 1) { 1477 if (cea[1] >= 3)
1478 dbl = db[0] & 0x1f; 1478 for (db = cea + 4; db < cea + cea[2]; db += dbl + 1) {
1479 1479 dbl = db[0] & 0x1f;
1480 switch ((db[0] & 0xe0) >> 5) { 1480
1481 case AUDIO_BLOCK: /* Audio Data Block, contains SADs */ 1481 switch ((db[0] & 0xe0) >> 5) {
1482 sad_count = dbl / 3; 1482 case AUDIO_BLOCK:
1483 memcpy(eld + 20 + mnl, &db[1], dbl); 1483 /* Audio Data Block, contains SADs */
1484 break; 1484 sad_count = dbl / 3;
1485 case SPEAKER_BLOCK: /* Speaker Allocation Data Block */ 1485 memcpy(eld + 20 + mnl, &db[1], dbl);
1486 eld[7] = db[1]; 1486 break;
1487 break; 1487 case SPEAKER_BLOCK:
1488 case VENDOR_BLOCK: 1488 /* Speaker Allocation Data Block */
1489 /* HDMI Vendor-Specific Data Block */ 1489 eld[7] = db[1];
1490 if (db[1] == 0x03 && db[2] == 0x0c && db[3] == 0) 1490 break;
1491 parse_hdmi_vsdb(connector, db); 1491 case VENDOR_BLOCK:
1492 break; 1492 /* HDMI Vendor-Specific Data Block */
1493 default: 1493 if (db[1] == 0x03 && db[2] == 0x0c && db[3] == 0)
1494 break; 1494 parse_hdmi_vsdb(connector, db);
1495 break;
1496 default:
1497 break;
1498 }
1495 } 1499 }
1496 }
1497 eld[5] |= sad_count << 4; 1500 eld[5] |= sad_count << 4;
1498 eld[2] = (20 + mnl + sad_count * 3 + 3) / 4; 1501 eld[2] = (20 + mnl + sad_count * 3 + 3) / 4;
1499 1502