[PATCH 2/2] Be forgiving of character-cell size mismatches in mode sizes
Matt Turner
mattst88 at gmail.com
Mon Feb 14 10:12:23 PST 2011
On Mon, Feb 14, 2011 at 5:45 PM, Adam Jackson <ajax at redhat.com> wrote:
> Signed-off-by: Adam Jackson <ajax at redhat.com>
> ---
> src/vesa.c | 28 +++++++++++++++++++++++++---
> 1 files changed, 25 insertions(+), 3 deletions(-)
>
> diff --git a/src/vesa.c b/src/vesa.c
> index ef01881..61d3550 100644
> --- a/src/vesa.c
> +++ b/src/vesa.c
> @@ -317,6 +317,30 @@ VESASetModeParameters(vbeInfoPtr pVbe, DisplayModePtr vbemode,
> (double)(ddcmode->HTotal * ddcmode->VTotal));
> }
>
> +/*
> + * Despite that VBE gives you pixel granularity for mode sizes, some BIOSes
> + * think they can only give sizes in multiples of character cells; and
> + * indeed, the reference CVT and GTF formulae only give results where
> + * (h % 8) == 0. Whatever, let's just try to cope. What we're looking for
> + * here is cases where the display says 1366x768 and the BIOS says 1360x768.
> + */
> +static Bool
> +vesaModesCloseEnough(DisplayModePtr edid, DisplayModePtr vbe)
> +{
> + if (!(edid->type & M_T_DRIVER))
> + return FALSE;
> +
> + /* never seen a height granularity... */
> + if (edid->VDisplay != vbe->VDisplay)
> + return FALSE;
> +
> + if (edid->HDisplay >= vbe->HDisplay &&
> + (edid->HDisplay & ~7) == (vbe->HDisplay & ~7))
> + return TRUE;
> +
> + return FALSE;
> +}
> +
> static ModeStatus
> VESAValidMode(int scrn, DisplayModePtr p, Bool flag, int pass)
> {
> @@ -358,9 +382,7 @@ VESAValidMode(int scrn, DisplayModePtr p, Bool flag, int pass)
> */
> if (pScrn->monitor->DDC) {
> for (mode = pScrn->monitor->Modes; mode; mode = mode->next) {
> - if (mode->type & M_T_DRIVER &&
> - mode->HDisplay == p->HDisplay &&
> - mode->VDisplay == p->VDisplay) {
> + if (vesaModesCloseEnough(mode, p)) {
> if (xf86CheckModeForMonitor(mode, mon) == MODE_OK) {
> found = 1;
> break;
> --
> 1.7.3.5
This looks like a good idea.
For both patches:
Reviewed-by: Matt Turner <mattst88 at gmail.com>
More information about the xorg-devel
mailing list