diff options
-rw-r--r-- | src/bios_reader/bios_reader.c | 20 | ||||
-rw-r--r-- | src/i830_bios.c | 6 |
2 files changed, 21 insertions, 5 deletions
diff --git a/src/bios_reader/bios_reader.c b/src/bios_reader/bios_reader.c index cdc20453..35b144cb 100644 --- a/src/bios_reader/bios_reader.c +++ b/src/bios_reader/bios_reader.c @@ -315,2 +315,3 @@ static void dump_lvds_data(void) struct bdb_lvds_lfp_data *lvds_data; + struct bdb_lvds_lfp_data_ptrs *ptrs; int num_entries; @@ -320,2 +321,13 @@ static void dump_lvds_data(void) float clock; + int lfp_data_size, dvo_offset; + + block = find_section(BDB_LVDS_LFP_DATA_PTRS); + if (!block) { + printf("No LVDS ptr block\n"); + return; + } + ptrs = block->data; + lfp_data_size = ptrs->ptr[1].fp_timing_offset - ptrs->ptr[0].fp_timing_offset; + dvo_offset = ptrs->ptr[0].dvo_timing_offset - ptrs->ptr[0].fp_timing_offset; + free(block); @@ -328,3 +340,3 @@ static void dump_lvds_data(void) lvds_data = block->data; - num_entries = block->size / sizeof(struct bdb_lvds_lfp_data_entry); + num_entries = block->size / lfp_data_size; @@ -334,4 +346,6 @@ static void dump_lvds_data(void) for (i = 0; i < num_entries; i++) { - struct bdb_lvds_lfp_data_entry *lfp_data = &lvds_data->data[i]; - uint8_t *timing_data = (uint8_t *)&lfp_data->dvo_timing; + uint8_t *lfp_data_ptr = (uint8_t *)lvds_data->data + lfp_data_size * i; + uint8_t *timing_data = lfp_data_ptr + dvo_offset; + struct bdb_lvds_lfp_data_entry *lfp_data = + (struct bdb_lvds_flp_data_entry *)lfp_data_ptr; char marker; diff --git a/src/i830_bios.c b/src/i830_bios.c index 60c307c2..f4a20053 100644 --- a/src/i830_bios.c +++ b/src/i830_bios.c @@ -125,2 +125,3 @@ parse_integrated_panel_data(I830Ptr pI830, struct bdb_header *bdb) int lfp_data_size; + int dvo_offset; @@ -148,6 +149,7 @@ parse_integrated_panel_data(I830Ptr pI830, struct bdb_header *bdb) lvds_lfp_data_ptrs->ptr[0].dvo_timing_offset; + dvo_offset = lvds_lfp_data_ptrs->ptr[0].dvo_timing_offset - + lvds_lfp_data_ptrs->ptr[0].fp_timing_offset; entry = (struct bdb_lvds_lfp_data_entry *)((uint8_t *)lvds_data->data + (lfp_data_size * lvds_options->panel_type)); - timing_ptr = (unsigned char *)&entry->dvo_timing; - + timing_ptr = (unsigned char *)entry + dvo_offset; if (pI830->skip_panel_detect) |