Only add default modes if EDID supports continuous-frequency
When an EDID is present, only add the default mode pool if the continuous-frequency bit is set in the EDID. Should fix bugs like 18512.
This commit is contained in:
parent
c232f3d673
commit
81fd17f5f4
|
@ -1418,7 +1418,7 @@ xf86ProbeOutputModes (ScrnInfoPtr scrn, int maxX, int maxY)
|
||||||
{
|
{
|
||||||
xf86OutputPtr output = config->output[o];
|
xf86OutputPtr output = config->output[o];
|
||||||
DisplayModePtr mode;
|
DisplayModePtr mode;
|
||||||
DisplayModePtr config_modes = NULL, output_modes, default_modes;
|
DisplayModePtr config_modes = NULL, output_modes, default_modes = NULL;
|
||||||
char *preferred_mode;
|
char *preferred_mode;
|
||||||
xf86MonPtr edid_monitor;
|
xf86MonPtr edid_monitor;
|
||||||
XF86ConfMonitorPtr conf_monitor;
|
XF86ConfMonitorPtr conf_monitor;
|
||||||
|
@ -1426,6 +1426,7 @@ xf86ProbeOutputModes (ScrnInfoPtr scrn, int maxX, int maxY)
|
||||||
int min_clock = 0;
|
int min_clock = 0;
|
||||||
int max_clock = 0;
|
int max_clock = 0;
|
||||||
double clock;
|
double clock;
|
||||||
|
Bool add_default_modes = TRUE;
|
||||||
enum { sync_config, sync_edid, sync_default } sync_source = sync_default;
|
enum { sync_config, sync_edid, sync_default } sync_source = sync_default;
|
||||||
|
|
||||||
while (output->probed_modes != NULL)
|
while (output->probed_modes != NULL)
|
||||||
|
@ -1476,6 +1477,11 @@ xf86ProbeOutputModes (ScrnInfoPtr scrn, int maxX, int maxY)
|
||||||
int i;
|
int i;
|
||||||
Bool set_hsync = mon_rec.nHsync == 0;
|
Bool set_hsync = mon_rec.nHsync == 0;
|
||||||
Bool set_vrefresh = mon_rec.nVrefresh == 0;
|
Bool set_vrefresh = mon_rec.nVrefresh == 0;
|
||||||
|
struct disp_features *features = &edid_monitor->features;
|
||||||
|
|
||||||
|
/* if display is not continuous-frequency, don't add default modes */
|
||||||
|
if (!GTF_SUPPORTED(features->msc))
|
||||||
|
add_default_modes = FALSE;
|
||||||
|
|
||||||
for (i = 0; i < sizeof (edid_monitor->det_mon) / sizeof (edid_monitor->det_mon[0]); i++)
|
for (i = 0; i < sizeof (edid_monitor->det_mon) / sizeof (edid_monitor->det_mon[0]); i++)
|
||||||
{
|
{
|
||||||
|
@ -1532,8 +1538,10 @@ xf86ProbeOutputModes (ScrnInfoPtr scrn, int maxX, int maxY)
|
||||||
mon_rec.vrefresh[0].hi = 62.0;
|
mon_rec.vrefresh[0].hi = 62.0;
|
||||||
mon_rec.nVrefresh = 1;
|
mon_rec.nVrefresh = 1;
|
||||||
}
|
}
|
||||||
default_modes = xf86GetDefaultModes (output->interlaceAllowed,
|
|
||||||
output->doubleScanAllowed);
|
if (add_default_modes)
|
||||||
|
default_modes = xf86GetDefaultModes (output->interlaceAllowed,
|
||||||
|
output->doubleScanAllowed);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If this is not an RB monitor, remove RB modes from the default
|
* If this is not an RB monitor, remove RB modes from the default
|
||||||
|
|
Loading…
Reference in New Issue