From f6d8ae69b0f97e696c142f06c8038f336ed024f9 Mon Sep 17 00:00:00 2001 From: Zhenyu Wang Date: Wed, 25 Feb 2009 09:57:00 +0800 Subject: 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. --- src/i830.h | 1 + src/i830_bios.c | 18 ++++++++++++++++++ src/i830_lvds.c | 7 +++++++ 3 files changed, 26 insertions(+) (limited to 'src') 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; -- cgit v1.2.3