summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorZhenyu Wang <zhenyu.z.wang@intel.com>2009-02-25 09:57:00 +0800
committerZhenyu Wang <zhenyu.z.wang@intel.com>2009-02-25 09:57:00 +0800
commitf6d8ae69b0f97e696c142f06c8038f336ed024f9 (patch)
treee3e0cd352970e5cb2d00fec1ccf83ab05e441fa6 /src
parent8718551f14e064b461e80a583597f0ea9fb8ca9f (diff)
Use LVDS config in Driver feature BDB for integrated LVDS check
The LVDS config bits in VBT driver feature block is used by vendor to identify the board implement of integrated LVDS/eDP or SDVO LVDS. And video bios uses these bits for LVDS enabling or not. So check these bits for integrated LVDS might eliminate more quirks.
Diffstat (limited to 'src')
-rw-r--r--src/i830.h1
-rw-r--r--src/i830_bios.c18
-rw-r--r--src/i830_lvds.c7
3 files changed, 26 insertions, 0 deletions
diff --git a/src/i830.h b/src/i830.h
index 7904b9fc..eb686ae8 100644
--- a/src/i830.h
+++ b/src/i830.h
@@ -619,6 +619,7 @@ typedef struct _I830Rec {
Bool lvds_dither;
DisplayModePtr lvds_fixed_mode;
Bool skip_panel_detect;
+ Bool integrated_lvds; /* LVDS config from driver feature BDB */
Bool tv_present; /* TV connector present (from VBIOS) */
diff --git a/src/i830_bios.c b/src/i830_bios.c
index 6baacd48..a990ebec 100644
--- a/src/i830_bios.c
+++ b/src/i830_bios.c
@@ -168,6 +168,23 @@ parse_general_features(I830Ptr pI830, struct bdb_header *bdb)
}
}
+static void
+parse_driver_feature(I830Ptr pI830, struct bdb_header *bdb)
+{
+ struct bdb_driver_feature *feature;
+
+ /* For mobile chip, set default as true */
+ if (IS_MOBILE(pI830))
+ pI830->integrated_lvds = TRUE;
+
+ feature = find_section(bdb, BDB_DRIVER_FEATURES);
+ if (!feature)
+ return;
+
+ if (feature->lvds_config != BDB_DRIVER_INT_LVDS)
+ pI830->integrated_lvds = FALSE;
+}
+
#define INTEL_VBIOS_SIZE (64 * 1024) /* XXX */
/**
@@ -246,6 +263,7 @@ i830_bios_init(ScrnInfoPtr pScrn)
parse_general_features(pI830, bdb);
parse_panel_data(pI830, bdb);
+ parse_driver_feature(pI830, bdb);
xfree(bios);
diff --git a/src/i830_lvds.c b/src/i830_lvds.c
index 027bb5de..63533cdc 100644
--- a/src/i830_lvds.c
+++ b/src/i830_lvds.c
@@ -1415,6 +1415,13 @@ i830_lvds_init(ScrnInfoPtr pScrn)
DisplayModePtr lvds_ddc_mode = NULL;
struct i830_lvds_priv *dev_priv;
+ if (!pI830->integrated_lvds) {
+ if (pI830->debug_modes)
+ xf86DrvMsg(pScrn->scrnIndex, X_INFO,
+ "Skipping LVDS from driver feature BDB's LVDS config info.\n");
+ return;
+ }
+
if (pI830->quirk_flag & QUIRK_IGNORE_LVDS)
return;