diff options
-rw-r--r-- | src/radeon_driver.c | 52 | ||||
-rw-r--r-- | src/radeon_output.c | 4 |
2 files changed, 45 insertions, 11 deletions
diff --git a/src/radeon_driver.c b/src/radeon_driver.c index 176e80d6..d10d81be 100644 --- a/src/radeon_driver.c +++ b/src/radeon_driver.c @@ -2653,6 +2653,7 @@ static Bool RADEONPreInitControllers(ScrnInfoPtr pScrn) RADEONInfoPtr info = RADEONPTR(pScrn); int i; int mask; + int found = 0; if (!info->IsPrimary && !info->IsSecondary) mask = 3; @@ -2677,17 +2678,50 @@ static Bool RADEONPreInitControllers(ScrnInfoPtr pScrn) RADEONPrintPortMap(pScrn); - for (i = 0; i < config->num_output; i++) - { - xf86OutputPtr output = config->output[i]; + for (i = 0; i < config->num_output; i++) { + xf86OutputPtr output = config->output[i]; - output->status = (*output->funcs->detect) (output); - ErrorF("finished output detect: %d\n", i); - if (info->IsPrimary || info->IsSecondary) { - if (output->status != XF86OutputStatusConnected) - return FALSE; - } + output->status = (*output->funcs->detect) (output); + ErrorF("finished output detect: %d\n", i); + if (info->IsPrimary || info->IsSecondary) { + if (output->status != XF86OutputStatusConnected) + return FALSE; + } + if (output->status != XF86OutputStatusDisconnected) + found++; + } + + if (!found) { + /* nothing connected, light up some defaults so the server comes up */ + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "No connected devices found!\n"); + for (i = 0; i < config->num_output; i++) { + xf86OutputPtr output = config->output[i]; + RADEONOutputPrivatePtr radeon_output = output->driver_private; + + if (info->IsMobility) { + if (radeon_output->type == OUTPUT_LVDS) { + radeon_output->MonType = MT_LCD; + output->status = XF86OutputStatusConnected; + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "Using LVDS default\n"); + break; + } + } else { + if (radeon_output->type == OUTPUT_VGA || + radeon_output->type == OUTPUT_DVI_I) { + radeon_output->MonType = MT_CRT; + output->status = XF86OutputStatusUnknown; + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "Using VGA default\n"); + break; + } else if (radeon_output->type == OUTPUT_DVI_D) { + radeon_output->MonType = MT_DFP; + output->status = XF86OutputStatusUnknown; + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "Using DVI default\n"); + break; + } + } + } } + ErrorF("finished all detect\n"); return TRUE; } diff --git a/src/radeon_output.c b/src/radeon_output.c index b9c81652..b62eeaf7 100644 --- a/src/radeon_output.c +++ b/src/radeon_output.c @@ -626,7 +626,6 @@ static xf86OutputStatus radeon_detect(xf86OutputPtr output) { ScrnInfoPtr pScrn = output->scrn; - RADEONInfoPtr info = RADEONPTR(pScrn); RADEONOutputPrivatePtr radeon_output = output->driver_private; Bool connected = TRUE; @@ -675,6 +674,7 @@ radeon_detect(xf86OutputPtr output) break; } +#if 0 if (!connected) { /* default to unknown for flaky chips/connectors * so we can get something on the screen @@ -690,6 +690,7 @@ radeon_detect(xf86OutputPtr output) return XF86OutputStatusUnknown; } } +#endif if (connected) return XF86OutputStatusConnected; @@ -755,7 +756,6 @@ radeon_create_resources(xf86OutputPtr output) INT32 range[2]; int data, err; const char *s; - char *optstr; /* backlight control */ if (radeon_output->type == OUTPUT_LVDS) { |