diff options
author | Eric Anholt <eric@anholt.net> | 2006-11-28 10:31:40 -0800 |
---|---|---|
committer | Eric Anholt <eric@anholt.net> | 2006-11-28 11:13:43 -0800 |
commit | f62ac3ec39c6593df476985c630e499864c19c72 (patch) | |
tree | 7fd522aad33b74a0c7e435e985db186310d9e707 /hw/xfree86/ddc | |
parent | fbd09443385c533416fa530399d54f130afaf985 (diff) |
Separate DDC mode list creation from MonPtr creation.
This will be used by the intel driver, and likely other RandR 1.2 drivers.
Diffstat (limited to 'hw/xfree86/ddc')
-rw-r--r-- | hw/xfree86/ddc/edid_modes.c | 66 | ||||
-rw-r--r-- | hw/xfree86/ddc/xf86DDC.h | 2 |
2 files changed, 45 insertions, 23 deletions
diff --git a/hw/xfree86/ddc/edid_modes.c b/hw/xfree86/ddc/edid_modes.c index 25f95ca24..cfc8ddc13 100644 --- a/hw/xfree86/ddc/edid_modes.c +++ b/hw/xfree86/ddc/edid_modes.c @@ -204,6 +204,46 @@ DDCGuessRangesFromModes(int scrnIndex, MonPtr Monitor, DisplayModePtr Modes) } } +DisplayModePtr +xf86DDCGetModes(int scrnIndex, xf86MonPtr DDC) +{ + int preferred, i; + DisplayModePtr Modes = NULL, Mode; + + preferred = PREFERRED_TIMING_MODE(DDC->features.msc); + + /* Add established timings */ + Mode = DDCModesFromEstablished(scrnIndex, &DDC->timings1); + Modes = xf86ModesAdd(Modes, Mode); + + /* Add standard timings */ + Mode = DDCModesFromStandardTiming(scrnIndex, DDC->timings2); + Modes = xf86ModesAdd(Modes, Mode); + + for (i = 0; i < DET_TIMINGS; i++) { + struct detailed_monitor_section *det_mon = &DDC->det_mon[i]; + + switch (det_mon->type) { + case DT: + Mode = DDCModeFromDetailedTiming(scrnIndex, + &det_mon->section.d_timings, + preferred); + preferred = 0; + Modes = xf86ModesAdd(Modes, Mode); + break; + case DS_STD_TIMINGS: + Mode = DDCModesFromStandardTiming(scrnIndex, + det_mon->section.std_t); + Modes = xf86ModesAdd(Modes, Mode); + break; + default: + break; + } + } + + return Modes; +} + /* * Fill out MonPtr with xf86MonPtr information. */ @@ -213,15 +253,12 @@ xf86DDCMonitorSet(int scrnIndex, MonPtr Monitor, xf86MonPtr DDC) DisplayModePtr Modes = NULL, Mode; int i, clock; Bool have_hsync = FALSE, have_vrefresh = FALSE; - int preferred; if (!Monitor || !DDC) return; Monitor->DDC = DDC; - preferred = PREFERRED_TIMING_MODE(DDC->features.msc); - Monitor->widthmm = 10 * DDC->features.hsize; Monitor->heightmm = 10 * DDC->features.vsize; @@ -230,20 +267,14 @@ xf86DDCMonitorSet(int scrnIndex, MonPtr Monitor, xf86MonPtr DDC) Monitor->reducedblanking = TRUE; /* Allow the user to also enable this through config */ - /* Add established timings */ - Mode = DDCModesFromEstablished(scrnIndex, &DDC->timings1); - Modes = xf86ModesAdd(Modes, Mode); - - /* Add standard timings */ - Mode = DDCModesFromStandardTiming(scrnIndex, DDC->timings2); - Modes = xf86ModesAdd(Modes, Mode); + Modes = xf86DDCGetModes(scrnIndex, DDC); /* Skip EDID ranges if they were specified in the config file */ have_hsync = (Monitor->nHsync != 0); have_vrefresh = (Monitor->nVrefresh != 0); /* Go through the detailed monitor sections */ - for (i = 0; i < DET_TIMINGS; i++) + for (i = 0; i < DET_TIMINGS; i++) { switch (DDC->det_mon[i].type) { case DS_RANGES: if (!have_hsync) { @@ -279,21 +310,10 @@ xf86DDCMonitorSet(int scrnIndex, MonPtr Monitor, xf86MonPtr DDC) Monitor->maxPixClock = clock; break; - case DT: - Mode = DDCModeFromDetailedTiming(scrnIndex, - &DDC->det_mon[i].section.d_timings, - preferred); - preferred = 0; - Modes = xf86ModesAdd(Modes, Mode); - break; - case DS_STD_TIMINGS: - Mode = DDCModesFromStandardTiming(scrnIndex, - DDC->det_mon[i].section.std_t); - Modes = xf86ModesAdd(Modes, Mode); - break; default: break; } + } if (Modes) { /* Print Modes */ diff --git a/hw/xfree86/ddc/xf86DDC.h b/hw/xfree86/ddc/xf86DDC.h index 5def97a81..77994715e 100644 --- a/hw/xfree86/ddc/xf86DDC.h +++ b/hw/xfree86/ddc/xf86DDC.h @@ -59,6 +59,8 @@ extern void xf86print_vdif( xf86vdifPtr v ); +DisplayModePtr xf86DDCGetModes(int scrnIndex, xf86MonPtr DDC); + #endif |