summaryrefslogtreecommitdiff
path: root/src/radeon_modes.c
diff options
context:
space:
mode:
authorAlex Deucher <alex@botch2.(none)>2007-08-27 23:44:13 -0400
committerAlex Deucher <alex@botch2.(none)>2007-08-27 23:44:13 -0400
commit42839fb5a8584196e7b18375bff6c426ed0347d9 (patch)
tree90ecc6e2c985a8576b19d8b856401aa2df73426f /src/radeon_modes.c
parenta5a1055d64ab4fa16bfb03a412ae6c4fe69ff65d (diff)
RADEON: make load detection an output attribute for analog outputs
Since TV/VGA/DVI-I can share the TV DAC, we often get false detection of all inputs that share that DAC. Make load detection an output attribute. Enabled by default on primary dac and on cards where tv dac is (usually) dedicated to tv (non-IGP mobilities).
Diffstat (limited to 'src/radeon_modes.c')
-rw-r--r--src/radeon_modes.c60
1 files changed, 30 insertions, 30 deletions
diff --git a/src/radeon_modes.c b/src/radeon_modes.c
index a5e1cc4d..687e3888 100644
--- a/src/radeon_modes.c
+++ b/src/radeon_modes.c
@@ -289,47 +289,47 @@ RADEONProbeOutputModes(xf86OutputPtr output)
#endif
ErrorF("in RADEONProbeOutputModes\n");
-
- if (radeon_output->type == OUTPUT_DVI || radeon_output->type == OUTPUT_VGA) {
- edid_mon = xf86OutputGetEDID (output, radeon_output->pI2CBus);
- xf86OutputSetEDID (output, edid_mon);
+ if (output->status == XF86OutputStatusConnected) {
+ if (radeon_output->type == OUTPUT_DVI || radeon_output->type == OUTPUT_VGA) {
+ edid_mon = xf86OutputGetEDID (output, radeon_output->pI2CBus);
+ xf86OutputSetEDID (output, edid_mon);
- modes = xf86OutputGetEDIDModes (output);
- return modes;
- }
- if (radeon_output->type == OUTPUT_STV || radeon_output->type == OUTPUT_CTV) {
- modes = RADEONTVModes(output);
- return modes;
- }
- if (radeon_output->type == OUTPUT_LVDS) {
- /* okay we got DDC info */
- if (output->MonInfo) {
- /* Debug info for now, at least */
- xf86DrvMsg(pScrn->scrnIndex, X_INFO, "EDID for output %d\n", radeon_output->num);
- xf86PrintEDID(output->MonInfo);
+ modes = xf86OutputGetEDIDModes (output);
+ return modes;
+ }
+ if (radeon_output->type == OUTPUT_STV || radeon_output->type == OUTPUT_CTV) {
+ modes = RADEONTVModes(output);
+ return modes;
+ }
+ if (radeon_output->type == OUTPUT_LVDS) {
+ /* okay we got DDC info */
+ if (output->MonInfo) {
+ /* Debug info for now, at least */
+ xf86DrvMsg(pScrn->scrnIndex, X_INFO, "EDID for output %d\n", radeon_output->num);
+ xf86PrintEDID(output->MonInfo);
- modes = xf86DDCGetModes(pScrn->scrnIndex, output->MonInfo);
+ modes = xf86DDCGetModes(pScrn->scrnIndex, output->MonInfo);
- for (mode = modes; mode != NULL; mode = mode->next) {
- if (mode->Flags & V_DBLSCAN) {
- if ((mode->CrtcHDisplay >= 1024) || (mode->CrtcVDisplay >= 768))
- mode->status = MODE_CLOCK_RANGE;
+ for (mode = modes; mode != NULL; mode = mode->next) {
+ if (mode->Flags & V_DBLSCAN) {
+ if ((mode->CrtcHDisplay >= 1024) || (mode->CrtcVDisplay >= 768))
+ mode->status = MODE_CLOCK_RANGE;
+ }
}
- }
- xf86PruneInvalidModes(pScrn, &modes, TRUE);
+ xf86PruneInvalidModes(pScrn, &modes, TRUE);
- /* do some physcial size stuff */
- }
+ /* do some physcial size stuff */
+ }
- if (modes == NULL) {
- RADEONValidateFPModes(output, pScrn->display->modes, &modes);
+ if (modes == NULL) {
+ RADEONValidateFPModes(output, pScrn->display->modes, &modes);
+ }
}
}
if (modes) {
xf86ValidateModesUserConfig(pScrn, modes);
- xf86PruneInvalidModes(pScrn, &modes,
- FALSE);
+ xf86PruneInvalidModes(pScrn, &modes, FALSE);
}
return modes;