diff mbox

[U-Boot,1/3] edid: Set timings flags according to edid

Message ID 20170429124337.16291-2-jernej.skrabec@siol.net
State Accepted
Commit dc8cae4df3c016cbcb6eb8a841a7a94ff36b9e0b
Delegated to: Anatolij Gustschin
Headers show

Commit Message

Jernej Škrabec April 29, 2017, 12:43 p.m. UTC
Timing flags are never set, so they may contain garbage. Since some
drivers check them, video output may be broken on those drivers.

Initialize them to 0 and check for few common flags.

Signed-off-by: Jernej Skrabec <jernej.skrabec@siol.net>
---

 common/edid.c | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

Comments

Simon Glass April 30, 2017, 3:49 a.m. UTC | #1
On 29 April 2017 at 06:43, Jernej Skrabec <jernej.skrabec@siol.net> wrote:
> Timing flags are never set, so they may contain garbage. Since some
> drivers check them, video output may be broken on those drivers.
>
> Initialize them to 0 and check for few common flags.
>
> Signed-off-by: Jernej Skrabec <jernej.skrabec@siol.net>
> ---
>
>  common/edid.c | 14 ++++++++++++++
>  1 file changed, 14 insertions(+)

Reviewed-by: Simon Glass <sjg@chromium.org>
Anatolij Gustschin May 15, 2017, 6:31 p.m. UTC | #2
On Sat, 29 Apr 2017 14:43:35 +0200
Jernej Skrabec jernej.skrabec@siol.net wrote:

> Timing flags are never set, so they may contain garbage. Since some
> drivers check them, video output may be broken on those drivers.
> 
> Initialize them to 0 and check for few common flags.
> 
> Signed-off-by: Jernej Skrabec <jernej.skrabec@siol.net>
> ---
> 
>  common/edid.c | 14 ++++++++++++++
>  1 file changed, 14 insertions(+)

applied to u-boot-video/master, thanks!

--
Anatolij
diff mbox

Patch

diff --git a/common/edid.c b/common/edid.c
index e08e420920..ab7069fdcd 100644
--- a/common/edid.c
+++ b/common/edid.c
@@ -85,6 +85,7 @@  static void decode_timing(u8 *buf, struct display_timing *timing)
 	uint x_mm, y_mm;
 	unsigned int ha, hbl, hso, hspw, hborder;
 	unsigned int va, vbl, vso, vspw, vborder;
+	struct edid_detailed_timing *t = (struct edid_detailed_timing *)buf;
 
 	/* Edid contains pixel clock in terms of 10KHz */
 	set_entry(&timing->pixelclock, (buf[0] + (buf[1] << 8)) * 10000);
@@ -111,6 +112,19 @@  static void decode_timing(u8 *buf, struct display_timing *timing)
 	set_entry(&timing->vback_porch, vbl - vso - vspw);
 	set_entry(&timing->vsync_len, vspw);
 
+	timing->flags = 0;
+	if (EDID_DETAILED_TIMING_FLAG_HSYNC_POLARITY(*t))
+		timing->flags |= DISPLAY_FLAGS_HSYNC_HIGH;
+	else
+		timing->flags |= DISPLAY_FLAGS_HSYNC_LOW;
+	if (EDID_DETAILED_TIMING_FLAG_VSYNC_POLARITY(*t))
+		timing->flags |= DISPLAY_FLAGS_VSYNC_HIGH;
+	else
+		timing->flags |= DISPLAY_FLAGS_VSYNC_LOW;
+
+	if (EDID_DETAILED_TIMING_FLAG_INTERLACED(*t))
+		timing->flags = DISPLAY_FLAGS_INTERLACED;
+
 	debug("Detailed mode clock %u Hz, %d mm x %d mm\n"
 	      "               %04x %04x %04x %04x hborder %x\n"
 	      "               %04x %04x %04x %04x vborder %x\n",