On Thu, Oct 13, 2011 at 3:01 PM, Jesse Barnes <[email protected]> wrote: > It's fairly common to have multiple, identical monitors plugged in. In > that case, it's preferable to run the monitor's preferred mode on each > output, rather than just matching the width & height and end up with > different timings or refresh rates. > > Signed-off-by: Jesse Barnes <[email protected]>
Makes sense to me. Reviewed-by: Alex Deucher <[email protected]> > --- > hw/xfree86/modes/xf86Crtc.c | 25 ++++++++++++++++++++----- > 1 files changed, 20 insertions(+), 5 deletions(-) > > diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c > index 3fae039..d75cd77 100644 > --- a/hw/xfree86/modes/xf86Crtc.c > +++ b/hw/xfree86/modes/xf86Crtc.c > @@ -2060,13 +2060,28 @@ xf86TargetPreferred(ScrnInfoPtr scrn, > xf86CrtcConfigPtr config, > if (o == p) > continue; > > - for (mode = output->probed_modes; mode; mode = mode->next) { > - Rotation r = output->initial_rotation; > - if (xf86ModeWidth(mode, r) == pref_width && > - xf86ModeHeight(mode, r) == pref_height) { > + /* > + * First see if the preferred mode matches on the next > + * output as well. This catches the common case of identical > + * monitors and makes sure they all have the same timings > + * and refresh. If that fails, we fall back to trying to > + * match just width & height. > + */ > + mode = xf86OutputHasPreferredMode(output, pref_width, > + pref_height); > + if (mode && xf86ModesEqual(mode, preferred[p])) { > preferred[o] = mode; > match = TRUE; > - } > + } else { > + for (mode = output->probed_modes; mode; > + mode = mode->next) { > + Rotation r = output->initial_rotation; > + if (xf86ModeWidth(mode, r) == pref_width && > + xf86ModeHeight(mode, r) == pref_height) { > + preferred[o] = mode; > + match = TRUE; > + } > + } > } > > all_match &= match; > -- > 1.7.4.1 > > _______________________________________________ > [email protected]: X.Org development > Archives: http://lists.x.org/archives/xorg-devel > Info: http://lists.x.org/mailman/listinfo/xorg-devel > _______________________________________________ [email protected]: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel
