From: Hans Verkuil <hans.verk...@cisco.com> Add the horizontal frequency and pixelclock information to the established timings and VIC codes.
Signed-off-by: Hans Verkuil <hans.verk...@cisco.com> --- edid-decode.c | 381 +++++++++++++++++++++++++++++++--------------------------- 1 file changed, 201 insertions(+), 180 deletions(-) diff --git a/edid-decode.c b/edid-decode.c index 25b8ed81..a7875a6b 100644 --- a/edid-decode.c +++ b/edid-decode.c @@ -301,58 +301,59 @@ extract_string(unsigned char *x, int *valid_termination, int len) } static const struct { - int x, y, refresh, ratio_w, ratio_h, rb; + int x, y, refresh, ratio_w, ratio_h; + int hor_freq_hz, pixclk_khz, rb; } established_timings3[] = { /* 0x06 bit 7 - 0 */ - {640, 350, 85, 64, 35}, - {640, 400, 85, 16, 10}, - {720, 400, 85, 9, 5}, - {640, 480, 85, 4, 3}, - {848, 480, 60, 53, 30}, - {800, 600, 85, 4, 3}, - {1024, 768, 85, 4, 3}, - {1152, 864, 75, 4, 3}, + {640, 350, 85, 64, 35, 37900, 31500}, + {640, 400, 85, 16, 10, 37900, 31500}, + {720, 400, 85, 9, 5, 37900, 35500}, + {640, 480, 85, 4, 3, 43300, 36000}, + {848, 480, 60, 53, 30, 31000, 33750}, + {800, 600, 85, 4, 3, 53700, 56250}, + {1024, 768, 85, 4, 3, 68700, 94500}, + {1152, 864, 75, 4, 3, 67500, 108000}, /* 0x07 bit 7 - 0 */ - {1280, 768, 60, 5, 3, 1}, - {1280, 768, 60, 5, 3}, - {1280, 768, 75, 5, 3}, - {1280, 768, 85, 5, 3}, - {1280, 960, 60, 4, 3}, - {1280, 960, 85, 4, 3}, - {1280, 1024, 60, 5, 4}, - {1280, 1024, 85, 5, 4}, + {1280, 768, 60, 5, 3, 47400, 68250, 1}, + {1280, 768, 60, 5, 3, 47800, 79500}, + {1280, 768, 75, 5, 3, 60300, 102250}, + {1280, 768, 85, 5, 3, 68600, 117500}, + {1280, 960, 60, 4, 3, 60000, 108000}, + {1280, 960, 85, 4, 3, 85900, 148500}, + {1280, 1024, 60, 5, 4, 64000, 108000}, + {1280, 1024, 85, 5, 4, 91100, 157500}, /* 0x08 bit 7 - 0 */ - {1360, 768, 60, 85, 48}, - {1440, 900, 60, 16, 10, 1}, - {1440, 900, 60, 16, 10}, - {1440, 900, 75, 16, 10}, - {1440, 900, 85, 16, 10}, - {1400, 1050, 60, 4, 3, 1}, - {1400, 1050, 60, 4, 3}, - {1400, 1050, 75, 4, 3}, + {1360, 768, 60, 85, 48, 47700, 85500}, + {1440, 900, 60, 16, 10, 55500, 88750, 1}, + {1440, 900, 60, 16, 10, 65300, 121750}, + {1440, 900, 75, 16, 10, 82300, 156000}, + {1440, 900, 85, 16, 10, 93900, 179500}, + {1400, 1050, 60, 4, 3, 64700, 101000, 1}, + {1400, 1050, 60, 4, 3, 65300, 121750}, + {1400, 1050, 75, 4, 3, 82300, 156000}, /* 0x09 bit 7 - 0 */ - {1400, 1050, 85, 4, 3}, - {1680, 1050, 60, 16, 10, 1}, - {1680, 1050, 60, 16, 10}, - {1680, 1050, 75, 16, 10}, - {1680, 1050, 85, 16, 10}, - {1600, 1200, 60, 4, 3}, - {1600, 1200, 65, 4, 3}, - {1600, 1200, 70, 4, 3}, + {1400, 1050, 85, 4, 3, 93900, 179500}, + {1680, 1050, 60, 16, 10, 64700, 119000, 1}, + {1680, 1050, 60, 16, 10, 65300, 146250}, + {1680, 1050, 75, 16, 10, 82300, 187000}, + {1680, 1050, 85, 16, 10, 93900, 214750}, + {1600, 1200, 60, 4, 3, 75000, 162000}, + {1600, 1200, 65, 4, 3, 81300, 175500}, + {1600, 1200, 70, 4, 3, 87500, 189000}, /* 0x0a bit 7 - 0 */ - {1600, 1200, 75, 4, 3}, - {1600, 1200, 85, 4, 3}, - {1792, 1344, 60, 4, 3}, - {1792, 1344, 75, 4, 3}, - {1856, 1392, 60, 4, 3}, - {1856, 1392, 75, 4, 3}, - {1920, 1200, 60, 16, 10, 1}, - {1920, 1200, 60, 16, 10}, + {1600, 1200, 75, 4, 3, 93800, 202500}, + {1600, 1200, 85, 4, 3, 106300, 229500}, + {1792, 1344, 60, 4, 3, 83600, 204750}, + {1792, 1344, 75, 4, 3, 106300, 261000}, + {1856, 1392, 60, 4, 3, 86300, 218250}, + {1856, 1392, 75, 4, 3, 112500, 288000}, + {1920, 1200, 60, 16, 10, 74000, 154000, 1}, + {1920, 1200, 60, 16, 10, 74600, 193250}, /* 0x0b bit 7 - 4 */ - {1920, 1200, 75, 16, 10}, - {1920, 1200, 85, 16, 10}, - {1920, 1440, 60, 4, 3}, - {1920, 1440, 75, 4, 3}, + {1920, 1200, 75, 16, 10, 94000, 245250}, + {1920, 1200, 85, 16, 10, 107200, 281250}, + {1920, 1440, 60, 4, 3, 90000, 234000}, + {1920, 1440, 75, 4, 3, 112500, 297000}, }; /* 1 means valid data */ @@ -804,114 +805,128 @@ cea_audio_block(unsigned char *x) } } -static const char *edid_cea_modes[] = { - "640x480@60Hz 4:3", - "720x480@60Hz 4:3", - "720x480@60Hz 16:9", - "1280x720@60Hz 16:9", - "1920x1080i@60Hz 16:9", - "1440x480i@60Hz 4:3", - "1440x480i@60Hz 16:9", - "1440x240@60Hz 4:3", - "1440x240@60Hz 16:9", - "2880x480i@60Hz 4:3", - "2880x480i@60Hz 16:9", - "2880x240@60Hz 4:3", - "2880x240@60Hz 16:9", - "1440x480@60Hz 4:3", - "1440x480@60Hz 16:9", - "1920x1080@60Hz 16:9", - "720x576@50Hz 4:3", - "720x576@50Hz 16:9", - "1280x720@50Hz 16:9", - "1920x1080i@50Hz 16:9", - "1440x576i@50Hz 4:3", - "1440x576i@50Hz 16:9", - "1440x288@50Hz 4:3", - "1440x288@50Hz 16:9", - "2880x576i@50Hz 4:3", - "2880x576i@50Hz 16:9", - "2880x288@50Hz 4:3", - "2880x288@50Hz 16:9", - "1440x576@50Hz 4:3", - "1440x576@50Hz 16:9", - "1920x1080@50Hz 16:9", - "1920x1080@24Hz 16:9", - "1920x1080@25Hz 16:9", - "1920x1080@30Hz 16:9", - "2880x480@60Hz 4:3", - "2880x480@60Hz 16:9", - "2880x576@50Hz 4:3", - "2880x576@50Hz 16:9", - "1920x1080i@50Hz 16:9", - "1920x1080i@100Hz 16:9", - "1280x720@100Hz 16:9", - "720x576@100Hz 4:3", - "720x576@100Hz 16:9", - "1440x576@100Hz 4:3", - "1440x576@100Hz 16:9", - "1920x1080i@120Hz 16:9", - "1280x720@120Hz 16:9", - "720x480@120Hz 4:3", - "720x480@120Hz 16:9", - "1440x480i@120Hz 4:3", - "1440x480i@120Hz 16:9", - "720x576@200Hz 4:3", - "720x576@200Hz 16:9", - "1440x576i@200Hz 4:3", - "1440x576i@200Hz 16:9", - "720x480@240Hz 4:3", - "720x480@240Hz 16:9", - "1440x480i@240Hz 4:3", - "1440x480i@240Hz 16:9", - "1280x720@24Hz 16:9", - "1280x720@25Hz 16:9", - "1280x720@30Hz 16:9", - "1920x1080@120Hz 16:9", - "1920x1080@100Hz 16:9", - "1280x720@24Hz 64:27", - "1280x720@25Hz 64:27", - "1280x720@30Hz 64:27", - "1280x720@50Hz 64:27", - "1280x720@60Hz 64:27", - "1280x720@100Hz 64:27", - "1280x720@120Hz 64:27", - "1920x1080@24Hz 64:27", - "1920x1080@25Hz 64:27", - "1920x1080@30Hz 64:27", - "1920x1080@50Hz 64:27", - "1920x1080@60Hz 64:27", - "1920x1080@100Hz 64:27", - "1920x1080@120Hz 64:27", - "1680x720@24Hz 64:27", - "1680x720@25Hz 64:27", - "1680x720@30Hz 64:27", - "1680x720@50Hz 64:27", - "1680x720@60Hz 64:27", - "1680x720@100Hz 64:27", - "1680x720@120Hz 64:27", - "2560x1080@24Hz 64:27", - "2560x1080@25Hz 64:27", - "2560x1080@30Hz 64:27", - "2560x1080@50Hz 64:27", - "2560x1080@60Hz 64:27", - "2560x1080@100Hz 64:27", - "2560x1080@120Hz 64:27", - "3840x2160@24Hz 16:9", - "3840x2160@25Hz 16:9", - "3840x2160@30Hz 16:9", - "3840x2160@50Hz 16:9", - "3840x2160@60Hz 16:9", - "4096x2160@24Hz 256:135", - "4096x2160@25Hz 256:135", - "4096x2160@30Hz 256:135", - "4096x2160@50Hz 256:135", - "4096x2160@60Hz 256:135", - "3840x2160@24Hz 64:27", - "3840x2160@25Hz 64:27", - "3840x2160@30Hz 64:27", - "3840x2160@50Hz 64:27", - "3840x2160@60Hz 64:27", +static struct { + const char *name; + int hor_freq_hz, pixclk_khz; +} edid_cea_modes[] = { + /* VIC 1 */ + {"640x480@60Hz 4:3", 31469, 25175}, + {"720x480@60Hz 4:3", 31469, 27000}, + {"720x480@60Hz 16:9", 31469, 27000}, + {"1280x720@60Hz 16:9", 45000, 74250}, + {"1920x1080i@60Hz 16:9", 33750, 74250}, + {"1440x480i@60Hz 4:3", 15734, 27000}, + {"1440x480i@60Hz 16:9", 15734, 27000}, + {"1440x240@60Hz 4:3", 15734, 27000}, + {"1440x240@60Hz 16:9", 15734, 27000}, + {"2880x480i@60Hz 4:3", 15734, 54000}, + /* VIC 11 */ + {"2880x480i@60Hz 16:9", 15734, 54000}, + {"2880x240@60Hz 4:3", 15734, 54000}, + {"2880x240@60Hz 16:9", 15734, 54000}, + {"1440x480@60Hz 4:3", 31469, 54000}, + {"1440x480@60Hz 16:9", 31469, 54000}, + {"1920x1080@60Hz 16:9", 67500, 148500}, + {"720x576@50Hz 4:3", 31250, 27000}, + {"720x576@50Hz 16:9", 31250, 27000}, + {"1280x720@50Hz 16:9", 37500, 74250}, + {"1920x1080i@50Hz 16:9", 28125, 74250}, + /* VIC 21 */ + {"1440x576i@50Hz 4:3", 15625, 27000}, + {"1440x576i@50Hz 16:9", 15625, 27000}, + {"1440x288@50Hz 4:3", 15625, 27000}, + {"1440x288@50Hz 16:9", 15625, 27000}, + {"2880x576i@50Hz 4:3", 15625, 54000}, + {"2880x576i@50Hz 16:9", 15625, 54000}, + {"2880x288@50Hz 4:3", 15625, 54000}, + {"2880x288@50Hz 16:9", 15625, 54000}, + {"1440x576@50Hz 4:3", 31250, 54000}, + {"1440x576@50Hz 16:9", 31250, 54000}, + /* VIC 31 */ + {"1920x1080@50Hz 16:9", 56250, 148500}, + {"1920x1080@24Hz 16:9", 27000, 74250}, + {"1920x1080@25Hz 16:9", 28125, 74250}, + {"1920x1080@30Hz 16:9", 33750, 74250}, + {"2880x480@60Hz 4:3", 31469, 108000}, + {"2880x480@60Hz 16:9", 31469, 108000}, + {"2880x576@50Hz 4:3", 31250, 108000}, + {"2880x576@50Hz 16:9", 31250, 108000}, + {"1920x1080i@50Hz 16:9", 31250, 72000}, + {"1920x1080i@100Hz 16:9", 56250, 148500}, + /* VIC 41 */ + {"1280x720@100Hz 16:9", 75000, 148500}, + {"720x576@100Hz 4:3", 62500, 54000}, + {"720x576@100Hz 16:9", 62500, 54000}, + {"1440x576@100Hz 4:3", 31250, 54000}, + {"1440x576@100Hz 16:9", 31250, 54000}, + {"1920x1080i@120Hz 16:9", 67500, 148500}, + {"1280x720@120Hz 16:9", 90000, 148500}, + {"720x480@120Hz 4:3", 62937, 54000}, + {"720x480@120Hz 16:9", 62937, 54000}, + {"1440x480i@120Hz 4:3", 31469, 54000}, + /* VIC 51 */ + {"1440x480i@120Hz 16:9", 31469, 54000}, + {"720x576@200Hz 4:3", 125000, 108000}, + {"720x576@200Hz 16:9", 125000, 108000}, + {"1440x576i@200Hz 4:3", 62500, 108000}, + {"1440x576i@200Hz 16:9", 62500, 108000}, + {"720x480@240Hz 4:3", 125874, 108000}, + {"720x480@240Hz 16:9", 125874, 108000}, + {"1440x480i@240Hz 4:3", 62937, 108000}, + {"1440x480i@240Hz 16:9", 62937, 108000}, + {"1280x720@24Hz 16:9", 18000, 59400}, + /* VIC 61 */ + {"1280x720@25Hz 16:9", 18750, 74250}, + {"1280x720@30Hz 16:9", 22500, 74250}, + {"1920x1080@120Hz 16:9", 135000, 297000}, + {"1920x1080@100Hz 16:9", 112500, 297000}, + {"1280x720@24Hz 64:27", 18000, 59400}, + {"1280x720@25Hz 64:27", 18750, 74250}, + {"1280x720@30Hz 64:27", 22500, 74250}, + {"1280x720@50Hz 64:27", 37500, 74250}, + {"1280x720@60Hz 64:27", 45000, 74250}, + {"1280x720@100Hz 64:27", 75000, 148500}, + /* VIC 71 */ + {"1280x720@120Hz 64:27", 91000, 148500}, + {"1920x1080@24Hz 64:27", 27000, 74250}, + {"1920x1080@25Hz 64:27", 28125, 74250}, + {"1920x1080@30Hz 64:27", 33750, 74250}, + {"1920x1080@50Hz 64:27", 56250, 148500}, + {"1920x1080@60Hz 64:27", 67500, 148500}, + {"1920x1080@100Hz 64:27", 112500, 297000}, + {"1920x1080@120Hz 64:27", 135000, 297000}, + {"1680x720@24Hz 64:27", 18000, 59400}, + {"1680x720@25Hz 64:27", 18750, 59400}, + /* VIC 81 */ + {"1680x720@30Hz 64:27", 22500, 59400}, + {"1680x720@50Hz 64:27", 37500, 82500}, + {"1680x720@60Hz 64:27", 45000, 99000}, + {"1680x720@100Hz 64:27", 82500, 165000}, + {"1680x720@120Hz 64:27", 99000, 198000}, + {"2560x1080@24Hz 64:27", 26400, 99000}, + {"2560x1080@25Hz 64:27", 28125, 90000}, + {"2560x1080@30Hz 64:27", 33750, 118800}, + {"2560x1080@50Hz 64:27", 56250, 185625}, + {"2560x1080@60Hz 64:27", 66000, 198000}, + /* VIC 91 */ + {"2560x1080@100Hz 64:27", 125000, 371250}, + {"2560x1080@120Hz 64:27", 150000, 495000}, + {"3840x2160@24Hz 16:9", 54000, 297000}, + {"3840x2160@25Hz 16:9", 56250, 297000}, + {"3840x2160@30Hz 16:9", 67500, 297000}, + {"3840x2160@50Hz 16:9", 112500, 594000}, + {"3840x2160@60Hz 16:9", 135000, 594000}, + {"4096x2160@24Hz 256:135", 54000, 297000}, + {"4096x2160@25Hz 256:135", 56250, 297000}, + {"4096x2160@30Hz 256:135", 67500, 297000}, + /* VIC 101 */ + {"4096x2160@50Hz 256:135", 112500, 594000}, + {"4096x2160@60Hz 256:135", 135000, 594000}, + {"3840x2160@24Hz 64:27", 54000, 297000}, + {"3840x2160@25Hz 64:27", 56250, 297000}, + {"3840x2160@30Hz 64:27", 67500, 297000}, + {"3840x2160@50Hz 64:27", 112500, 594000}, + {"3840x2160@60Hz 64:27", 135000, 594000}, }; static void @@ -937,7 +952,7 @@ cea_svd(unsigned char *x, int n) } if (vic > 0 && vic <= ARRAY_SIZE(edid_cea_modes)) - mode = edid_cea_modes[vic - 1]; + mode = edid_cea_modes[vic - 1].name; else mode = "Unknown mode"; @@ -981,7 +996,7 @@ cea_vfpdb(unsigned char *x) index = vic - 1; if (index < ARRAY_SIZE(edid_cea_modes)) - mode = edid_cea_modes[vic]; + mode = edid_cea_modes[vic].name; else mode = "Unknown mode"; @@ -993,11 +1008,14 @@ cea_vfpdb(unsigned char *x) } } -static const char *edid_cea_hdmi_modes[] = { - "3840x2160@30Hz 16:9", - "3840x2160@25Hz 16:9", - "3840x2160@24Hz 16:9", - "4096x2160@24Hz 256:135", +static struct { + const char *name; + int hor_freq_hz, pixclk_khz; +} edid_cea_hdmi_modes[] = { + {"3840x2160@30Hz 16:9", 67500, 297000}, + {"3840x2160@25Hz 16:9", 56250, 297000}, + {"3840x2160@24Hz 16:9", 54000, 297000}, + {"4096x2160@24Hz 256:135", 54000, 297000}, }; static void @@ -1084,7 +1102,7 @@ cea_hdmi_block(unsigned char *x) vic--; if (vic < ARRAY_SIZE(edid_cea_hdmi_modes)) - mode = edid_cea_hdmi_modes[vic]; + mode = edid_cea_hdmi_modes[vic].name; else mode = "Unknown mode"; @@ -1917,27 +1935,28 @@ extract_edid(int fd) static const struct { int x, y, refresh, ratio_w, ratio_h; + int hor_freq_hz, pixclk_khz, interlaced; } established_timings[] = { /* 0x23 bit 7 - 0 */ - {720, 400, 70, 9, 5}, - {720, 400, 88, 9, 5}, - {640, 480, 60, 4, 3}, - {640, 480, 67, 4, 3}, - {640, 480, 72, 4, 3}, - {640, 480, 75, 4, 3}, - {800, 600, 56, 4, 3}, - {800, 600, 60, 4, 3}, + {720, 400, 70, 9, 5, 31469, 28320}, + {720, 400, 88, 9, 5, 39500, 35500}, + {640, 480, 60, 4, 3, 31469, 25175}, + {640, 480, 67, 4, 3, 35000, 30240}, + {640, 480, 72, 4, 3, 37900, 31500}, + {640, 480, 75, 4, 3, 37500, 31500}, + {800, 600, 56, 4, 3, 35200, 36000}, + {800, 600, 60, 4, 3, 37900, 40000}, /* 0x24 bit 7 - 0 */ - {800, 600, 72, 4, 3}, - {800, 600, 75, 4, 3}, - {832, 624, 75, 4, 3}, - {1280, 768, 87, 5, 3}, - {1024, 768, 60, 4, 3}, - {1024, 768, 70, 4, 3}, - {1024, 768, 75, 4, 3}, - {1280, 1024, 75, 5, 4}, + {800, 600, 72, 4, 3, 48100, 50000}, + {800, 600, 75, 4, 3, 46900, 49500}, + {832, 624, 75, 4, 3, 49726, 57284}, + {1280, 768, 87, 5, 3, 35522, 44900, 1}, + {1024, 768, 60, 4, 3, 48400, 65000}, + {1024, 768, 70, 4, 3, 56500, 75000}, + {1024, 768, 75, 4, 3, 60000, 78750}, + {1280, 1024, 75, 5, 4, 80000, 135000}, /* 0x25 bit 7*/ - {1152, 870, 75, 192, 145}, + {1152, 870, 75, 192, 145, 67500, 108000}, }; static void print_subsection(char *name, unsigned char *edid, int start, @@ -2228,8 +2247,10 @@ int main(int argc, char **argv) printf("Established timings supported:\n"); for (i = 0; i < 17; i++) { if (edid[0x23 + i / 8] & (1 << (7 - i % 8))) { - printf(" %dx%d@%dHz %u:%u\n", established_timings[i].x, - established_timings[i].y, established_timings[i].refresh, + printf(" %dx%d%s@%dHz %u:%u\n", + established_timings[i].x, established_timings[i].y, + established_timings[i].interlaced ? "i" : "", + established_timings[i].refresh, established_timings[i].ratio_w, established_timings[i].ratio_h); } } -- 2.14.1 _______________________________________________ xorg-devel@lists.x.org: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: https://lists.x.org/mailman/listinfo/xorg-devel