From 9fc4ea5c00dfb91ebff893fb5092e768155cc2e2 Mon Sep 17 00:00:00 2001 From: Jesse Barnes Date: Fri, 23 May 2008 18:42:47 -0700 Subject: i915: do a better job of parsing VBIOS data Add code to get panel modes from the VBIOS if present and check whether certain outputs exist. Should make our display detection code a little more robust. --- shared-core/i915_drv.h | 26 +++++++++++++++----------- shared-core/i915_init.c | 4 ++-- 2 files changed, 17 insertions(+), 13 deletions(-) (limited to 'shared-core') diff --git a/shared-core/i915_drv.h b/shared-core/i915_drv.h index 84cc60f3..c5e22f7c 100644 --- a/shared-core/i915_drv.h +++ b/shared-core/i915_drv.h @@ -174,14 +174,17 @@ struct drm_i915_private { int backlight_duty_cycle; /* restore backlight to this value */ bool panel_wants_dither; struct drm_display_mode *panel_fixed_mode; + struct drm_display_mode *vbt_mode; /* if any */ /* DRI2 sarea */ struct drm_buffer_object *sarea_bo; struct drm_bo_kmap_obj sarea_kmap; - /* BIOS data */ - struct vbt_header *vbt; - struct bdb_header *bdb; + /* Feature bits from the VBIOS */ + int int_tv_support:1; + int lvds_dither:1; + int lvds_vbt:1; + int int_crt_support:1; /* Register state */ u8 saveLBB; @@ -1680,15 +1683,16 @@ extern int i915_wait_ring(struct drm_device * dev, int n, const char *caller); #define DSPATILEOFF 0x701A4 /* 965+ only */ /* VBIOS flags */ -#define SWF0 0x71410 -#define SWF1 0x71414 -#define SWF2 0x71418 -#define SWF3 0x7141c -#define SWF4 0x71420 -#define SWF5 0x71424 -#define SWF6 0x71428 - +#define SWF00 0x71410 +#define SWF01 0x71414 +#define SWF02 0x71418 +#define SWF03 0x7141c +#define SWF04 0x71420 +#define SWF05 0x71424 +#define SWF06 0x71428 #define SWF10 0x70410 +#define SWF11 0x70414 +#define SWF14 0x71420 #define SWF30 0x72414 #define SWF31 0x72418 #define SWF32 0x7241c diff --git a/shared-core/i915_init.c b/shared-core/i915_init.c index f5fe5ba4..bda15e01 100644 --- a/shared-core/i915_init.c +++ b/shared-core/i915_init.c @@ -224,9 +224,9 @@ int i915_load_modeset_init(struct drm_device *dev) goto destroy_hws; } - ret = intel_find_bios(dev); + ret = intel_init_bios(dev); if (ret) { - DRM_ERROR("failed to find VBT\n"); + DRM_ERROR("failed to find VBIOS tables\n"); ret = -ENODEV; goto destroy_wq; } -- cgit v1.2.3