diff --git a/man/intel.man b/man/intel.man index 8419f2d..115b35a 100644 --- a/man/intel.man +++ b/man/intel.man @@ -222,6 +222,12 @@ information. Enable XvMC driver. Current support MPEG2 MC on 915/945 and G33 series. User should provide absolute path to libIntelXvMC.so in XvMCConfig file. Default: Disabled. +.TP +.BI "Option \*qForceSDVODetect\*q \*q" boolean \*q +Instead of depending on SDVO detect status bit to initialize SDVO outputs, +this option trys to ignore that status bit and try to probe on all SDVO +ports anyway. Try this if some output is not detected on your ADD2 card. +Use of this option will slow down your startup time. Default: Disabled. .SH OUTPUT CONFIGURATION On 830M and better chipsets, the driver supports runtime configuration of diff --git a/src/i830.h b/src/i830.h index 5fb7e24..491dfd0 100644 --- a/src/i830.h +++ b/src/i830.h @@ -714,6 +714,10 @@ typedef struct _I830Rec { /** Enables logging of debug output related to mode switching. */ Bool debug_modes; unsigned int quirk_flag; + + /* User option to ignore SDVO detect bit status, in case some outputs + not detected on SDVO, so let driver try its best. */ + Bool force_sdvo_detect; } I830Rec; #define I830PTR(p) ((I830Ptr)((p)->driverPrivate)) diff --git a/src/i830_driver.c b/src/i830_driver.c index 389775f..ce7b623 100644 --- a/src/i830_driver.c +++ b/src/i830_driver.c @@ -316,6 +316,7 @@ typedef enum { #ifdef INTEL_XVMC OPTION_XVMC, #endif + OPTION_FORCE_SDVO_DETECT, } I830Opts; static OptionInfoRec I830Options[] = { @@ -342,6 +343,7 @@ static OptionInfoRec I830Options[] = { #ifdef INTEL_XVMC {OPTION_XVMC, "XvMC", OPTV_BOOLEAN, {0}, TRUE}, #endif + {OPTION_FORCE_SDVO_DETECT, "ForceSDVODetect", OPTV_BOOLEAN, {0}, FALSE}, {-1, NULL, OPTV_NONE, {0}, FALSE} }; /* *INDENT-ON* */ @@ -915,14 +917,14 @@ I830SetupOutputs(ScrnInfoPtr pScrn) i830_lvds_init(pScrn); if (IS_I9XX(pI830)) { - if (INREG(SDVOB) & SDVO_DETECTED) { + if ((INREG(SDVOB) & SDVO_DETECTED) || pI830->force_sdvo_detect) { Bool found = i830_sdvo_init(pScrn, SDVOB); if (!found && SUPPORTS_INTEGRATED_HDMI(pI830)) i830_hdmi_init(pScrn, SDVOB); } - if (INREG(SDVOC) & SDVO_DETECTED) { + if ((INREG(SDVOC) & SDVO_DETECTED) || pI830->force_sdvo_detect) { Bool found = i830_sdvo_init(pScrn, SDVOC); if (!found && SUPPORTS_INTEGRATED_HDMI(pI830)) @@ -1464,6 +1466,12 @@ I830GetEarlyOptions(ScrnInfoPtr pScrn) if (xf86ReturnOptValBool(pI830->Options, OPTION_FORCEENABLEPIPEA, FALSE)) pI830->quirk_flag |= QUIRK_PIPEA_FORCE; + if (xf86ReturnOptValBool(pI830->Options, OPTION_FORCE_SDVO_DETECT, FALSE)) { + pI830->force_sdvo_detect = TRUE; + } else { + pI830->force_sdvo_detect = FALSE; + } + return TRUE; }