[PATCH xserver/hw/xfree86/modes/xf86Modes.c] print DisplayMode type bits

Alex Deucher alexdeucher at gmail.com
Wed Aug 31 06:51:43 PDT 2011


On Wed, Aug 31, 2011 at 1:29 AM,  <vdb at picaros.org> wrote:
> This patch adds printing of the DisplayMode type bits to
> xf86PrintModeline().  It helps to trace the modeline origin and to
> understand the initial configured modeline.
>
>> This is rather useful if you're trying to figure out where a mode
>> might have come from.
>
> Example output:
>
> Modeline "1600x1200 at 60"x60.0  144.00  1600 1632 1792 1920  1200 1201 1204 1250
>  (75.0 kHz UP)
> Modeline "1600x1200"x60.0  162.00  1600 1664 1856 2160  1200 1201 1204 1250
>  +hsync +vsync (75.0 kHz eP)
> Modeline "1600x1200 at 50"x50.0  120.00  1600 1628 1788 1920  1200 1201 1204 1250
>  (62.5 kHz)
>
> A letter bitmap description is in the code as a comment block.

I like it.

Reviewed-by: Alex Deucher <alexander.deucher at amd.com>

>
> http://bugs.freedesktop.org/show_bug.cgi?id=17953
>
> Signed-off-by: Servaas Vandenberghe
> diff --git a/hw/xfree86/modes/xf86Modes.c b/hw/xfree86/modes/xf86Modes.c
> index c2dc3dc..dcd3a28 100644
> --- a/hw/xfree86/modes/xf86Modes.c
> +++ b/hw/xfree86/modes/xf86Modes.c
> @@ -281,12 +281,53 @@ add(char **p, char *new)
>
>  /**
>  * Print out a modeline.
> + *
> + * The mode type bits are informational except for the capitalized U
> + * and P bits which give sort order priority.  Letter map:
> + *
> + * USERPREF, U, user preferred is set from the xorg.conf Monitor
> + * Option "PreferredMode" or from the Screen Display Modes statement.
> + * This unique modeline is moved to the head of the list after sorting.
> + *
> + * DRIVER, e, is set by the video driver, EDID or flat panel native.
> + *
> + * USERDEF, z, a configured zoom mode Ctrl+Alt+Keypad-{Plus,Minus}.
> + *
> + * DEFAULT, d, a compiled-in default.
> + *
> + * PREFERRED, P, driver preferred is set by the video device driver,
> + * e.g. the EDID detailed timing modeline.  This is a true sort
> + * priority and multiple P modes form a sorted sublist at the list
> + * head.
> + *
> + * BUILTIN, b, a hardware fixed CRTC mode.
> + *
> + * See modes/xf86Crtc.c: xf86ProbeOutputModes().
>  */
>  void
> -xf86PrintModeline(int scrnIndex,DisplayModePtr mode)
> +xf86PrintModeline(int scrnIndex, DisplayModePtr mode)
>  {
>     char tmp[256];
>     char *flags = xnfcalloc(1, 1);
> +#define TBITS 6
> +    const char tchar[TBITS+1] = "UezdPb";
> +    int tbit[TBITS] = {
> +       M_T_USERPREF, M_T_DRIVER, M_T_USERDEF,
> +       M_T_DEFAULT, M_T_PREFERRED, M_T_BUILTIN
> +    };
> +    char type[TBITS+2];   /* +1 for leading space */
> +#undef TBITS
> +    int tlen = 0;
> +
> +    if (mode->type) {
> +       int i;
> +
> +       type[tlen++] = ' ';
> +       for (i = 0; tchar[i]; i++)
> +           if (mode->type & tbit[i])
> +               type[tlen++] = tchar[i];
> +    }
> +    type[tlen] = '\0';
>
>     if (mode->HSkew) {
>        snprintf(tmp, 256, "hskew %i", mode->HSkew);
> @@ -310,12 +351,12 @@ xf86PrintModeline(int scrnIndex,DisplayModePtr mode)
>     if (mode->Flags & V_CLKDIV2) add(&flags, "vclk/2");
>  #endif
>     xf86DrvMsg(scrnIndex, X_INFO,
> -                  "Modeline \"%s\"x%.01f  %6.2f  %i %i %i %i  %i %i %i %i%s "
> -                  "(%.01f kHz)\n",
> -                  mode->name, mode->VRefresh, mode->Clock/1000., mode->HDisplay,
> -                  mode->HSyncStart, mode->HSyncEnd, mode->HTotal,
> -                  mode->VDisplay, mode->VSyncStart, mode->VSyncEnd,
> -                  mode->VTotal, flags, xf86ModeHSync(mode));
> +              "Modeline \"%s\"x%.01f  %6.2f  %i %i %i %i  %i %i %i %i%s"
> +              " (%.01f kHz%s)\n",
> +              mode->name, mode->VRefresh, mode->Clock/1000.,
> +              mode->HDisplay, mode->HSyncStart, mode->HSyncEnd, mode->HTotal,
> +              mode->VDisplay, mode->VSyncStart, mode->VSyncEnd, mode->VTotal,
> +              flags, xf86ModeHSync(mode), type);
>     free(flags);
>  }
> _______________________________________________
> xorg-devel at lists.x.org: X.Org development
> Archives: http://lists.x.org/archives/xorg-devel
> Info: http://lists.x.org/mailman/listinfo/xorg-devel
>


More information about the xorg-devel mailing list