Separate DDC mode list creation from MonPtr creation.
This will be used by the intel driver, and likely other RandR 1.2 drivers.
This commit is contained in:
parent
fbd0944338
commit
f62ac3ec39
|
@ -204,32 +204,14 @@ DDCGuessRangesFromModes(int scrnIndex, MonPtr Monitor, DisplayModePtr Modes)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
DisplayModePtr
|
||||||
* Fill out MonPtr with xf86MonPtr information.
|
xf86DDCGetModes(int scrnIndex, xf86MonPtr DDC)
|
||||||
*/
|
|
||||||
void
|
|
||||||
xf86DDCMonitorSet(int scrnIndex, MonPtr Monitor, xf86MonPtr DDC)
|
|
||||||
{
|
{
|
||||||
|
int preferred, i;
|
||||||
DisplayModePtr Modes = NULL, Mode;
|
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);
|
preferred = PREFERRED_TIMING_MODE(DDC->features.msc);
|
||||||
|
|
||||||
Monitor->widthmm = 10 * DDC->features.hsize;
|
|
||||||
Monitor->heightmm = 10 * DDC->features.vsize;
|
|
||||||
|
|
||||||
/* If this is a digital display, then we can use reduced blanking */
|
|
||||||
if (DDC->features.input_type)
|
|
||||||
Monitor->reducedblanking = TRUE;
|
|
||||||
/* Allow the user to also enable this through config */
|
|
||||||
|
|
||||||
/* Add established timings */
|
/* Add established timings */
|
||||||
Mode = DDCModesFromEstablished(scrnIndex, &DDC->timings1);
|
Mode = DDCModesFromEstablished(scrnIndex, &DDC->timings1);
|
||||||
Modes = xf86ModesAdd(Modes, Mode);
|
Modes = xf86ModesAdd(Modes, Mode);
|
||||||
|
@ -238,12 +220,61 @@ xf86DDCMonitorSet(int scrnIndex, MonPtr Monitor, xf86MonPtr DDC)
|
||||||
Mode = DDCModesFromStandardTiming(scrnIndex, DDC->timings2);
|
Mode = DDCModesFromStandardTiming(scrnIndex, DDC->timings2);
|
||||||
Modes = xf86ModesAdd(Modes, Mode);
|
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.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
xf86DDCMonitorSet(int scrnIndex, MonPtr Monitor, xf86MonPtr DDC)
|
||||||
|
{
|
||||||
|
DisplayModePtr Modes = NULL, Mode;
|
||||||
|
int i, clock;
|
||||||
|
Bool have_hsync = FALSE, have_vrefresh = FALSE;
|
||||||
|
|
||||||
|
if (!Monitor || !DDC)
|
||||||
|
return;
|
||||||
|
|
||||||
|
Monitor->DDC = DDC;
|
||||||
|
|
||||||
|
Monitor->widthmm = 10 * DDC->features.hsize;
|
||||||
|
Monitor->heightmm = 10 * DDC->features.vsize;
|
||||||
|
|
||||||
|
/* If this is a digital display, then we can use reduced blanking */
|
||||||
|
if (DDC->features.input_type)
|
||||||
|
Monitor->reducedblanking = TRUE;
|
||||||
|
/* Allow the user to also enable this through config */
|
||||||
|
|
||||||
|
Modes = xf86DDCGetModes(scrnIndex, DDC);
|
||||||
|
|
||||||
/* Skip EDID ranges if they were specified in the config file */
|
/* Skip EDID ranges if they were specified in the config file */
|
||||||
have_hsync = (Monitor->nHsync != 0);
|
have_hsync = (Monitor->nHsync != 0);
|
||||||
have_vrefresh = (Monitor->nVrefresh != 0);
|
have_vrefresh = (Monitor->nVrefresh != 0);
|
||||||
|
|
||||||
/* Go through the detailed monitor sections */
|
/* 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) {
|
switch (DDC->det_mon[i].type) {
|
||||||
case DS_RANGES:
|
case DS_RANGES:
|
||||||
if (!have_hsync) {
|
if (!have_hsync) {
|
||||||
|
@ -278,22 +309,11 @@ xf86DDCMonitorSet(int scrnIndex, MonPtr Monitor, xf86MonPtr DDC)
|
||||||
if (clock > Monitor->maxPixClock)
|
if (clock > Monitor->maxPixClock)
|
||||||
Monitor->maxPixClock = clock;
|
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;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (Modes) {
|
if (Modes) {
|
||||||
/* Print Modes */
|
/* Print Modes */
|
||||||
|
|
|
@ -59,6 +59,8 @@ extern void xf86print_vdif(
|
||||||
xf86vdifPtr v
|
xf86vdifPtr v
|
||||||
);
|
);
|
||||||
|
|
||||||
|
DisplayModePtr xf86DDCGetModes(int scrnIndex, xf86MonPtr DDC);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue