diff options
author | Zhenyu Wang <zhenyu.z.wang@intel.com> | 2009-02-25 09:57:00 +0800 |
---|---|---|
committer | Zhenyu Wang <zhenyu.z.wang@intel.com> | 2009-02-25 09:57:00 +0800 |
commit | f6d8ae69b0f97e696c142f06c8038f336ed024f9 (patch) | |
tree | e3e0cd352970e5cb2d00fec1ccf83ab05e441fa6 /src | |
parent | 8718551f14e064b461e80a583597f0ea9fb8ca9f (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.h | 1 | ||||
-rw-r--r-- | src/i830_bios.c | 18 | ||||
-rw-r--r-- | src/i830_lvds.c | 7 |
3 files changed, 26 insertions, 0 deletions
@@ -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; |