Paul Menzel (paulepanter@users.sourceforge.net) just uploaded a new patch set to gerrit, which you can find at https://review.coreboot.org/17643
-gerrit
commit 7ea91cbd7d44f10b4117d7fc1cc8f1e8b5cde1b5 Author: Paul Menzel paulepanter@users.sourceforge.net Date: Tue Nov 29 20:55:14 2016 +0100
lib/edid.c: Reformat code
Run the file through GNU indent 2.2.11 (switch `-linux`), so that the file follows the coreboot coding style.
Change-Id: I3c0a3d707abf99e05314eae1120d5be1447193f3 Signed-off-by: Paul Menzel paulepanter@users.sourceforge.net --- src/lib/edid.c | 995 +++++++++++++++++++++++++++++++++------------------------ 1 file changed, 583 insertions(+), 412 deletions(-)
diff --git a/src/lib/edid.c b/src/lib/edid.c index d1b9c9f..23b6503 100644 --- a/src/lib/edid.c +++ b/src/lib/edid.c @@ -100,7 +100,8 @@ static struct lb_framebuffer edid_fb; static char *manufacturer_name(unsigned char *x) { extra_info.manuf_name[0] = ((x[0] & 0x7C) >> 2) + '@'; - extra_info.manuf_name[1] = ((x[0] & 0x03) << 3) + ((x[1] & 0xE0) >> 5) + '@'; + extra_info.manuf_name[1] = + ((x[0] & 0x03) << 3) + ((x[1] & 0xE0) >> 5) + '@'; extra_info.manuf_name[2] = (x[1] & 0x1F) + '@'; extra_info.manuf_name[3] = 0;
@@ -112,8 +113,7 @@ static char *manufacturer_name(unsigned char *x) return NULL; }
-static int -detailed_cvt_descriptor(unsigned char *x, int first) +static int detailed_cvt_descriptor(unsigned char *x, int first) { const unsigned char empty[3] = { 0, 0, 0 }; const char *names[] = { "50", "60", "75", "85" }; @@ -131,13 +131,17 @@ detailed_cvt_descriptor(unsigned char *x, int first)
switch (x[1] & 0x0c) { case 0x00: - width = (height * 4) / 3; break; + width = (height * 4) / 3; + break; case 0x04: - width = (height * 16) / 9; break; + width = (height * 16) / 9; + break; case 0x08: - width = (height * 16) / 10; break; + width = (height * 16) / 10; + break; case 0x0c: - width = (height * 15) / 9; break; + width = (height * 15) / 9; + break; }
if (x[1] & 0x03) @@ -147,23 +151,20 @@ detailed_cvt_descriptor(unsigned char *x, int first) if (!(x[2] & 0x1f)) valid = 0;
- fifty = (x[2] & 0x10); - sixty = (x[2] & 0x08); + fifty = (x[2] & 0x10); + sixty = (x[2] & 0x08); seventyfive = (x[2] & 0x04); - eightyfive = (x[2] & 0x02); - reduced = (x[2] & 0x01); + eightyfive = (x[2] & 0x02); + reduced = (x[2] & 0x01);
if (!valid) { printk(BIOS_SPEW, " (broken)\n"); } else { - printk(BIOS_SPEW, " %dx%d @ ( %s%s%s%s%s) Hz (%s%s preferred)\n", - width, height, - fifty ? "50 " : "", - sixty ? "60 " : "", - seventyfive ? "75 " : "", - eightyfive ? "85 " : "", - reduced ? "60RB " : "", - names[(x[2] & 0x60) >> 5], + printk(BIOS_SPEW, + " %dx%d @ ( %s%s%s%s%s) Hz (%s%s preferred)\n", width, + height, fifty ? "50 " : "", sixty ? "60 " : "", + seventyfive ? "75 " : "", eightyfive ? "85 " : "", + reduced ? "60RB " : "", names[(x[2] & 0x60) >> 5], (((x[2] & 0x60) == 0x20) && reduced) ? "RB" : ""); }
@@ -173,8 +174,7 @@ detailed_cvt_descriptor(unsigned char *x, int first) /* extract a CP437 string from a detailed subblock, checking for termination (if * less than len of bytes) with LF and padded with SP. */ -static char * -extract_string(unsigned char *x, int *valid_termination, int len) +static char *extract_string(unsigned char *x, int *valid_termination, int len) { static char ret[128]; int i, seen_newline = 0; @@ -219,13 +219,15 @@ detailed_block(struct edid *result_edid, unsigned char *x, int in_extension, /* Monitor descriptor block, not detailed timing descriptor. */ if (x[2] != 0) { /* 1.3, 3.10.3 */ - printk(BIOS_SPEW, "Monitor descriptor block has byte 2 nonzero (0x%02x)\n", + printk(BIOS_SPEW, + "Monitor descriptor block has byte 2 nonzero (0x%02x)\n", x[2]); c->has_valid_descriptor_pad = 0; } if (x[3] != 0xfd && x[4] != 0x00) { /* 1.3, 3.10.3 */ - printk(BIOS_SPEW, "Monitor descriptor block has byte 4 nonzero (0x%02x)\n", + printk(BIOS_SPEW, + "Monitor descriptor block has byte 4 nonzero (0x%02x)\n", x[4]); c->has_valid_descriptor_pad = 0; } @@ -237,7 +239,8 @@ detailed_block(struct edid *result_edid, unsigned char *x, int in_extension, * 0x0f seems to be common in laptop panels. * 0x0e is used by EPI: http://www.epi-standard.org/ */ - printk(BIOS_SPEW, "Manufacturer-specified data, tag %d\n", x[3]); + printk(BIOS_SPEW, + "Manufacturer-specified data, tag %d\n", x[3]); return 1; } switch (x[3]) { @@ -252,18 +255,22 @@ detailed_block(struct edid *result_edid, unsigned char *x, int in_extension, printk(BIOS_SPEW, "Established timings III\n"); return 1; case 0xF8: - { - int valid_cvt = 1; /* just this block */ - printk(BIOS_SPEW, "CVT 3-byte code descriptor:\n"); - if (x[5] != 0x01) { - c->has_valid_cvt = 0; - return 0; + { + int valid_cvt = 1; /* just this block */ + printk(BIOS_SPEW, + "CVT 3-byte code descriptor:\n"); + if (x[5] != 0x01) { + c->has_valid_cvt = 0; + return 0; + } + for (i = 0; i < 4; i++) + valid_cvt &= + detailed_cvt_descriptor(x + 6 + + (i * 3), + (i == 0)); + c->has_valid_cvt &= valid_cvt; + return 1; } - for (i = 0; i < 4; i++) - valid_cvt &= detailed_cvt_descriptor(x + 6 + (i * 3), (i == 0)); - c->has_valid_cvt &= valid_cvt; - return 1; - } case 0xF9: /* TODO */ printk(BIOS_SPEW, "Color management data\n"); @@ -283,165 +290,209 @@ detailed_block(struct edid *result_edid, unsigned char *x, int in_extension, 13)); return 1; case 0xFD: - { - int h_max_offset = 0, h_min_offset = 0; - int v_max_offset = 0, v_min_offset = 0; - int is_cvt = 0; - c->has_range_descriptor = 1; - extra_info.range_class = ""; - /* - * XXX todo: implement feature flags, vtd blocks - * XXX check: ranges are well-formed; block termination if no vtd - */ - if (c->claims_one_point_four) { - if (x[4] & 0x02) { - v_max_offset = 255; - if (x[4] & 0x01) { - v_min_offset = 255; + { + int h_max_offset = 0, h_min_offset = 0; + int v_max_offset = 0, v_min_offset = 0; + int is_cvt = 0; + c->has_range_descriptor = 1; + extra_info.range_class = ""; + /* + * XXX todo: implement feature flags, vtd blocks + * XXX check: ranges are well-formed; block termination if no vtd + */ + if (c->claims_one_point_four) { + if (x[4] & 0x02) { + v_max_offset = 255; + if (x[4] & 0x01) { + v_min_offset = 255; + } } - } - if (x[4] & 0x04) { - h_max_offset = 255; - if (x[4] & 0x03) { - h_min_offset = 255; + if (x[4] & 0x04) { + h_max_offset = 255; + if (x[4] & 0x03) { + h_min_offset = 255; + } } + } else if (x[4]) { + c->has_valid_range_descriptor = 0; } - } else if (x[4]) { - c->has_valid_range_descriptor = 0; - }
- /* - * despite the values, this is not a bitfield. - */ - switch (x[10]) { - case 0x00: /* default gtf */ - extra_info.range_class = "GTF"; - break; - case 0x01: /* range limits only */ - extra_info.range_class = "bare limits"; - if (!c->claims_one_point_four) - c->has_valid_range_descriptor = 0; - break; - case 0x02: /* secondary gtf curve */ - extra_info.range_class = "GTF with icing"; - break; - case 0x04: /* cvt */ - extra_info.range_class = "CVT"; - is_cvt = 1; - if (!c->claims_one_point_four) + /* + * despite the values, this is not a bitfield. + */ + switch (x[10]) { + case 0x00: /* default gtf */ + extra_info.range_class = "GTF"; + break; + case 0x01: /* range limits only */ + extra_info.range_class = "bare limits"; + if (!c->claims_one_point_four) + c->has_valid_range_descriptor = + 0; + break; + case 0x02: /* secondary gtf curve */ + extra_info.range_class = + "GTF with icing"; + break; + case 0x04: /* cvt */ + extra_info.range_class = "CVT"; + is_cvt = 1; + if (!c->claims_one_point_four) + c->has_valid_range_descriptor = + 0; + break; + default: /* invalid */ c->has_valid_range_descriptor = 0; - break; - default: /* invalid */ - c->has_valid_range_descriptor = 0; - extra_info.range_class = "invalid"; - break; - } - - if (x[5] + v_min_offset > x[6] + v_max_offset) - c->has_valid_range_descriptor = 0; - if (x[7] + h_min_offset > x[8] + h_max_offset) - c->has_valid_range_descriptor = 0; - printk(BIOS_SPEW, "Monitor ranges (%s): %d-%dHz V, %d-%dkHz H", - extra_info.range_class, - x[5] + v_min_offset, x[6] + v_max_offset, - x[7] + h_min_offset, x[8] + h_max_offset); - if (x[9]) - printk(BIOS_SPEW, ", max dotclock %dMHz\n", x[9] * 10); - else { - if (c->claims_one_point_four) - c->has_valid_max_dotclock = 0; - printk(BIOS_SPEW, "\n"); - } - - if (is_cvt) { - int max_h_pixels = 0; - - printk(BIOS_SPEW, "CVT version %d.%d\n", x[11] & 0xf0 >> 4, x[11] & 0x0f); - - if (x[12] & 0xfc) { - int raw_offset = (x[12] & 0xfc) >> 2; - printk(BIOS_SPEW, "Real max dotclock: %dKHz\n", - (x[9] * 10000) - (raw_offset * 250)); - if (raw_offset >= 40) - c->warning_excessive_dotclock_correction = 1; + extra_info.range_class = "invalid"; + break; }
- max_h_pixels = x[12] & 0x03; - max_h_pixels <<= 8; - max_h_pixels |= x[13]; - max_h_pixels *= 8; - if (max_h_pixels) - printk(BIOS_SPEW, "Max active pixels per line: %d\n", max_h_pixels); - - printk(BIOS_SPEW, "Supported aspect ratios: %s %s %s %s %s\n", - x[14] & 0x80 ? "4:3" : "", - x[14] & 0x40 ? "16:9" : "", - x[14] & 0x20 ? "16:10" : "", - x[14] & 0x10 ? "5:4" : "", - x[14] & 0x08 ? "15:9" : ""); - if (x[14] & 0x07) + if (x[5] + v_min_offset > x[6] + v_max_offset) c->has_valid_range_descriptor = 0; - - printk(BIOS_SPEW, "Preferred aspect ratio: "); - switch((x[15] & 0xe0) >> 5) { - case 0x00: printk(BIOS_SPEW, "4:3"); break; - case 0x01: printk(BIOS_SPEW, "16:9"); break; - case 0x02: printk(BIOS_SPEW, "16:10"); break; - case 0x03: printk(BIOS_SPEW, "5:4"); break; - case 0x04: printk(BIOS_SPEW, "15:9"); break; - default: printk(BIOS_SPEW, "(broken)"); break; + if (x[7] + h_min_offset > x[8] + h_max_offset) + c->has_valid_range_descriptor = 0; + printk(BIOS_SPEW, + "Monitor ranges (%s): %d-%dHz V, %d-%dkHz H", + extra_info.range_class, + x[5] + v_min_offset, x[6] + v_max_offset, + x[7] + h_min_offset, + x[8] + h_max_offset); + if (x[9]) + printk(BIOS_SPEW, + ", max dotclock %dMHz\n", + x[9] * 10); + else { + if (c->claims_one_point_four) + c->has_valid_max_dotclock = 0; + printk(BIOS_SPEW, "\n"); } - printk(BIOS_SPEW, "\n");
- if (x[15] & 0x04) - printk(BIOS_SPEW, "Supports CVT standard blanking\n"); - if (x[15] & 0x10) - printk(BIOS_SPEW, "Supports CVT reduced blanking\n"); + if (is_cvt) { + int max_h_pixels = 0; + + printk(BIOS_SPEW, "CVT version %d.%d\n", + x[11] & 0xf0 >> 4, x[11] & 0x0f); + + if (x[12] & 0xfc) { + int raw_offset = + (x[12] & 0xfc) >> 2; + printk(BIOS_SPEW, + "Real max dotclock: %dKHz\n", + (x[9] * 10000) - + (raw_offset * 250)); + if (raw_offset >= 40) + c->warning_excessive_dotclock_correction = 1; + }
- if (x[15] & 0x07) - c->has_valid_range_descriptor = 0; + max_h_pixels = x[12] & 0x03; + max_h_pixels <<= 8; + max_h_pixels |= x[13]; + max_h_pixels *= 8; + if (max_h_pixels) + printk(BIOS_SPEW, + "Max active pixels per line: %d\n", + max_h_pixels); + + printk(BIOS_SPEW, + "Supported aspect ratios: %s %s %s %s %s\n", + x[14] & 0x80 ? "4:3" : "", + x[14] & 0x40 ? "16:9" : "", + x[14] & 0x20 ? "16:10" : "", + x[14] & 0x10 ? "5:4" : "", + x[14] & 0x08 ? "15:9" : ""); + if (x[14] & 0x07) + c->has_valid_range_descriptor = + 0; + + printk(BIOS_SPEW, + "Preferred aspect ratio: "); + switch ((x[15] & 0xe0) >> 5) { + case 0x00: + printk(BIOS_SPEW, "4:3"); + break; + case 0x01: + printk(BIOS_SPEW, "16:9"); + break; + case 0x02: + printk(BIOS_SPEW, "16:10"); + break; + case 0x03: + printk(BIOS_SPEW, "5:4"); + break; + case 0x04: + printk(BIOS_SPEW, "15:9"); + break; + default: + printk(BIOS_SPEW, "(broken)"); + break; + } + printk(BIOS_SPEW, "\n");
- if (x[16] & 0xf0) { - printk(BIOS_SPEW, "Supported display scaling:\n"); - if (x[16] & 0x80) - printk(BIOS_SPEW, " Horizontal shrink\n"); - if (x[16] & 0x40) - printk(BIOS_SPEW, " Horizontal stretch\n"); - if (x[16] & 0x20) - printk(BIOS_SPEW, " Vertical shrink\n"); - if (x[16] & 0x10) - printk(BIOS_SPEW, " Vertical stretch\n"); - } + if (x[15] & 0x04) + printk(BIOS_SPEW, + "Supports CVT standard blanking\n"); + if (x[15] & 0x10) + printk(BIOS_SPEW, + "Supports CVT reduced blanking\n"); + + if (x[15] & 0x07) + c->has_valid_range_descriptor = + 0; + + if (x[16] & 0xf0) { + printk(BIOS_SPEW, + "Supported display scaling:\n"); + if (x[16] & 0x80) + printk(BIOS_SPEW, + " Horizontal shrink\n"); + if (x[16] & 0x40) + printk(BIOS_SPEW, + " Horizontal stretch\n"); + if (x[16] & 0x20) + printk(BIOS_SPEW, + " Vertical shrink\n"); + if (x[16] & 0x10) + printk(BIOS_SPEW, + " Vertical stretch\n"); + }
- if (x[16] & 0x0f) - c->has_valid_range_descriptor = 0; + if (x[16] & 0x0f) + c->has_valid_range_descriptor = + 0;
- if (x[17]) - printk(BIOS_SPEW, "Preferred vertical refresh: %d Hz\n", x[17]); - else - c->warning_zero_preferred_refresh = 1; - } + if (x[17]) + printk(BIOS_SPEW, + "Preferred vertical refresh: %d Hz\n", + x[17]); + else + c->warning_zero_preferred_refresh = 1; + }
- /* - * Slightly weird to return a global, but I've never seen any - * EDID block wth two range descriptors, so it's harmless. - */ - return 1; - } + /* + * Slightly weird to return a global, but I've never seen any + * EDID block wth two range descriptors, so it's harmless. + */ + return 1; + } case 0xFE: /* * TODO: Two of these in a row, in the third and fourth slots, * seems to be specified by SPWG: http://www.spwg.org/ */ printk(BIOS_SPEW, "ASCII string: %s\n", - extract_string(x + 5, &c->has_valid_string_termination, 13)); + extract_string(x + 5, + &c->has_valid_string_termination, + 13)); return 1; case 0xFF: printk(BIOS_SPEW, "Serial number: %s\n", - extract_string(x + 5, &c->has_valid_string_termination, 13)); + extract_string(x + 5, + &c->has_valid_string_termination, + 13)); return 1; default: - printk(BIOS_SPEW, "Unknown monitor description type %d\n", x[3]); + printk(BIOS_SPEW, + "Unknown monitor description type %d\n", x[3]); return 0; } } @@ -453,18 +504,18 @@ detailed_block(struct edid *result_edid, unsigned char *x, int in_extension, /* Edid contains pixel clock in terms of 10KHz */ out->mode.pixel_clock = (x[0] + (x[1] << 8)) * 10; /* - LVDS supports following pixel clocks - 25000...112000 kHz: single channel - 80000...224000 kHz: dual channel - There is some overlap in theoretically supported - pixel clock between single-channel and dual-channel. - In practice with current panels all panels - <= 75200 kHz: single channel - >= 97750 kHz: dual channel - We have no samples between those values, so put a - threshold at 95000 kHz. If we get anything over - 95000 kHz with single channel, we can make this - more sofisticated but it's currently not needed. + LVDS supports following pixel clocks + 25000...112000 kHz: single channel + 80000...224000 kHz: dual channel + There is some overlap in theoretically supported + pixel clock between single-channel and dual-channel. + In practice with current panels all panels + <= 75200 kHz: single channel + >= 97750 kHz: dual channel + We have no samples between those values, so put a + threshold at 95000 kHz. If we get anything over + 95000 kHz with single channel, we can make this + more sofisticated but it's currently not needed. */ out->mode.lvds_dual_channel = (out->mode.pixel_clock >= 95000); extra_info.x_mm = (x[12] + ((x[14] & 0xF0) << 4)); @@ -530,24 +581,22 @@ detailed_block(struct edid *result_edid, unsigned char *x, int in_extension, break; }
- printk(BIOS_SPEW, "Detailed mode (IN HEX): Clock %d KHz, %x mm x %x mm\n" + printk(BIOS_SPEW, + "Detailed mode (IN HEX): Clock %d KHz, %x mm x %x mm\n" " %04x %04x %04x %04x hborder %x\n" " %04x %04x %04x %04x vborder %x\n" - " %chsync %cvsync%s%s %s\n", - out->mode.pixel_clock, - extra_info.x_mm, - extra_info.y_mm, - out->mode.ha, out->mode.ha + out->mode.hso, + " %chsync %cvsync%s%s %s\n", out->mode.pixel_clock, + extra_info.x_mm, extra_info.y_mm, out->mode.ha, + out->mode.ha + out->mode.hso, out->mode.ha + out->mode.hso + out->mode.hspw, - out->mode.ha + out->mode.hbl, out->mode.hborder, - out->mode.va, out->mode.va + out->mode.vso, + out->mode.ha + out->mode.hbl, out->mode.hborder, out->mode.va, + out->mode.va + out->mode.vso, out->mode.va + out->mode.vso + out->mode.vspw, out->mode.va + out->mode.vbl, out->mode.vborder, - out->mode.phsync, out->mode.pvsync, - extra_info.syncmethod, x[17] & 0x80 ?" interlaced" : "", - extra_info.stereo); + out->mode.phsync, out->mode.pvsync, extra_info.syncmethod, + x[17] & 0x80 ? " interlaced" : "", extra_info.stereo);
- if (! c->did_detailed_timing) { + if (!c->did_detailed_timing) { printk(BIOS_SPEW, "Did detailed timing\n"); c->did_detailed_timing = 1; *result_edid = *out; @@ -556,8 +605,7 @@ detailed_block(struct edid *result_edid, unsigned char *x, int in_extension, return 1; }
-static int -do_checksum(unsigned char *x) +static int do_checksum(unsigned char *x) { int valid = 0; printk(BIOS_SPEW, "Checksum: 0x%hhx", x[0x7f]); @@ -567,7 +615,8 @@ do_checksum(unsigned char *x) for (i = 0; i < 128; i++) sum += x[i]; if (sum) { - printk(BIOS_SPEW, " (should be 0x%hhx)", (unsigned char)(x[0x7f] - sum)); + printk(BIOS_SPEW, " (should be 0x%hhx)", + (unsigned char)(x[0x7f] - sum)); } else { valid = 1; printk(BIOS_SPEW, " (valid)"); @@ -579,32 +628,46 @@ do_checksum(unsigned char *x)
/* CEA extension */
-static const char * -audio_format(unsigned char x) +static const char *audio_format(unsigned char x) { switch (x) { - case 0: return "RESERVED"; - case 1: return "Linear PCM"; - case 2: return "AC-3"; - case 3: return "MPEG 1 (Layers 1 & 2)"; - case 4: return "MPEG 1 Layer 3 (MP3)"; - case 5: return "MPEG2 (multichannel)"; - case 6: return "AAC"; - case 7: return "DTS"; - case 8: return "ATRAC"; - case 9: return "One Bit Audio"; - case 10: return "Dolby Digital+"; - case 11: return "DTS-HD"; - case 12: return "MAT (MLP)"; - case 13: return "DST"; - case 14: return "WMA Pro"; - case 15: return "RESERVED"; + case 0: + return "RESERVED"; + case 1: + return "Linear PCM"; + case 2: + return "AC-3"; + case 3: + return "MPEG 1 (Layers 1 & 2)"; + case 4: + return "MPEG 1 Layer 3 (MP3)"; + case 5: + return "MPEG2 (multichannel)"; + case 6: + return "AAC"; + case 7: + return "DTS"; + case 8: + return "ATRAC"; + case 9: + return "One Bit Audio"; + case 10: + return "Dolby Digital+"; + case 11: + return "DTS-HD"; + case 12: + return "MAT (MLP)"; + case 13: + return "DST"; + case 14: + return "WMA Pro"; + case 15: + return "RESERVED"; } - return "BROKEN"; /* can't happen */ + return "BROKEN"; /* can't happen */ }
-static void -cea_audio_block(unsigned char *x) +static void cea_audio_block(unsigned char *x) { int i, format; int length = x[0] & 0x1f; @@ -617,40 +680,41 @@ cea_audio_block(unsigned char *x)
for (i = 1; i < length; i += 3) { format = (x[i] & 0x78) >> 3; - printk(BIOS_SPEW, " %s, max channels %d\n", audio_format(format), - x[i] & 0x07); - printk(BIOS_SPEW, " Supported sample rates (kHz):%s%s%s%s%s%s%s\n", - (x[i+1] & 0x40) ? " 192" : "", - (x[i+1] & 0x20) ? " 176.4" : "", - (x[i+1] & 0x10) ? " 96" : "", - (x[i+1] & 0x08) ? " 88.2" : "", - (x[i+1] & 0x04) ? " 48" : "", - (x[i+1] & 0x02) ? " 44.1" : "", - (x[i+1] & 0x01) ? " 32" : ""); + printk(BIOS_SPEW, " %s, max channels %d\n", + audio_format(format), x[i] & 0x07); + printk(BIOS_SPEW, + " Supported sample rates (kHz):%s%s%s%s%s%s%s\n", + (x[i + 1] & 0x40) ? " 192" : "", + (x[i + 1] & 0x20) ? " 176.4" : "", + (x[i + 1] & 0x10) ? " 96" : "", + (x[i + 1] & 0x08) ? " 88.2" : "", + (x[i + 1] & 0x04) ? " 48" : "", + (x[i + 1] & 0x02) ? " 44.1" : "", + (x[i + 1] & 0x01) ? " 32" : ""); if (format == 1) { - printk(BIOS_SPEW, " Supported sample sizes (bits):%s%s%s\n", + printk(BIOS_SPEW, + " Supported sample sizes (bits):%s%s%s\n", (x[2] & 0x04) ? " 24" : "", (x[2] & 0x02) ? " 20" : "", (x[2] & 0x01) ? " 16" : ""); } else if (format <= 8) { - printk(BIOS_SPEW, " Maximum bit rate: %d kHz\n", x[2] * 8); + printk(BIOS_SPEW, " Maximum bit rate: %d kHz\n", + x[2] * 8); } } }
-static void -cea_video_block(unsigned char *x) +static void cea_video_block(unsigned char *x) { int i; int length = x[0] & 0x1f;
for (i = 1; i < length; i++) - printk(BIOS_SPEW," VIC %02d %s\n", x[i] & 0x7f, + printk(BIOS_SPEW, " VIC %02d %s\n", x[i] & 0x7f, x[i] & 0x80 ? "(native)" : ""); }
-static void -cea_hdmi_block(struct edid *out, unsigned char *x) +static void cea_hdmi_block(struct edid *out, unsigned char *x) { int length = x[0] & 0x1f;
@@ -691,8 +755,10 @@ cea_hdmi_block(struct edid *out, unsigned char *x) }
if (x[8] & 0x40) { - printk(BIOS_SPEW, " Interlaced video latency: %d\n", x[9 + b]); - printk(BIOS_SPEW, " Interlaced audio latency: %d\n", x[10 + b]); + printk(BIOS_SPEW, " Interlaced video latency: %d\n", + x[9 + b]); + printk(BIOS_SPEW, " Interlaced audio latency: %d\n", + x[10 + b]); b += 2; }
@@ -703,24 +769,30 @@ cea_hdmi_block(struct edid *out, unsigned char *x) if (x[9 + b] & 0x80) printk(BIOS_SPEW, " 3D present\n"); if ((x[9 + b] & 0x60) == 0x20) { - printk(BIOS_SPEW, " All advertised VICs are 3D-capable\n"); + printk(BIOS_SPEW, + " All advertised VICs are 3D-capable\n"); formats = 1; } if ((x[9 + b] & 0x60) == 0x40) { - printk(BIOS_SPEW, " 3D-capable-VIC mask present\n"); + printk(BIOS_SPEW, + " 3D-capable-VIC mask present\n"); formats = 1; mask = 1; } switch (x[9 + b] & 0x18) { - case 0x00: break; + case 0x00: + break; case 0x08: - printk(BIOS_SPEW, " Base EDID image size is aspect ratio\n"); + printk(BIOS_SPEW, + " Base EDID image size is aspect ratio\n"); break; case 0x10: - printk(BIOS_SPEW, " Base EDID image size is in units of 1cm\n"); + printk(BIOS_SPEW, + " Base EDID image size is in units of 1cm\n"); break; case 0x18: - printk(BIOS_SPEW, " Base EDID image size is in units of 5cm\n"); + printk(BIOS_SPEW, + " Base EDID image size is in units of 5cm\n"); break; } len_xx = (x[10 + b] & 0xe0) >> 5; @@ -728,7 +800,8 @@ cea_hdmi_block(struct edid *out, unsigned char *x) b += 2;
if (len_xx) { - printk(BIOS_SPEW, " Skipping %d bytes that HDMI refuses to publicly" + printk(BIOS_SPEW, + " Skipping %d bytes that HDMI refuses to publicly" " document\n", len_xx); b += len_xx; } @@ -736,23 +809,29 @@ cea_hdmi_block(struct edid *out, unsigned char *x) if (len_3d) { if (formats) { if (x[9 + b] & 0x01) - printk(BIOS_SPEW, " Side-by-side 3D supported\n"); + printk(BIOS_SPEW, + " Side-by-side 3D supported\n"); if (x[10 + b] & 0x40) - printk(BIOS_SPEW, " Top-and-bottom 3D supported\n"); + printk(BIOS_SPEW, + " Top-and-bottom 3D supported\n"); if (x[10 + b] & 0x01) - printk(BIOS_SPEW, " Frame-packing 3D supported\n"); + printk(BIOS_SPEW, + " Frame-packing 3D supported\n"); b += 2; } if (mask) { int i; - printk(BIOS_SPEW, " 3D VIC indices:"); + printk(BIOS_SPEW, + " 3D VIC indices:"); /* worst bit ordering ever */ for (i = 0; i < 8; i++) if (x[10 + b] & (1 << i)) - printk(BIOS_SPEW, " %d", i); + printk(BIOS_SPEW, " %d", + i); for (i = 0; i < 8; i++) if (x[9 + b] & (1 << i)) - printk(BIOS_SPEW, " %d", i + 8); + printk(BIOS_SPEW, " %d", + i + 8); printk(BIOS_SPEW, "\n"); b += 2; } @@ -769,8 +848,7 @@ cea_hdmi_block(struct edid *out, unsigned char *x) } }
-static void -cea_block(struct edid *out, unsigned char *x) +static void cea_block(struct edid *out, unsigned char *x) { unsigned int oui;
@@ -786,7 +864,8 @@ cea_block(struct edid *out, unsigned char *x) case 0x03: /* yes really, endianness lols */ oui = (x[3] << 16) + (x[2] << 8) + x[1]; - printk(BIOS_SPEW, " Vendor-specific data block, OUI %06x", oui); + printk(BIOS_SPEW, " Vendor-specific data block, OUI %06x", + oui); if (oui == 0x000c03) cea_hdmi_block(out, x); else @@ -808,7 +887,8 @@ cea_block(struct edid *out, unsigned char *x) printk(BIOS_SPEW, "vendor-specific video data block\n"); break; case 0x02: - printk(BIOS_SPEW, "VESA video display device information data block\n"); + printk(BIOS_SPEW, + "VESA video display device information data block\n"); break; case 0x03: printk(BIOS_SPEW, "VESA video data block\n"); @@ -830,34 +910,37 @@ cea_block(struct edid *out, unsigned char *x) break; default: if (x[1] >= 6 && x[1] <= 15) - printk(BIOS_SPEW, "Reserved video block (%02x)\n", x[1]); + printk(BIOS_SPEW, + "Reserved video block (%02x)\n", x[1]); else if (x[1] >= 19 && x[1] <= 31) - printk(BIOS_SPEW, "Reserved audio block (%02x)\n", x[1]); + printk(BIOS_SPEW, + "Reserved audio block (%02x)\n", x[1]); else printk(BIOS_SPEW, "Unknown (%02x)\n", x[1]); break; } break; default: - { - int tag = (*x & 0xe0) >> 5; - int length = *x & 0x1f; - printk(BIOS_SPEW, - " Unknown tag %d, length %d (raw %02x)\n", tag, length, *x); - break; - } + { + int tag = (*x & 0xe0) >> 5; + int length = *x & 0x1f; + printk(BIOS_SPEW, + " Unknown tag %d, length %d (raw %02x)\n", tag, + length, *x); + break; + } } }
-static int -parse_cea(struct edid *out, unsigned char *x, struct edid_context *c) +static int parse_cea(struct edid *out, unsigned char *x, struct edid_context *c) { int ret = 0; int version = x[1]; int offset = x[2]; unsigned char *detailed;
- if (version >= 1) do { + if (version >= 1) + do { if (version == 1 && x[3] != 0) ret = 1;
@@ -865,12 +948,15 @@ parse_cea(struct edid *out, unsigned char *x, struct edid_context *c) break;
if (version < 3) { - printk(BIOS_SPEW, "%d 8-byte timing descriptors\n", (offset - 4) / 8); + printk(BIOS_SPEW, + "%d 8-byte timing descriptors\n", + (offset - 4) / 8); if (offset - 4 > 0) /* do stuff */ ; } else if (version == 3) { int i; - printk(BIOS_SPEW, "%d bytes of CEA data\n", offset - 4); + printk(BIOS_SPEW, "%d bytes of CEA data\n", + offset - 4); for (i = 4; i < offset; i += (x[i] & 0x1f) + 1) { cea_block(out, x + i); } @@ -878,17 +964,23 @@ parse_cea(struct edid *out, unsigned char *x, struct edid_context *c)
if (version >= 2) { if (x[3] & 0x80) - printk(BIOS_SPEW, "Underscans PC formats by default\n"); + printk(BIOS_SPEW, + "Underscans PC formats by default\n"); if (x[3] & 0x40) - printk(BIOS_SPEW, "Basic audio support\n"); + printk(BIOS_SPEW, + "Basic audio support\n"); if (x[3] & 0x20) - printk(BIOS_SPEW, "Supports YCbCr 4:4:4\n"); + printk(BIOS_SPEW, + "Supports YCbCr 4:4:4\n"); if (x[3] & 0x10) - printk(BIOS_SPEW, "Supports YCbCr 4:2:2\n"); - printk(BIOS_SPEW, "%d native detailed modes\n", x[3] & 0x0f); + printk(BIOS_SPEW, + "Supports YCbCr 4:2:2\n"); + printk(BIOS_SPEW, "%d native detailed modes\n", + x[3] & 0x0f); }
- for (detailed = x + offset; detailed + 18 < x + 127; detailed += 18) + for (detailed = x + offset; detailed + 18 < x + 127; + detailed += 18) if (detailed[0]) detailed_block(out, detailed, 1, c); } while (0); @@ -899,8 +991,7 @@ parse_cea(struct edid *out, unsigned char *x, struct edid_context *c)
/* generic extension code */
-static void -extension_version(struct edid *out, unsigned char *x) +static void extension_version(struct edid *out, unsigned char *x) { printk(BIOS_SPEW, "Extension version: %d\n", x[1]); } @@ -911,18 +1002,29 @@ parse_extension(struct edid *out, unsigned char *x, struct edid_context *c) int conformant_extension = 0; printk(BIOS_SPEW, "\n");
- switch(x[0]) { + switch (x[0]) { case 0x02: printk(BIOS_SPEW, "CEA extension block\n"); extension_version(out, x); conformant_extension = parse_cea(out, x, c); break; - case 0x10: printk(BIOS_SPEW, "VTB extension block\n"); break; - case 0x40: printk(BIOS_SPEW, "DI extension block\n"); break; - case 0x50: printk(BIOS_SPEW, "LS extension block\n"); break; - case 0x60: printk(BIOS_SPEW, "DPVL extension block\n"); break; - case 0xF0: printk(BIOS_SPEW, "Block map\n"); break; - case 0xFF: printk(BIOS_SPEW, "Manufacturer-specific extension block\n"); + case 0x10: + printk(BIOS_SPEW, "VTB extension block\n"); + break; + case 0x40: + printk(BIOS_SPEW, "DI extension block\n"); + break; + case 0x50: + printk(BIOS_SPEW, "LS extension block\n"); + break; + case 0x60: + printk(BIOS_SPEW, "DPVL extension block\n"); + break; + case 0xF0: + printk(BIOS_SPEW, "Block map\n"); + break; + case 0xFF: + printk(BIOS_SPEW, "Manufacturer-specific extension block\n"); default: printk(BIOS_SPEW, "Unknown extension block\n"); break; @@ -937,26 +1039,28 @@ static const struct { int x, y, refresh; } established_timings[] = { /* 0x23 bit 7 - 0 */ - {720, 400, 70}, - {720, 400, 88}, - {640, 480, 60}, - {640, 480, 67}, - {640, 480, 72}, - {640, 480, 75}, - {800, 600, 56}, - {800, 600, 60}, - /* 0x24 bit 7 - 0 */ - {800, 600, 72}, - {800, 600, 75}, - {832, 624, 75}, - {1280, 768, 87}, - {1024, 768, 60}, - {1024, 768, 70}, - {1024, 768, 75}, - {1280, 1024, 75}, - /* 0x25 bit 7*/ - {1152, 870, 75}, -}; + { + 720, 400, 70}, { + 720, 400, 88}, { + 640, 480, 60}, { + 640, 480, 67}, { + 640, 480, 72}, { + 640, 480, 75}, { + 800, 600, 56}, { + 800, 600, 60}, + /* 0x24 bit 7 - 0 */ + { + 800, 600, 72}, { + 800, 600, 75}, { + 832, 624, 75}, { + 1280, 768, 87}, { + 1024, 768, 60}, { + 1024, 768, 70}, { + 1024, 768, 75}, { + 1280, 1024, 75}, + /* 0x25 bit 7 */ + { +1152, 870, 75},};
static void print_subsection(const char *name, unsigned char *edid, int start, int end) @@ -976,7 +1080,7 @@ static void dump_breakdown(unsigned char *edid) printk(BIOS_SPEW, "Extracted contents:\n"); print_subsection("header", edid, 0, 7); print_subsection("serial number", edid, 8, 17); - print_subsection("version", edid,18, 19); + print_subsection("version", edid, 18, 19); print_subsection("basic params", edid, 20, 24); print_subsection("chroma info", edid, 25, 34); print_subsection("established", edid, 35, 37); @@ -1000,25 +1104,31 @@ static void dump_breakdown(unsigned char *edid) */ static struct edid_mode known_modes[NUM_KNOWN_MODES] = { [EDID_MODE_640x480_60Hz] = { - .name = "640x480@60Hz", .pixel_clock = 25200, .refresh = 60, - .ha = 640, .hbl = 160, .hso = 16, .hspw = 96, - .va = 480, .vbl = 45, .vso = 10, .vspw = 2, - .phsync = '-', .pvsync = '-' }, + .name = "640x480@60Hz",.pixel_clock = + 25200,.refresh = 60, + .ha = 640,.hbl = 160,.hso = 16,.hspw = 96, + .va = 480,.vbl = 45,.vso = 10,.vspw = 2, + .phsync = '-',.pvsync = '-'}, [EDID_MODE_720x480_60Hz] = { - .name = "720x480@60Hz", .pixel_clock = 27000, .refresh = 60, - .ha = 720, .hbl = 138, .hso = 16, .hspw = 62, - .va = 480, .vbl = 45, .vso = 9, .vspw = 6, - .phsync = '-', .pvsync = '-' }, + .name = "720x480@60Hz",.pixel_clock = + 27000,.refresh = 60, + .ha = 720,.hbl = 138,.hso = 16,.hspw = 62, + .va = 480,.vbl = 45,.vso = 9,.vspw = 6, + .phsync = '-',.pvsync = '-'}, [EDID_MODE_1280x720_60Hz] = { - .name = "1280x720@60Hz", .pixel_clock = 74250, .refresh = 60, - .ha = 1280, .hbl = 370, .hso = 110, .hspw = 40, - .va = 720, .vbl = 30, .vso = 5, .vspw = 20, - .phsync = '+', .pvsync = '+' }, + .name = "1280x720@60Hz",.pixel_clock = + 74250,.refresh = 60, + .ha = 1280,.hbl = 370,.hso = 110,.hspw = + 40, + .va = 720,.vbl = 30,.vso = 5,.vspw = 20, + .phsync = '+',.pvsync = '+'}, [EDID_MODE_1920x1080_60Hz] = { - .name = "1920x1080@60Hz", .pixel_clock = 148500, .refresh = 60, - .ha = 1920, .hbl = 280, .hso = 88, .hspw = 44, - .va = 1080, .vbl = 45, .vso = 4, .vspw = 5, - .phsync = '+', .pvsync = '+' }, + .name = "1920x1080@60Hz",.pixel_clock = + 148500,.refresh = 60, + .ha = 1920,.hbl = 280,.hso = 88,.hspw = + 44, + .va = 1080,.vbl = 45,.vso = 4,.vspw = 5, + .phsync = '+',.pvsync = '+'}, };
int set_display_mode(struct edid *edid, enum edid_modes mode) @@ -1048,15 +1158,15 @@ int decode_edid(unsigned char *edid, int size, struct edid *out) { int analog, i, j; struct edid_context c = { - .has_valid_cvt = 1, - .has_valid_dummy_block = 1, - .has_valid_descriptor_ordering = 1, - .has_valid_detailed_blocks = 1, - .has_valid_descriptor_pad = 1, - .has_valid_range_descriptor = 1, - .has_valid_max_dotclock = 1, - .has_valid_string_termination = 1, - .conformant = 1, + .has_valid_cvt = 1, + .has_valid_dummy_block = 1, + .has_valid_descriptor_ordering = 1, + .has_valid_detailed_blocks = 1, + .has_valid_descriptor_pad = 1, + .has_valid_range_descriptor = 1, + .has_valid_max_dotclock = 1, + .has_valid_string_termination = 1, + .conformant = 1, };
dump_breakdown(edid); @@ -1073,7 +1183,8 @@ int decode_edid(unsigned char *edid, int size, struct edid *out)
extra_info.model = (unsigned short)(edid[0x0A] + (edid[0x0B] << 8)); extra_info.serial = (unsigned int)(edid[0x0C] + (edid[0x0D] << 8) - + (edid[0x0E] << 16) + (edid[0x0F] << 24)); + + (edid[0x0E] << 16) + + (edid[0x0F] << 24));
printk(BIOS_SPEW, "Manufacturer: %s Model %x Serial Number %u\n", extra_info.manuf_name, @@ -1087,15 +1198,17 @@ int decode_edid(unsigned char *edid, int size, struct edid *out) if (edid[0x11] > 0x0f) { if (edid[0x10] == 0xff) { c.has_valid_year = 1; - printk(BIOS_SPEW, "Made week %hhd of model year %hhd\n", edid[0x10], - edid[0x11]); + printk(BIOS_SPEW, + "Made week %hhd of model year %hhd\n", + edid[0x10], edid[0x11]); extra_info.week = edid[0x10]; extra_info.year = edid[0x11]; } else { /* we know it's at least 2013, when this code was written */ if (edid[0x11] + 90 <= 2013) { c.has_valid_year = 1; - printk(BIOS_SPEW, "Made week %hhd of %d\n", + printk(BIOS_SPEW, + "Made week %hhd of %d\n", edid[0x10], edid[0x11] + 1990); extra_info.week = edid[0x10]; extra_info.year = edid[0x11] + 1990; @@ -1110,7 +1223,8 @@ int decode_edid(unsigned char *edid, int size, struct edid *out)
if (edid[0x12] == 1) { if (edid[0x13] > 4) { - printk(BIOS_SPEW, "Claims > 1.4, assuming 1.4 conformance\n"); + printk(BIOS_SPEW, + "Claims > 1.4, assuming 1.4 conformance\n"); edid[0x13] = 4; } switch (edid[0x13]) { @@ -1138,23 +1252,39 @@ int decode_edid(unsigned char *edid, int size, struct edid *out) else if ((edid[0x14] & 0x70) == 0x70) c.nonconformant_digital_display = 1; else - printk(BIOS_SPEW, "%d bits per primary color channel\n", + printk(BIOS_SPEW, + "%d bits per primary color channel\n", ((edid[0x14] & 0x70) >> 3) + 4); - out->panel_bits_per_color = ((edid[0x14] & 0x70) >> 3) + 4; - out->panel_bits_per_pixel = 3*out->panel_bits_per_color; + out->panel_bits_per_color = + ((edid[0x14] & 0x70) >> 3) + 4; + out->panel_bits_per_pixel = + 3 * out->panel_bits_per_color;
switch (edid[0x14] & 0x0f) { - case 0x00: printk(BIOS_SPEW, "Digital interface is not defined\n"); break; - case 0x01: printk(BIOS_SPEW, "DVI interface\n"); break; - case 0x02: printk(BIOS_SPEW, "HDMI-a interface\n"); break; - case 0x03: printk(BIOS_SPEW, "HDMI-b interface\n"); break; - case 0x04: printk(BIOS_SPEW, "MDDI interface\n"); break; - case 0x05: printk(BIOS_SPEW, "DisplayPort interface\n"); break; + case 0x00: + printk(BIOS_SPEW, + "Digital interface is not defined\n"); + break; + case 0x01: + printk(BIOS_SPEW, "DVI interface\n"); + break; + case 0x02: + printk(BIOS_SPEW, "HDMI-a interface\n"); + break; + case 0x03: + printk(BIOS_SPEW, "HDMI-b interface\n"); + break; + case 0x04: + printk(BIOS_SPEW, "MDDI interface\n"); + break; + case 0x05: + printk(BIOS_SPEW, "DisplayPort interface\n"); + break; default: - c.nonconformant_digital_display = 1; + c.nonconformant_digital_display = 1; } extra_info.type = edid[0x14] & 0x0f; - } else if (c.claims_one_point_two) { + } else if (c.claims_one_point_two) { conformance_mask = 0x7E; if (edid[0x14] & 0x01) { printk(BIOS_SPEW, "DFP 1.x compatible TMDS\n"); @@ -1163,7 +1293,8 @@ int decode_edid(unsigned char *edid, int size, struct edid *out) conformance_mask = 0x7F;
if (!c.nonconformant_digital_display) - c.nonconformant_digital_display = edid[0x14] & conformance_mask; + c.nonconformant_digital_display = + edid[0x14] & conformance_mask; extra_info.nonconformant = c.nonconformant_digital_display; } else { analog = 1; @@ -1175,14 +1306,15 @@ int decode_edid(unsigned char *edid, int size, struct edid *out) printk(BIOS_SPEW, "Analog display, Input voltage level: %s V\n", voltage == 3 ? "0.7/0.7" : voltage == 2 ? "1.0/0.4" : - voltage == 1 ? "0.714/0.286" : - "0.7/0.3"); + voltage == 1 ? "0.714/0.286" : "0.7/0.3");
if (c.claims_one_point_four) { if (edid[0x14] & 0x10) - printk(BIOS_SPEW, "Blank-to-black setup/pedestal\n"); + printk(BIOS_SPEW, + "Blank-to-black setup/pedestal\n"); else - printk(BIOS_SPEW, "Blank level equals black level\n"); + printk(BIOS_SPEW, + "Blank level equals black level\n"); } else if (edid[0x14] & 0x10) { /* * XXX this is just the X text. 1.3 says "if set, display expects @@ -1192,24 +1324,26 @@ int decode_edid(unsigned char *edid, int size, struct edid *out) printk(BIOS_SPEW, "Configurable signal levels\n"); }
- printk(BIOS_SPEW, "Sync: %s%s%s%s\n", sync & 0x08 ? "Separate " : "", + printk(BIOS_SPEW, "Sync: %s%s%s%s\n", + sync & 0x08 ? "Separate " : "", sync & 0x04 ? "Composite " : "", sync & 0x02 ? "SyncOnGreen " : "", sync & 0x01 ? "Serration " : ""); }
- if (edid[0x15] && edid[0x16]) { printk(BIOS_SPEW, "Maximum image size: %d cm x %d cm\n", edid[0x15], edid[0x16]); } else if (c.claims_one_point_four && (edid[0x15] || edid[0x16])) { - if (edid[0x15]) { /* edid[0x15] != 0 && edid[0x16] == 0 */ - unsigned int ratio = 100000/(edid[0x15] + 99); - printk(BIOS_SPEW, "Aspect ratio is %u.%03u (landscape)\n", + if (edid[0x15]) { /* edid[0x15] != 0 && edid[0x16] == 0 */ + unsigned int ratio = 100000 / (edid[0x15] + 99); + printk(BIOS_SPEW, + "Aspect ratio is %u.%03u (landscape)\n", ratio / 1000, ratio % 1000); - } else { /* edid[0x15] == 0 && edid[0x16] != 0 */ - unsigned int ratio = 100000/(edid[0x16] + 99); - printk(BIOS_SPEW, "Aspect ratio is %u.%03u (portrait)\n", + } else { /* edid[0x15] == 0 && edid[0x16] != 0 */ + unsigned int ratio = 100000 / (edid[0x16] + 99); + printk(BIOS_SPEW, + "Aspect ratio is %u.%03u (portrait)\n", ratio / 1000, ratio % 1000); } } else { @@ -1219,27 +1353,39 @@ int decode_edid(unsigned char *edid, int size, struct edid *out)
if (edid[0x17] == 0xff) { if (c.claims_one_point_four) - printk(BIOS_SPEW, "Gamma is defined in an extension block\n"); + printk(BIOS_SPEW, + "Gamma is defined in an extension block\n"); else /* XXX Technically 1.3 doesn't say this... */ printk(BIOS_SPEW, "Gamma: 1.0\n"); - } else printk(BIOS_SPEW, "Gamma: %d%%\n", ((edid[0x17] + 100))); + } else + printk(BIOS_SPEW, "Gamma: %d%%\n", ((edid[0x17] + 100))); printk(BIOS_SPEW, "Check DPMS levels\n"); if (edid[0x18] & 0xE0) { printk(BIOS_SPEW, "DPMS levels:"); - if (edid[0x18] & 0x80) printk(BIOS_SPEW, " Standby"); - if (edid[0x18] & 0x40) printk(BIOS_SPEW, " Suspend"); - if (edid[0x18] & 0x20) printk(BIOS_SPEW, " Off"); + if (edid[0x18] & 0x80) + printk(BIOS_SPEW, " Standby"); + if (edid[0x18] & 0x40) + printk(BIOS_SPEW, " Suspend"); + if (edid[0x18] & 0x20) + printk(BIOS_SPEW, " Off"); printk(BIOS_SPEW, "\n"); }
/* FIXME: this is from 1.4 spec, check earlier */ if (analog) { switch (edid[0x18] & 0x18) { - case 0x00: printk(BIOS_SPEW, "Monochrome or grayscale display\n"); break; - case 0x08: printk(BIOS_SPEW, "RGB color display\n"); break; - case 0x10: printk(BIOS_SPEW, "Non-RGB color display\n"); break; - case 0x18: printk(BIOS_SPEW, "Undefined display color type\n"); + case 0x00: + printk(BIOS_SPEW, "Monochrome or grayscale display\n"); + break; + case 0x08: + printk(BIOS_SPEW, "RGB color display\n"); + break; + case 0x10: + printk(BIOS_SPEW, "Non-RGB color display\n"); + break; + case 0x18: + printk(BIOS_SPEW, "Undefined display color type\n"); } } else { printk(BIOS_SPEW, "Supported color formats: RGB 4:4:4"); @@ -1251,13 +1397,16 @@ int decode_edid(unsigned char *edid, int size, struct edid *out) }
if (edid[0x18] & 0x04) - printk(BIOS_SPEW, "Default (sRGB) color space is primary color space\n"); + printk(BIOS_SPEW, + "Default (sRGB) color space is primary color space\n"); if (edid[0x18] & 0x02) { - printk(BIOS_SPEW, "First detailed timing is preferred timing\n"); + printk(BIOS_SPEW, + "First detailed timing is preferred timing\n"); c.has_preferred_timing = 1; } if (edid[0x18] & 0x01) - printk(BIOS_SPEW, "Supports GTF timings within operating range\n"); + printk(BIOS_SPEW, + "Supports GTF timings within operating range\n");
/* XXX color section */
@@ -1267,13 +1416,18 @@ int decode_edid(unsigned char *edid, int size, struct edid *out) */ for (i = 0; i < 17; i++) { if (edid[0x23 + i / 8] & (1 << (7 - i % 8))) { - printk(BIOS_SPEW, " %dx%d@%dHz\n", established_timings[i].x, - established_timings[i].y, established_timings[i].refresh); + printk(BIOS_SPEW, " %dx%d@%dHz\n", + established_timings[i].x, + established_timings[i].y, + established_timings[i].refresh);
for (j = 0; j < NUM_KNOWN_MODES; j++) { - if (known_modes[j].ha == established_timings[i].x && - known_modes[j].va == established_timings[i].y && - known_modes[j].refresh == established_timings[i].refresh) + if (known_modes[j].ha == + established_timings[i].x + && known_modes[j].va == + established_timings[i].y + && known_modes[j].refresh == + established_timings[i].refresh) out->mode_is_supported[j] = 1; } } @@ -1289,7 +1443,8 @@ int decode_edid(unsigned char *edid, int size, struct edid *out) continue;
if (b1 == 0) { - printk(BIOS_SPEW, "non-conformant standard timing (0 horiz)\n"); + printk(BIOS_SPEW, + "non-conformant standard timing (0 horiz)\n"); continue; } x = (b1 + 31) * 8; @@ -1315,7 +1470,7 @@ int decode_edid(unsigned char *edid, int size, struct edid *out) printk(BIOS_SPEW, " %dx%d@%dHz\n", x, y, refresh); for (j = 0; j < NUM_KNOWN_MODES; j++) { if (known_modes[j].ha == x && known_modes[j].va == y && - known_modes[j].refresh == refresh) + known_modes[j].refresh == refresh) out->mode_is_supported[j] = 1; } } @@ -1323,10 +1478,9 @@ int decode_edid(unsigned char *edid, int size, struct edid *out) /* detailed timings */ printk(BIOS_SPEW, "Detailed timings\n"); for (i = 0; i < 4; i++) { - c.has_valid_detailed_blocks &= detailed_block( - out, edid + 0x36 + i * 18, 0, &c); - if (i == 0 && c.has_preferred_timing && !c.did_detailed_timing) - { + c.has_valid_detailed_blocks &= + detailed_block(out, edid + 0x36 + i * 18, 0, &c); + if (i == 0 && c.has_preferred_timing && !c.did_detailed_timing) { /* not really accurate... */ c.has_preferred_timing = 0; } @@ -1350,32 +1504,33 @@ int decode_edid(unsigned char *edid, int size, struct edid *out) * by v1.3 and we are unlikely to use any EDID 2.0 panels, we ignore * that case now and can fix it when we need to use a real 2.0 panel. */ - for(i = 128; i < size; i += 128) - c.nonconformant_extension += - parse_extension(out, &edid[i], &c); + for (i = 128; i < size; i += 128) + c.nonconformant_extension += parse_extension(out, &edid[i], &c);
if (c.claims_one_point_four) { if (c.nonconformant_digital_display || !c.has_valid_string_termination || - !c.has_valid_descriptor_pad || - !c.has_preferred_timing) + !c.has_valid_descriptor_pad || !c.has_preferred_timing) c.conformant = 0; if (!c.conformant) - printk(BIOS_ERR, "EDID block does NOT conform to EDID 1.4!\n"); + printk(BIOS_ERR, + "EDID block does NOT conform to EDID 1.4!\n"); if (c.nonconformant_digital_display) - printk(BIOS_ERR, "\tDigital display field contains garbage: %x\n", + printk(BIOS_ERR, + "\tDigital display field contains garbage: %x\n", c.nonconformant_digital_display); if (!c.has_valid_string_termination) - printk(BIOS_ERR, "\tDetailed block string not properly terminated\n"); + printk(BIOS_ERR, + "\tDetailed block string not properly terminated\n"); if (!c.has_valid_descriptor_pad) - printk(BIOS_ERR, "\tInvalid descriptor block padding\n"); + printk(BIOS_ERR, + "\tInvalid descriptor block padding\n"); if (!c.has_preferred_timing) printk(BIOS_ERR, "\tMissing preferred timing\n"); } else if (c.claims_one_point_three) { if (c.nonconformant_digital_display || !c.has_valid_string_termination || - !c.has_valid_descriptor_pad || - !c.has_preferred_timing) { + !c.has_valid_descriptor_pad || !c.has_preferred_timing) { c.conformant = 0; } /** @@ -1386,13 +1541,15 @@ int decode_edid(unsigned char *edid, int size, struct edid *out) * messages. */ if (!c.conformant) - printk(BIOS_ERR, "EDID block does NOT conform to EDID 1.3!\n"); + printk(BIOS_ERR, + "EDID block does NOT conform to EDID 1.3!\n"); else if (!c.has_name_descriptor || !c.has_range_descriptor) printk(BIOS_WARNING, "WARNING: EDID block does NOT " "fully conform to EDID 1.3.\n");
if (c.nonconformant_digital_display) - printk(BIOS_ERR, "\tDigital display field contains garbage: %x\n", + printk(BIOS_ERR, + "\tDigital display field contains garbage: %x\n", c.nonconformant_digital_display); if (!c.has_name_descriptor) printk(BIOS_ERR, "\tMissing name descriptor\n"); @@ -1400,28 +1557,35 @@ int decode_edid(unsigned char *edid, int size, struct edid *out) printk(BIOS_ERR, "\tMissing preferred timing\n"); if (!c.has_range_descriptor) printk(BIOS_ERR, "\tMissing monitor ranges\n"); - if (!c.has_valid_descriptor_pad) /* Might be more than just 1.3 */ - printk(BIOS_ERR, "\tInvalid descriptor block padding\n"); - if (!c.has_valid_string_termination) /* Likewise */ - printk(BIOS_ERR, "\tDetailed block string not properly terminated\n"); + if (!c.has_valid_descriptor_pad) /* Might be more than just 1.3 */ + printk(BIOS_ERR, + "\tInvalid descriptor block padding\n"); + if (!c.has_valid_string_termination) /* Likewise */ + printk(BIOS_ERR, + "\tDetailed block string not properly terminated\n"); } else if (c.claims_one_point_two) { if (c.nonconformant_digital_display || !c.has_valid_string_termination) c.conformant = 0; if (!c.conformant) - printk(BIOS_ERR, "EDID block does NOT conform to EDID 1.2!\n"); + printk(BIOS_ERR, + "EDID block does NOT conform to EDID 1.2!\n"); if (c.nonconformant_digital_display) - printk(BIOS_ERR, "\tDigital display field contains garbage: %x\n", + printk(BIOS_ERR, + "\tDigital display field contains garbage: %x\n", c.nonconformant_digital_display); if (!c.has_valid_string_termination) - printk(BIOS_ERR, "\tDetailed block string not properly terminated\n"); + printk(BIOS_ERR, + "\tDetailed block string not properly terminated\n"); } else if (c.claims_one_point_oh) { if (c.seen_non_detailed_descriptor) c.conformant = 0; if (!c.conformant) - printk(BIOS_ERR, "EDID block does NOT conform to EDID 1.0!\n"); + printk(BIOS_ERR, + "EDID block does NOT conform to EDID 1.0!\n"); if (c.seen_non_detailed_descriptor) - printk(BIOS_ERR, "\tHas descriptor blocks other than detailed timings\n"); + printk(BIOS_ERR, + "\tHas descriptor blocks other than detailed timings\n"); }
if (c.nonconformant_extension || @@ -1433,12 +1597,12 @@ int decode_edid(unsigned char *edid, int size, struct edid *out) !c.has_valid_dummy_block || !c.has_valid_extension_count || !c.has_valid_descriptor_ordering || - !c.has_valid_range_descriptor || - !c.manufacturer_name_well_formed) { + !c.has_valid_range_descriptor || !c.manufacturer_name_well_formed) { c.conformant = 0; printk(BIOS_ERR, "EDID block does not conform at all!\n"); if (c.nonconformant_extension) - printk(BIOS_ERR, "\tHas %d nonconformant extension block(s)\n", + printk(BIOS_ERR, + "\tHas %d nonconformant extension block(s)\n", c.nonconformant_extension); if (!c.has_valid_checksum) printk(BIOS_ERR, "\tBlock has broken checksum\n"); @@ -1449,19 +1613,25 @@ int decode_edid(unsigned char *edid, int size, struct edid *out) if (!c.has_valid_week) printk(BIOS_ERR, "\tBad week of manufacture\n"); if (!c.has_valid_detailed_blocks) - printk(BIOS_ERR, "\tDetailed blocks filled with garbage\n"); + printk(BIOS_ERR, + "\tDetailed blocks filled with garbage\n"); if (!c.has_valid_dummy_block) printk(BIOS_ERR, "\tDummy block filled with garbage\n"); if (!c.has_valid_extension_count) - printk(BIOS_ERR, "\tImpossible extension block count\n"); + printk(BIOS_ERR, + "\tImpossible extension block count\n"); if (!c.manufacturer_name_well_formed) - printk(BIOS_ERR, "\tManufacturer name field contains garbage\n"); + printk(BIOS_ERR, + "\tManufacturer name field contains garbage\n"); if (!c.has_valid_descriptor_ordering) - printk(BIOS_ERR, "\tInvalid detailed timing descriptor ordering\n"); + printk(BIOS_ERR, + "\tInvalid detailed timing descriptor ordering\n"); if (!c.has_valid_range_descriptor) - printk(BIOS_ERR, "\tRange descriptor contains garbage\n"); + printk(BIOS_ERR, + "\tRange descriptor contains garbage\n"); if (!c.has_valid_max_dotclock) - printk(BIOS_ERR, "\tEDID 1.4 block does not set max dotclock\n"); + printk(BIOS_ERR, + "\tEDID 1.4 block does not set max dotclock\n"); }
if (c.warning_excessive_dotclock_correction) @@ -1538,7 +1708,8 @@ void edid_set_framebuffer_bits_per_pixel(struct edid *edid, int fb_bpp,
edid->framebuffer_bits_per_pixel = fb_bpp; edid->bytes_per_line = ALIGN_UP(edid->mode.ha * - div_round_up(fb_bpp, 8), row_byte_alignment); + div_round_up(fb_bpp, 8), + row_byte_alignment); edid->x_resolution = edid->bytes_per_line / (fb_bpp / 8); edid->y_resolution = edid->mode.va; } @@ -1567,7 +1738,7 @@ void set_vbe_mode_info_valid(const struct edid *edid, uintptr_t fb_addr) edid_fb.bits_per_pixel = edid->framebuffer_bits_per_pixel; edid_fb.reserved_mask_pos = 0; edid_fb.reserved_mask_size = 0; - switch(edid->framebuffer_bits_per_pixel){ + switch (edid->framebuffer_bits_per_pixel) { case 32: case 24: /* packed into 4-byte words */