Patchwork [U-Boot] mx6sabresd: Avoid hang when HDMI cable is not connected

login
register
mail settings
Submitter Fabio Estevam
Date Sept. 11, 2013, 7:54 p.m.
Message ID <1378929250-8645-1-git-send-email-fabio.estevam@freescale.com>
Download mbox | patch
Permalink /patch/274359/
State Changes Requested
Delegated to: Stefano Babic
Headers show

Comments

Fabio Estevam - Sept. 11, 2013, 7:54 p.m.
Since commit d9b894603 (mx6sabresd: Add LVDS splash screen support) the 
following hang happens if the HDMI cable is not connected or the 'panel' 
variable is not set:

U-Boot 2013.10-rc2-12978-g47ac53d-dirty (Sep 11 2013 - 15:07:38)                
                                                                                
CPU:   Freescale i.MX6Q rev1.2 at 792 MHz                                       
Reset cause: POR                                                                
Board: MX6-SabreSD                                                              
DRAM:  1 GiB                                                                    
MMC:   FSL_SDHC: 0, FSL_SDHC: 1, FSL_SDHC: 2
...

Provide a detect_lvds() to avoid the hang.

Reported-by: Pardeep Kumar Singla <b45784@freescale.com>
Signed-off-by: Fabio Estevam <fabio.estevam@freescale.com>
---
 board/freescale/mx6sabresd/mx6sabresd.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)
Eric Benard - Sept. 11, 2013, 8:44 p.m.
Hi Fabio,

Le Wed, 11 Sep 2013 16:54:10 -0300,
Fabio Estevam <fabio.estevam@freescale.com> a écrit :

> Since commit d9b894603 (mx6sabresd: Add LVDS splash screen support) the 
> following hang happens if the HDMI cable is not connected or the 'panel' 
> variable is not set:
> 
> U-Boot 2013.10-rc2-12978-g47ac53d-dirty (Sep 11 2013 - 15:07:38)                
>                                                                                 
> CPU:   Freescale i.MX6Q rev1.2 at 792 MHz                                       
> Reset cause: POR                                                                
> Board: MX6-SabreSD                                                              
> DRAM:  1 GiB                                                                    
> MMC:   FSL_SDHC: 0, FSL_SDHC: 1, FSL_SDHC: 2
> ...
> 
> Provide a detect_lvds() to avoid the hang.
> 
> Reported-by: Pardeep Kumar Singla <b45784@freescale.com>
> Signed-off-by: Fabio Estevam <fabio.estevam@freescale.com>
> ---
>  board/freescale/mx6sabresd/mx6sabresd.c | 8 +++++++-
>  1 file changed, 7 insertions(+), 1 deletion(-)
> 
> diff --git a/board/freescale/mx6sabresd/mx6sabresd.c b/board/freescale/mx6sabresd/mx6sabresd.c
> index c832bd9..e514529 100644
> --- a/board/freescale/mx6sabresd/mx6sabresd.c
> +++ b/board/freescale/mx6sabresd/mx6sabresd.c
> @@ -263,6 +263,12 @@ static void enable_lvds(struct display_info_t const *dev)
>  	       IOMUXC_GPR2_DATA_WIDTH_CH1_24BIT;
>  	writel(reg, &iomux->gpr[2]);
>  }
> +
> +static int detect_lvds(struct display_info_t const *dev)
> +{
> +	return 0;
> +}
> +
>  static struct display_info_t const displays[] = {{
>  	.bus	= -1,
>  	.addr	= 0,
> @@ -287,7 +293,7 @@ static struct display_info_t const displays[] = {{
>  	.bus	= -1,
>  	.addr	= 0,
>  	.pixfmt	= IPU_PIX_FMT_LVDS666,
> -	.detect	= NULL,
> +	.detect	= detect_lvds,
>  	.enable	= enable_lvds,
>  	.mode	= {
>  		.name           = "Hannstar-XGA",

instead of providing an empty function you could fix the problem in the
code calling this function by changing
if (dev->detect(dev))
to something like  
if (dev->detect && dev->detect(dev))

Eric
Fabio Estevam - Sept. 11, 2013, 9:12 p.m.
On Wed, Sep 11, 2013 at 5:44 PM, Eric Bénard <eric@eukrea.com> wrote:

> instead of providing an empty function you could fix the problem in the
> code calling this function by changing
> if (dev->detect(dev))
> to something like
> if (dev->detect && dev->detect(dev))

Thanks, Eric. This is a better solution.

Patch

diff --git a/board/freescale/mx6sabresd/mx6sabresd.c b/board/freescale/mx6sabresd/mx6sabresd.c
index c832bd9..e514529 100644
--- a/board/freescale/mx6sabresd/mx6sabresd.c
+++ b/board/freescale/mx6sabresd/mx6sabresd.c
@@ -263,6 +263,12 @@  static void enable_lvds(struct display_info_t const *dev)
 	       IOMUXC_GPR2_DATA_WIDTH_CH1_24BIT;
 	writel(reg, &iomux->gpr[2]);
 }
+
+static int detect_lvds(struct display_info_t const *dev)
+{
+	return 0;
+}
+
 static struct display_info_t const displays[] = {{
 	.bus	= -1,
 	.addr	= 0,
@@ -287,7 +293,7 @@  static struct display_info_t const displays[] = {{
 	.bus	= -1,
 	.addr	= 0,
 	.pixfmt	= IPU_PIX_FMT_LVDS666,
-	.detect	= NULL,
+	.detect	= detect_lvds,
 	.enable	= enable_lvds,
 	.mode	= {
 		.name           = "Hannstar-XGA",