summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tools/intel_bios.h28
-rw-r--r--tools/intel_vbt_decode.c9
-rw-r--r--tools/intel_vbt_defs.h31
3 files changed, 37 insertions, 31 deletions
diff --git a/tools/intel_bios.h b/tools/intel_bios.h
index 65e64ccb..8d1bf7ae 100644
--- a/tools/intel_bios.h
+++ b/tools/intel_bios.h
@@ -155,34 +155,6 @@ struct bdb_child_devices {
struct child_device_config children[DEVICE_CHILD_SIZE];
} __attribute__ ((packed));
-struct lvds_dvo_timing {
- uint16_t clock; /**< In 10khz */
- uint8_t hactive_lo;
- uint8_t hblank_lo;
- uint8_t hblank_hi:4;
- uint8_t hactive_hi:4;
- uint8_t vactive_lo;
- uint8_t vblank_lo;
- uint8_t vblank_hi:4;
- uint8_t vactive_hi:4;
- uint8_t hsync_off_lo;
- uint8_t hsync_pulse_width;
- uint8_t vsync_pulse_width:4;
- uint8_t vsync_off:4;
- uint8_t rsvd0:6;
- uint8_t hsync_off_hi:2;
- uint8_t h_image;
- uint8_t v_image;
- uint8_t max_hv;
- uint8_t h_border;
- uint8_t v_border;
- uint8_t rsvd1:3;
- uint8_t digital:2;
- uint8_t vsync_positive:1;
- uint8_t hsync_positive:1;
- uint8_t rsvd2:1;
-} __attribute__((packed));
-
struct blc_struct {
uint8_t inverter_type:2;
uint8_t inverter_polarity:1; /* 1 means inverted (0 = max brightness) */
diff --git a/tools/intel_vbt_decode.c b/tools/intel_vbt_decode.c
index 836a9783..2e4eba29 100644
--- a/tools/intel_vbt_decode.c
+++ b/tools/intel_vbt_decode.c
@@ -950,7 +950,8 @@ print_detail_timing_data(const struct lvds_dvo_timing *dvo_timing)
display = (dvo_timing->hactive_hi << 8) | dvo_timing->hactive_lo;
sync_start = display +
((dvo_timing->hsync_off_hi << 8) | dvo_timing->hsync_off_lo);
- sync_end = sync_start + dvo_timing->hsync_pulse_width;
+ sync_end = sync_start + ((dvo_timing->hsync_pulse_width_hi << 8) |
+ dvo_timing->hsync_pulse_width_lo);
total = display +
((dvo_timing->hblank_hi << 8) | dvo_timing->hblank_lo);
printf("\thdisplay: %d\n", display);
@@ -959,8 +960,10 @@ print_detail_timing_data(const struct lvds_dvo_timing *dvo_timing)
printf("\thtotal: %d\n", total);
display = (dvo_timing->vactive_hi << 8) | dvo_timing->vactive_lo;
- sync_start = display + dvo_timing->vsync_off;
- sync_end = sync_start + dvo_timing->vsync_pulse_width;
+ sync_start = display + ((dvo_timing->vsync_off_hi << 8) |
+ dvo_timing->vsync_off_lo);
+ sync_end = sync_start + ((dvo_timing->vsync_pulse_width_hi << 8) |
+ dvo_timing->vsync_pulse_width_lo);
total = display +
((dvo_timing->vblank_hi << 8) | dvo_timing->vblank_lo);
printf("\tvdisplay: %d\n", display);
diff --git a/tools/intel_vbt_defs.h b/tools/intel_vbt_defs.h
index 5481304d..8bdb2292 100644
--- a/tools/intel_vbt_defs.h
+++ b/tools/intel_vbt_defs.h
@@ -379,6 +379,37 @@ struct lvds_fp_timing {
u16 terminator;
} __packed;
+struct lvds_dvo_timing {
+ u16 clock; /**< In 10khz */
+ u8 hactive_lo;
+ u8 hblank_lo;
+ u8 hblank_hi:4;
+ u8 hactive_hi:4;
+ u8 vactive_lo;
+ u8 vblank_lo;
+ u8 vblank_hi:4;
+ u8 vactive_hi:4;
+ u8 hsync_off_lo;
+ u8 hsync_pulse_width_lo;
+ u8 vsync_pulse_width_lo:4;
+ u8 vsync_off_lo:4;
+ u8 vsync_pulse_width_hi:2;
+ u8 vsync_off_hi:2;
+ u8 hsync_pulse_width_hi:2;
+ u8 hsync_off_hi:2;
+ u8 himage_lo;
+ u8 vimage_lo;
+ u8 vimage_hi:4;
+ u8 himage_hi:4;
+ u8 h_border;
+ u8 v_border;
+ u8 rsvd1:3;
+ u8 digital:2;
+ u8 vsync_positive:1;
+ u8 hsync_positive:1;
+ u8 non_interlaced:1;
+} __packed;
+
struct lvds_pnp_id {
u16 mfg_name;
u16 product_code;