diff mbox

[U-Boot] mx6sabresd: Fix wrong colors in LVDS display

Message ID 1383927058-24697-1-git-send-email-fabio.estevam@freescale.com
State Changes Requested
Delegated to: Stefano Babic
Headers show

Commit Message

Fabio Estevam Nov. 8, 2013, 4:10 p.m. UTC
Currently HDMI splash screen is selected by default on mx6sabresd boards.

As LVDS is also always enabled, this causes incorrect colors to be displayed in 
the LVDS panel due to the different pixel format in HDMI and LVDS.

Fix this by selecting the LVDS panel as the default splash output and also by 
ensuring that LVDS is turned off when HDMI output is active.

Signed-off-by: Fabio Estevam <fabio.estevam@freescale.com>
---
 board/freescale/mx6sabresd/mx6sabresd.c | 30 ++++++++++++++++++++++--------
 1 file changed, 22 insertions(+), 8 deletions(-)

Comments

Liu Ying Nov. 22, 2013, 2:29 a.m. UTC | #1
Hi Fabio,


2013/11/9 Fabio Estevam <fabio.estevam@freescale.com>

> Currently HDMI splash screen is selected by default on mx6sabresd boards.
>
> As LVDS is also always enabled, this causes incorrect colors to be
> displayed in
> the LVDS panel due to the different pixel format in HDMI and LVDS.
>
> Fix this by selecting the LVDS panel as the default splash output and also
> by
> ensuring that LVDS is turned off when HDMI output is active.
>
> Signed-off-by: Fabio Estevam <fabio.estevam@freescale.com>
> ---
>  board/freescale/mx6sabresd/mx6sabresd.c | 30
> ++++++++++++++++++++++--------
>  1 file changed, 22 insertions(+), 8 deletions(-)
>
> diff --git a/board/freescale/mx6sabresd/mx6sabresd.c
> b/board/freescale/mx6sabresd/mx6sabresd.c
> index 9dbe605..ba1f289 100644
> --- a/board/freescale/mx6sabresd/mx6sabresd.c
> +++ b/board/freescale/mx6sabresd/mx6sabresd.c
> @@ -249,8 +249,21 @@ static int detect_hdmi(struct display_info_t const
> *dev)
>         return readb(&hdmi->phy_stat0) & HDMI_DVI_STAT;
>  }
>
> +static void disable_lvds(struct display_info_t const *dev)
> +{
> +       struct iomuxc *iomux = (struct iomuxc *)IOMUXC_BASE_ADDR;
> +
> +       int reg = readl(&iomux->gpr[2]);
> +
> +       reg &= ~(IOMUXC_GPR2_LVDS_CH0_MODE_DISABLED  |
> +                 IOMUXC_GPR2_LVDS_CH1_MODE_ENABLED_DI0);
>

Should change the above logic to this to make sure both the LDB two
channels are disabled correctly:
reg &= ~(IOMUXC_GPR2_LVDS_CH0_MODE_MASK | IOMUXC_GPR2_LVDS_CH1_MODE_MASK);

Otherwise, Acked-by: Liu Ying <liu.y.victor@gmail.com<Ying.Liu@freescale.com>
>

Regards,
Liu Ying

+
> +       writel(reg, &iomux->gpr[2]);
> +}
> +
>  static void do_enable_hdmi(struct display_info_t const *dev)
>  {
> +       disable_lvds(dev);
>         imx_enable_hdmi_phy();
>  }
>
> @@ -263,14 +276,15 @@ static void enable_lvds(struct display_info_t const
> *dev)
>                IOMUXC_GPR2_DATA_WIDTH_CH1_24BIT;
>         writel(reg, &iomux->gpr[2]);
>  }
> +
>  static struct display_info_t const displays[] = {{
>         .bus    = -1,
>         .addr   = 0,
> -       .pixfmt = IPU_PIX_FMT_RGB24,
> -       .detect = detect_hdmi,
> -       .enable = do_enable_hdmi,
> +       .pixfmt = IPU_PIX_FMT_LVDS666,
> +       .detect = NULL,
> +       .enable = enable_lvds,
>         .mode   = {
> -               .name           = "HDMI",
> +               .name           = "Hannstar-XGA",
>                 .refresh        = 60,
>                 .xres           = 1024,
>                 .yres           = 768,
> @@ -286,11 +300,11 @@ static struct display_info_t const displays[] = {{
>  } }, {
>         .bus    = -1,
>         .addr   = 0,
> -       .pixfmt = IPU_PIX_FMT_LVDS666,
> -       .detect = NULL,
> -       .enable = enable_lvds,
> +       .pixfmt = IPU_PIX_FMT_RGB24,
> +       .detect = detect_hdmi,
> +       .enable = do_enable_hdmi,
>         .mode   = {
> -               .name           = "Hannstar-XGA",
> +               .name           = "HDMI",
>                 .refresh        = 60,
>                 .xres           = 1024,
>                 .yres           = 768,
> --
> 1.8.1.2
>
>
> _______________________________________________
> U-Boot mailing list
> U-Boot@lists.denx.de
> http://lists.denx.de/mailman/listinfo/u-boot
>
diff mbox

Patch

diff --git a/board/freescale/mx6sabresd/mx6sabresd.c b/board/freescale/mx6sabresd/mx6sabresd.c
index 9dbe605..ba1f289 100644
--- a/board/freescale/mx6sabresd/mx6sabresd.c
+++ b/board/freescale/mx6sabresd/mx6sabresd.c
@@ -249,8 +249,21 @@  static int detect_hdmi(struct display_info_t const *dev)
 	return readb(&hdmi->phy_stat0) & HDMI_DVI_STAT;
 }
 
+static void disable_lvds(struct display_info_t const *dev)
+{
+	struct iomuxc *iomux = (struct iomuxc *)IOMUXC_BASE_ADDR;
+
+	int reg = readl(&iomux->gpr[2]);
+
+	reg &= ~(IOMUXC_GPR2_LVDS_CH0_MODE_DISABLED  |
+		  IOMUXC_GPR2_LVDS_CH1_MODE_ENABLED_DI0);
+
+	writel(reg, &iomux->gpr[2]);
+}
+
 static void do_enable_hdmi(struct display_info_t const *dev)
 {
+	disable_lvds(dev);
 	imx_enable_hdmi_phy();
 }
 
@@ -263,14 +276,15 @@  static void enable_lvds(struct display_info_t const *dev)
 	       IOMUXC_GPR2_DATA_WIDTH_CH1_24BIT;
 	writel(reg, &iomux->gpr[2]);
 }
+
 static struct display_info_t const displays[] = {{
 	.bus	= -1,
 	.addr	= 0,
-	.pixfmt	= IPU_PIX_FMT_RGB24,
-	.detect	= detect_hdmi,
-	.enable	= do_enable_hdmi,
+	.pixfmt	= IPU_PIX_FMT_LVDS666,
+	.detect	= NULL,
+	.enable	= enable_lvds,
 	.mode	= {
-		.name           = "HDMI",
+		.name           = "Hannstar-XGA",
 		.refresh        = 60,
 		.xres           = 1024,
 		.yres           = 768,
@@ -286,11 +300,11 @@  static struct display_info_t const displays[] = {{
 } }, {
 	.bus	= -1,
 	.addr	= 0,
-	.pixfmt	= IPU_PIX_FMT_LVDS666,
-	.detect	= NULL,
-	.enable	= enable_lvds,
+	.pixfmt	= IPU_PIX_FMT_RGB24,
+	.detect	= detect_hdmi,
+	.enable	= do_enable_hdmi,
 	.mode	= {
-		.name           = "Hannstar-XGA",
+		.name           = "HDMI",
 		.refresh        = 60,
 		.xres           = 1024,
 		.yres           = 768,