|
@@ -711,6 +711,19 @@ cea_for_each_detailed_block(u8 *ext, detailed_cb *cb, void *closure)
|
|
|
cb((struct detailed_timing *)(det_base + 18 * i), closure);
|
|
|
}
|
|
|
|
|
|
+static void
|
|
|
+vtb_for_each_detailed_block(u8 *ext, detailed_cb *cb, void *closure)
|
|
|
+{
|
|
|
+ unsigned int i, n = min((int)ext[0x02], 6);
|
|
|
+ u8 *det_base = ext + 5;
|
|
|
+
|
|
|
+ if (ext[0x01] != 1)
|
|
|
+ return; /* unknown version */
|
|
|
+
|
|
|
+ for (i = 0; i < n; i++)
|
|
|
+ cb((struct detailed_timing *)(det_base + 18 * i), closure);
|
|
|
+}
|
|
|
+
|
|
|
static void
|
|
|
drm_for_each_detailed_block(u8 *raw_edid, detailed_cb *cb, void *closure)
|
|
|
{
|
|
@@ -729,6 +742,9 @@ drm_for_each_detailed_block(u8 *raw_edid, detailed_cb *cb, void *closure)
|
|
|
case CEA_EXT:
|
|
|
cea_for_each_detailed_block(ext, cb, closure);
|
|
|
break;
|
|
|
+ case VTB_EXT:
|
|
|
+ vtb_for_each_detailed_block(ext, cb, closure);
|
|
|
+ break;
|
|
|
default:
|
|
|
break;
|
|
|
}
|