diff options
-rw-r--r-- | tools/intel_vbt_decode.c | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/tools/intel_vbt_decode.c b/tools/intel_vbt_decode.c index 37f62756..48b56808 100644 --- a/tools/intel_vbt_decode.c +++ b/tools/intel_vbt_decode.c @@ -637,6 +637,34 @@ static void dump_legacy_child_devices(struct context *context, child_dev_num, defs->child_dev_size); } +static const char * const channel_type[] = { + [0] = "automatic", + [1] = "single", + [2] = "dual", + [3] = "reserved", +}; + +static const char * const dps_type[] = { + [0] = "static DRRS", + [1] = "D2PO", + [2] = "seamless DRRS", + [3] = "reserved", +}; + +static const char * const blt_type[] = { + [0] = "default", + [1] = "CCFL", + [2] = "LED", + [3] = "reserved", +}; + +static const char * const pos_type[] = { + [0] = "inside shell", + [1] = "outside shell", + [2] = "reserved", + [3] = "reserved", +}; + static void dump_lvds_options(struct context *context, const struct bdb_block *block) { @@ -655,6 +683,73 @@ static void dump_lvds_options(struct context *context, printf("\tPFIT enhanced text mode: %s\n", YESNO(options->pfit_text_mode_enhanced)); printf("\tPFIT mode: %d\n", options->pfit_mode); + + if (block->size < 14) + return; + + for (int i = 0; i < 16; i++) { + unsigned int val; + + if (i != context->panel_type && !context->dump_all_panel_types) + continue; + + printf("\tPanel %d%s\n", i, context->panel_type == i ? " *" : ""); + + val = (options->lvds_panel_channel_bits >> (i * 2)) & 3; + printf("\t\tChannel type: %s (0x%x)\n", + channel_type[val], val); + + val = (options->ssc_bits >> i) & 1; + printf("\t\tSSC: %s (0x%x)\n", + YESNO(val), val); + + val = (options->ssc_freq >> i) & 1; + printf("\t\tSSC frequency: %d MHz (0x%x)\n", + decode_ssc_freq(context, val), val); + + val = (options->ssc_ddt >> i) & 1; + printf("\t\tDisable SSC in dual display twin: %s (0x%x)\n", + YESNO(val), val); + + if (block->size < 16) + continue; + + val = (options->panel_color_depth >> i) & 1; + printf("\t\tPanel color depth: %d (0x%x)\n", + val ? 24 : 18, val); + + if (block->size < 24) + continue; + + val = (options->dps_panel_type_bits >> (i * 2)) & 3; + printf("\t\tDPS type: %s (0x%x)\n", + dps_type[val], val); + + val = (options->blt_control_type_bits >> (i * 2)) & 3; + printf("\t\tBacklight type: %s (0x%x)\n", + blt_type[val], val); + + if (context->bdb->version < 200) + continue; + + val = (options->lcdvcc_s0_enable >> i) & 1; + printf("\t\tLCDVCC on during S0 state: %s (0x%x)\n", + YESNO(val), val); + + if (context->bdb->version < 228) + continue; + + val = ((options->rotation) >> (i * 2)) & 3; + printf("\t\tPanel rotation: %d degrees (0x%x)\n", + val * 90, val); + + if (context->bdb->version < 240) + continue; + + val = ((options->position) >> (i * 2)) & 3; + printf("\t\tPanel position: %s (0x%x)\n", + pos_type[val], val); + } } static void dump_lvds_ptr_data(struct context *context, |