diff options
Diffstat (limited to 'src/i830_driver.c')
-rw-r--r-- | src/i830_driver.c | 35 |
1 files changed, 24 insertions, 11 deletions
diff --git a/src/i830_driver.c b/src/i830_driver.c index 8464b39f..75ea480c 100644 --- a/src/i830_driver.c +++ b/src/i830_driver.c @@ -1231,7 +1231,7 @@ I830BIOSPreInit(ScrnInfoPtr pScrn, int flags) int i, n; char *s; pointer pVBEModule = NULL; - Bool enable, has_lvds; + Bool enable, has_lvds, is_apple_945gm = FALSE; const char *chipname; unsigned int ver; char v[5]; @@ -1672,16 +1672,15 @@ I830BIOSPreInit(ScrnInfoPtr pScrn, int flags) if (!i830GetLVDSInfoFromBIOS(pScrn)) has_lvds = FALSE; - /* If the panel sequencing, status, and control registers are all zero, - * assume there's no panel attached. This is the case on the Mac mini, - * which is an i945GM but has no LVDS. If we tried to power something on - * with zeroed panel sequencing registers, it probably wouldn't be a good - * thing anyway. - */ - if (INREG(PP_STATUS) == 0 && INREG(PP_CONTROL) == 0 && - INREG(LVDSPP_ON) == 0 && INREG(LVDSPP_OFF) == 0) - { - has_lvds = FALSE; + /* Blacklist machines with known broken BIOSes */ + if (pI830->PciInfo->chipType == PCI_CHIP_I945_GM) { + if ((pI830->PciInfo->subsysVendor == 0xa0a0) && + (pI830->PciInfo->subsysCard == 0x0589)) /* aopen mini pc */ + has_lvds = FALSE; + + if ((pI830->PciInfo->subsysVendor == 0x8086) && + (pI830->PciInfo->subsysCard == 0x7270)) /* mini, macbook pro... */ + is_apple_945gm = TRUE; } if ((s = xf86GetOptValString(pI830->Options, OPTION_MONITOR_LAYOUT)) && @@ -1772,6 +1771,20 @@ I830BIOSPreInit(ScrnInfoPtr pScrn, int flags) pI830->specifiedMonitor = TRUE; } else if (I830IsPrimary(pScrn)) { /* Choose a default set of outputs to use based on what we've detected. */ + + /* + * Apple hardware is out to get us. The macbook pro has a real LVDS + * panel, but the mac mini does not, and they have the same device IDs. + * We'll distinguish by panel size, on the assumption that Apple isn't + * about to make any machines with an 800x600 display. + */ + if (is_apple_945gm && pI830->PanelXRes == 800 && pI830->PanelYRes == 600) + { + xf86DrvMsg(pScrn->scrnIndex, X_INFO, + "Suspected Mac Mini, ignoring the LFP\n"); + has_lvds = FALSE; + } + if (has_lvds) { pI830->MonType2 |= PIPE_LFP; } |