xserver: Branch 'master'
Ben Gamari
bgamari at gmail.com
Fri Feb 13 17:39:07 PST 2009
Breakage below
On Fri, Feb 13, 2009 at 3:14 PM, Adam Jackson
<ajax at kemper.freedesktop.org> wrote:
> hw/xfree86/modes/xf86EdidModes.c | 30 +++++++++++++++++++-----------
> 1 file changed, 19 insertions(+), 11 deletions(-)
>
> New commits:
> commit 20ac3140ce16af460992b83aa8aeff4afe28c2ee
> Author: Adam Jackson <ajax at redhat.com>
> Date: Mon Feb 9 13:36:05 2009 -0500
>
> EDID: Hack for 1366x768 in standard timing descriptors
>
> All you get for standard timing descriptors is horizontal size in
> multiples of 8 pixels (which means you can't say 1366) and height in
> terms of aspect ratio (which means you can't say 768). You'd like to
> just fuzzy-match this by walking the DMT list for sufficiently close
> modes, but you can't because DMT is useless and only defines a 1360x768
> mode, because it's _also_ specified in terms of character cells despite
> providing pixel exact timings. Neither can you use CVT or GTF to
> generate the timings, because they _also_ believe that modes have to be
> a multiple of 8 pixels.
>
> You'd also hope you could find a timing definition for this in CEA, but
> you can't because CEA only defines transmission formats that actually
> exist. So there's 480p, 720p, and 1080p, but no 768p. And why would
> there be, after all, the encoded signal is never 768p so obviously no
> one would ever make a display in that format.
>
> So instead, make a CVT mode since that's likely to be handled well by
> just about everything, smash the horizontal active down by 2, and shift
> the sync pulse by 1. Underscanning the hard way.
>
> Pass the suicide.
>
> diff --git a/hw/xfree86/modes/xf86EdidModes.c b/hw/xfree86/modes/xf86EdidModes.c
> index 1413e87..3e62e7e 100644
> --- a/hw/xfree86/modes/xf86EdidModes.c
> +++ b/hw/xfree86/modes/xf86EdidModes.c
> @@ -474,26 +474,34 @@ DDCModesFromStandardTiming(struct std_timings *timing, ddc_quirk_t quirks,
> int i;
>
> for (i = 0; i < STD_TIMINGS; i++) {
> - if (timing[i].hsize && timing[i].vsize && timing[i].refresh) {
> - Mode = FindDMTMode(timing[i].hsize, timing[i].vsize,
> - timing[i].refresh, rb);
> + hsize = timing[i].hsize;
> + vsize = timing[i].vsize;
> + refresh = timing[i].refresh;
Where did you declare these? It's breaking the build at the moment.
Just figured I'd let you know.
> +
> + /* HDTV hack. Hooray. */
> + if (hsize == 1360 && vsize == 765 && refresh == 60) {
> + Mode = xf86CVTMode(1366, 768, 60, FALSE, FALSE);
> + Mode->HDisplay = 1366;
> + Mode->VSyncStart--;
> + Mode->VSyncEnd--;
> + } else if (hsize && vsize && refresh) {
> + Mode = FindDMTMode(hsize, vsize, refresh, rb);
>
> if (!Mode) {
> if (timing_level == LEVEL_CVT)
> /* pass rb here too? */
> - Mode = xf86CVTMode(timing[i].hsize, timing[i].vsize,
> - timing[i].refresh, FALSE, FALSE);
> + Mode = xf86CVTMode(hsize, vsize, refresh, FALSE, FALSE);
> else if (timing_level == LEVEL_GTF)
> - Mode = xf86GTFMode(timing[i].hsize, timing[i].vsize,
> - timing[i].refresh, FALSE, FALSE);
> + Mode = xf86GTFMode(hsize, vsize, refresh, FALSE, FALSE);
> }
>
> - if (!Mode)
> - continue;
> + }
>
> + if (Mode) {
> Mode->type = M_T_DRIVER;
> - Modes = xf86ModesAdd(Modes, Mode);
> - }
> + Modes = xf86ModesAdd(Modes, Mode);
> + }
> + Mode = NULL;
> }
>
> return Modes;
> _______________________________________________
> xorg-commit mailing list
> xorg-commit at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/xorg-commit
>
More information about the xorg-commit
mailing list