summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/bios_reader/bios_reader.c20
-rw-r--r--src/i830_bios.c6
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)