[<prev] [next>] [day] [month] [year] [list]
Message-ID: <CADnq5_NV6bv2asd0qv8x_+ZKHwsS+JWqa=tbFUJ-5UTQLPVjTQ@mail.gmail.com>
Date: Mon, 28 Apr 2014 10:23:43 -0400
From: Alex Deucher <alexdeucher@...il.com>
To: Daniel Thompson <daniel.thompson@...aro.org>
Cc: Maling list - DRI developers <dri-devel@...ts.freedesktop.org>,
linaro-kernel@...ts.linaro.org, patches@...aro.org,
LKML <linux-kernel@...r.kernel.org>
Subject: Re: [RESEND PATCH] drm: Add 800x600 (SVGA) screen resolution to the
built-in EDIDs
On Fri, Apr 25, 2014 at 4:34 AM, Daniel Thompson
<daniel.thompson@...aro.org> wrote:
> The 800x600 (SVGA) screen resolution was lacking in the set of
> built-in selectable EDID screen resolutions that can be used to
> repair misbehaving monitor firmware.
>
> This patch adds the related data set and expands the documentation.
> Note that the SVGA bit occupies a different byte to all the existing
> users of the established timing bits forcing a rework of the
> ESTABLISHED_TIMINGS_BITS macro.
>
> Tested new EDID on an aged (and misbehaving) industrial LCD panel;
> existing EDIDs still pass edid-decode's checksum checks.
>
> Signed-off-by: Daniel Thompson <daniel.thompson@...aro.org>
Reviewed-by: Alex Deucher <alexander.deucher@....com>
> ---
> Documentation/EDID/1024x768.S | 2 +-
> Documentation/EDID/1280x1024.S | 2 +-
> Documentation/EDID/1600x1200.S | 2 +-
> Documentation/EDID/1680x1050.S | 2 +-
> Documentation/EDID/1920x1080.S | 2 +-
> Documentation/EDID/800x600.S | 41 +++++++++++++++++++++++++++++++++++++++++
> Documentation/EDID/HOWTO.txt | 2 +-
> Documentation/EDID/edid.S | 17 ++++++++++++++---
> drivers/gpu/drm/drm_edid_load.c | 21 ++++++++++++++++++++-
> 9 files changed, 81 insertions(+), 10 deletions(-)
> create mode 100644 Documentation/EDID/800x600.S
>
> diff --git a/Documentation/EDID/1024x768.S b/Documentation/EDID/1024x768.S
> index 4b486fe..6f3e4b7 100644
> --- a/Documentation/EDID/1024x768.S
> +++ b/Documentation/EDID/1024x768.S
> @@ -36,7 +36,7 @@
> #define DPI 72
> #define VFREQ 60 /* Hz */
> #define TIMING_NAME "Linux XGA"
> -#define ESTABLISHED_TIMINGS_BITS 0x08 /* Bit 3 -> 1024x768 @60 Hz */
> +#define ESTABLISHED_TIMING2_BITS 0x08 /* Bit 3 -> 1024x768 @60 Hz */
> #define HSYNC_POL 0
> #define VSYNC_POL 0
> #define CRC 0x55
> diff --git a/Documentation/EDID/1280x1024.S b/Documentation/EDID/1280x1024.S
> index a2799fe..bd9bef2 100644
> --- a/Documentation/EDID/1280x1024.S
> +++ b/Documentation/EDID/1280x1024.S
> @@ -36,7 +36,7 @@
> #define DPI 72
> #define VFREQ 60 /* Hz */
> #define TIMING_NAME "Linux SXGA"
> -#define ESTABLISHED_TIMINGS_BITS 0x00 /* none */
> +/* No ESTABLISHED_TIMINGx_BITS */
> #define HSYNC_POL 1
> #define VSYNC_POL 1
> #define CRC 0xa0
> diff --git a/Documentation/EDID/1600x1200.S b/Documentation/EDID/1600x1200.S
> index 0ded64c..a45101c 100644
> --- a/Documentation/EDID/1600x1200.S
> +++ b/Documentation/EDID/1600x1200.S
> @@ -36,7 +36,7 @@
> #define DPI 72
> #define VFREQ 60 /* Hz */
> #define TIMING_NAME "Linux UXGA"
> -#define ESTABLISHED_TIMINGS_BITS 0x00 /* none */
> +/* No ESTABLISHED_TIMINGx_BITS */
> #define HSYNC_POL 1
> #define VSYNC_POL 1
> #define CRC 0x9d
> diff --git a/Documentation/EDID/1680x1050.S b/Documentation/EDID/1680x1050.S
> index 96f67ca..b0d7c69 100644
> --- a/Documentation/EDID/1680x1050.S
> +++ b/Documentation/EDID/1680x1050.S
> @@ -36,7 +36,7 @@
> #define DPI 96
> #define VFREQ 60 /* Hz */
> #define TIMING_NAME "Linux WSXGA"
> -#define ESTABLISHED_TIMINGS_BITS 0x00 /* none */
> +/* No ESTABLISHED_TIMINGx_BITS */
> #define HSYNC_POL 1
> #define VSYNC_POL 1
> #define CRC 0x26
> diff --git a/Documentation/EDID/1920x1080.S b/Documentation/EDID/1920x1080.S
> index 36ed5d5..3084355e 100644
> --- a/Documentation/EDID/1920x1080.S
> +++ b/Documentation/EDID/1920x1080.S
> @@ -36,7 +36,7 @@
> #define DPI 96
> #define VFREQ 60 /* Hz */
> #define TIMING_NAME "Linux FHD"
> -#define ESTABLISHED_TIMINGS_BITS 0x00 /* none */
> +/* No ESTABLISHED_TIMINGx_BITS */
> #define HSYNC_POL 1
> #define VSYNC_POL 1
> #define CRC 0x05
> diff --git a/Documentation/EDID/800x600.S b/Documentation/EDID/800x600.S
> new file mode 100644
> index 0000000..6644e26
> --- /dev/null
> +++ b/Documentation/EDID/800x600.S
> @@ -0,0 +1,41 @@
> +/*
> + 800x600.S: EDID data set for standard 800x600 60 Hz monitor
> +
> + Copyright (C) 2011 Carsten Emde <C.Emde@...dl.org>
> + Copyright (C) 2014 Linaro Limited
> +
> + This program is free software; you can redistribute it and/or
> + modify it under the terms of the GNU General Public License
> + as published by the Free Software Foundation; either version 2
> + of the License, or (at your option) any later version.
> +
> + This program is distributed in the hope that it will be useful,
> + but WITHOUT ANY WARRANTY; without even the implied warranty of
> + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> + GNU General Public License for more details.
> +*/
> +
> +/* EDID */
> +#define VERSION 1
> +#define REVISION 3
> +
> +/* Display */
> +#define CLOCK 40000 /* kHz */
> +#define XPIX 800
> +#define YPIX 600
> +#define XY_RATIO XY_RATIO_4_3
> +#define XBLANK 256
> +#define YBLANK 28
> +#define XOFFSET 40
> +#define XPULSE 128
> +#define YOFFSET (63+1)
> +#define YPULSE (63+4)
> +#define DPI 72
> +#define VFREQ 60 /* Hz */
> +#define TIMING_NAME "Linux SVGA"
> +#define ESTABLISHED_TIMING1_BITS 0x01 /* Bit 0: 800x600 @ 60Hz */
> +#define HSYNC_POL 1
> +#define VSYNC_POL 1
> +#define CRC 0xc2
> +
> +#include "edid.S"
> diff --git a/Documentation/EDID/HOWTO.txt b/Documentation/EDID/HOWTO.txt
> index 7146db1..835db33 100644
> --- a/Documentation/EDID/HOWTO.txt
> +++ b/Documentation/EDID/HOWTO.txt
> @@ -18,7 +18,7 @@ CONFIG_DRM_LOAD_EDID_FIRMWARE was introduced. It allows to provide an
> individually prepared or corrected EDID data set in the /lib/firmware
> directory from where it is loaded via the firmware interface. The code
> (see drivers/gpu/drm/drm_edid_load.c) contains built-in data sets for
> -commonly used screen resolutions (1024x768, 1280x1024, 1600x1200,
> +commonly used screen resolutions (800x600, 1024x768, 1280x1024, 1600x1200,
> 1680x1050, 1920x1080) as binary blobs, but the kernel source tree does
> not contain code to create these data. In order to elucidate the origin
> of the built-in binary EDID blobs and to facilitate the creation of
> diff --git a/Documentation/EDID/edid.S b/Documentation/EDID/edid.S
> index ea97ae2..7ac0327 100644
> --- a/Documentation/EDID/edid.S
> +++ b/Documentation/EDID/edid.S
> @@ -33,6 +33,17 @@
> #define XY_RATIO_5_4 0b10
> #define XY_RATIO_16_9 0b11
>
> +/* Provide defaults for the timing bits */
> +#ifndef ESTABLISHED_TIMING1_BITS
> +#define ESTABLISHED_TIMING1_BITS 0x00
> +#endif
> +#ifndef ESTABLISHED_TIMING2_BITS
> +#define ESTABLISHED_TIMING2_BITS 0x00
> +#endif
> +#ifndef ESTABLISHED_TIMING3_BITS
> +#define ESTABLISHED_TIMING3_BITS 0x00
> +#endif
> +
> #define mfgname2id(v1,v2,v3) \
> ((((v1-'@')&0x1f)<<10)+(((v2-'@')&0x1f)<<5)+((v3-'@')&0x1f))
> #define swap16(v1) ((v1>>8)+((v1&0xff)<<8))
> @@ -139,7 +150,7 @@ white_x_y_msb: .byte 0x50,0x54
> Bit 2 640x480 @ 75 Hz
> Bit 1 800x600 @ 56 Hz
> Bit 0 800x600 @ 60 Hz */
> -estbl_timing1: .byte 0x00
> +estbl_timing1: .byte ESTABLISHED_TIMING1_BITS
>
> /* Bit 7 800x600 @ 72 Hz
> Bit 6 800x600 @ 75 Hz
> @@ -149,11 +160,11 @@ estbl_timing1: .byte 0x00
> Bit 2 1024x768 @ 72 Hz
> Bit 1 1024x768 @ 75 Hz
> Bit 0 1280x1024 @ 75 Hz */
> -estbl_timing2: .byte ESTABLISHED_TIMINGS_BITS
> +estbl_timing2: .byte ESTABLISHED_TIMING2_BITS
>
> /* Bit 7 1152x870 @ 75 Hz (Apple Macintosh II)
> Bits 6-0 Other manufacturer-specific display mod */
> -estbl_timing3: .byte 0x00
> +estbl_timing3: .byte ESTABLISHED_TIMING3_BITS
>
> /* Standard timing */
> /* X resolution, less 31, divided by 8 (256-2288 pixels) */
> diff --git a/drivers/gpu/drm/drm_edid_load.c b/drivers/gpu/drm/drm_edid_load.c
> index 1b4c7a5..6e09f61 100644
> --- a/drivers/gpu/drm/drm_edid_load.c
> +++ b/drivers/gpu/drm/drm_edid_load.c
> @@ -31,8 +31,9 @@ module_param_string(edid_firmware, edid_firmware, sizeof(edid_firmware), 0644);
> MODULE_PARM_DESC(edid_firmware, "Do not probe monitor, use specified EDID blob "
> "from built-in data or /lib/firmware instead. ");
>
> -#define GENERIC_EDIDS 5
> +#define GENERIC_EDIDS 6
> static const char *generic_edid_name[GENERIC_EDIDS] = {
> + "edid/800x600.bin",
> "edid/1024x768.bin",
> "edid/1280x1024.bin",
> "edid/1600x1200.bin",
> @@ -44,6 +45,24 @@ static const u8 generic_edid[GENERIC_EDIDS][128] = {
> {
> 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
> 0x31, 0xd8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
> + 0x05, 0x16, 0x01, 0x03, 0x6d, 0x1b, 0x14, 0x78,
> + 0xea, 0x5e, 0xc0, 0xa4, 0x59, 0x4a, 0x98, 0x25,
> + 0x20, 0x50, 0x54, 0x01, 0x00, 0x00, 0x45, 0x40,
> + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
> + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0xa0, 0x0f,
> + 0x20, 0x00, 0x31, 0x58, 0x1c, 0x20, 0x28, 0x80,
> + 0x14, 0x00, 0x15, 0xd0, 0x10, 0x00, 0x00, 0x1e,
> + 0x00, 0x00, 0x00, 0xff, 0x00, 0x4c, 0x69, 0x6e,
> + 0x75, 0x78, 0x20, 0x23, 0x30, 0x0a, 0x20, 0x20,
> + 0x20, 0x20, 0x00, 0x00, 0x00, 0xfd, 0x00, 0x3b,
> + 0x3d, 0x24, 0x26, 0x05, 0x00, 0x0a, 0x20, 0x20,
> + 0x20, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, 0xfc,
> + 0x00, 0x4c, 0x69, 0x6e, 0x75, 0x78, 0x20, 0x53,
> + 0x56, 0x47, 0x41, 0x0a, 0x20, 0x20, 0x00, 0xc2,
> + },
> + {
> + 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
> + 0x31, 0xd8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
> 0x05, 0x16, 0x01, 0x03, 0x6d, 0x23, 0x1a, 0x78,
> 0xea, 0x5e, 0xc0, 0xa4, 0x59, 0x4a, 0x98, 0x25,
> 0x20, 0x50, 0x54, 0x00, 0x08, 0x00, 0x61, 0x40,
> --
> 1.9.0
>
> _______________________________________________
> dri-devel mailing list
> dri-devel@...ts.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/dri-devel
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists