diff options
-rw-r--r-- | man/intel.man | 17 | ||||
-rw-r--r-- | src/i830.h | 2 | ||||
-rw-r--r-- | src/i830_display.c | 19 | ||||
-rw-r--r-- | src/i830_driver.c | 8 |
4 files changed, 42 insertions, 4 deletions
diff --git a/man/intel.man b/man/intel.man index 69af25e8..8a8b7a09 100644 --- a/man/intel.man +++ b/man/intel.man @@ -183,6 +183,23 @@ causing a crash. If you find that your platform needs this option, please file a bug against xf86-video-intel at http://bugs.freedesktop.org which includes the output of 'lspci -v' and 'lspci -vn'. .TP +.BI "Option \*qLVDS24Bit\*q \*q" boolean \*q +Specify 24 bit pixel format (i.e. 8 bits per color) to be used for the +LVDS output. Some newer LCD panels expect pixels to be formatted and +sent as 8 bits per color channel instead of the more common 6 bits per +color channel. Set this option to true to enable the newer format. +Note that this concept is entirely different and independent from the +frame buffer color depth - which is still controlled in the usual way +within the X server. This option instead selects the physical format +/ sequencing of the digital bits sent to the display. Setting the +frame buffer color depth is really a matter of preference by the user, +while setting the pixel format here is a requirement of the connected +hardware. Leaving this unset implies the default value of false, +which is almost always going to be right choice. If your +LVDS-connected display on the other hand is extremely washed out +(e.g. white on a lighter white), trying this option might clear the +problem. +.TP .BI "Option \*qXvMC\*q \*q" boolean \*q Enable XvMC driver. Current support MPEG2 MC on 915/945 and G33 series. User should provide absolute path to libIntelXvMC.so in XvMCConfig file. @@ -548,6 +548,8 @@ typedef struct _I830Rec { /* Broken-out options. */ OptionInfoPtr Options; + Bool lvds_24_bit_mode; + Bool StolenOnly; Bool swfSaved; diff --git a/src/i830_display.c b/src/i830_display.c index 4f3f8ef9..4091e792 100644 --- a/src/i830_display.c +++ b/src/i830_display.c @@ -1289,10 +1289,21 @@ i830_crtc_mode_set(xf86CrtcPtr crtc, DisplayModePtr mode, else lvds &= ~(LVDS_B0B3_POWER_UP | LVDS_CLKB_POWER_UP); - /* It would be nice to set 24 vs 18-bit mode (LVDS_A3_POWER_UP) - * appropriately here, but we need to look more thoroughly into how - * panels behave in the two modes. - */ + if (pI830->lvds_24_bit_mode) { + /* Option set which requests 24-bit mode + * (LVDS_A3_POWER_UP, as opposed to 18-bit mode) here; we + * still need to look more thoroughly into how panels + * behave in the two modes. This option enables that + * experimentation. + */ + xf86DrvMsg(pScrn->scrnIndex, X_INFO, + "Selecting less common 24 bit TMDS pixel format.\n"); + lvds |= LVDS_A3_POWER_UP; + lvds |= LVDS_DATA_FORMAT_DOT_ONE; + } else { + xf86DrvMsg(pScrn->scrnIndex, X_INFO, + "Selecting standard 18 bit TMDS pixel format.\n"); + } /* Enable dithering if we're in 18-bit mode. */ if (IS_I965G(pI830)) diff --git a/src/i830_driver.c b/src/i830_driver.c index a19c8ebf..66153b76 100644 --- a/src/i830_driver.c +++ b/src/i830_driver.c @@ -296,6 +296,7 @@ typedef enum { OPTION_COLOR_KEY, OPTION_CHECKDEVICES, OPTION_MODEDEBUG, + OPTION_LVDS24BITMODE, OPTION_FBC, OPTION_TILING, #ifdef XF86DRI_MM @@ -322,6 +323,7 @@ static OptionInfoRec I830Options[] = { {OPTION_VIDEO_KEY, "VideoKey", OPTV_INTEGER, {0}, FALSE}, {OPTION_CHECKDEVICES, "CheckDevices",OPTV_BOOLEAN, {0}, FALSE}, {OPTION_MODEDEBUG, "ModeDebug", OPTV_BOOLEAN, {0}, FALSE}, + {OPTION_LVDS24BITMODE, "LVDS24Bit", OPTV_BOOLEAN, {0}, FALSE}, {OPTION_FBC, "FramebufferCompression", OPTV_BOOLEAN, {0}, TRUE}, {OPTION_TILING, "Tiling", OPTV_BOOLEAN, {0}, TRUE}, #ifdef XF86DRI_MM @@ -1398,6 +1400,12 @@ I830PreInit(ScrnInfoPtr pScrn, int flags) pI830->debug_modes = FALSE; } + if (xf86ReturnOptValBool(pI830->Options, OPTION_LVDS24BITMODE, FALSE)) { + pI830->lvds_24_bit_mode = TRUE; + } else { + pI830->lvds_24_bit_mode = FALSE; + } + if (xf86ReturnOptValBool(pI830->Options, OPTION_FORCEENABLEPIPEA, FALSE)) pI830->quirk_flag |= QUIRK_PIPEA_FORCE; |