[U-Boot] [PATCH 02/12] arm: mx6: cm-fx6: make it possible to not init display

Stefano Babic sbabic at denx.de
Sun Aug 2 10:53:30 CEST 2015


On 23/07/2015 16:19, Nikita Kiryanov wrote:
> Implement a cm-fx6 specific board_video_skip() to provide the option to not
> initialize the display.
> 
> The new function does not init display if the environment variable "panel" is
> not defined, or if it is set to an unsupported value.
> 
> Collateral changes:
> - Don't use the global displays array (it's CONFIG_IMX_VIDEO_SKIP specific).
> - Don't use detect_hdmi(), since env controlled init makes it unnecessary.
> 
> Cc: Stefano Babic <sbabic at denx.de>
> Cc: Igor Grinberg <grinberg at compulab.co.il>
> Signed-off-by: Nikita Kiryanov <nikita at compulab.co.il>
> Signed-off-by: Igor Grinberg <grinberg at compulab.co.il>
> ---
>  board/compulab/cm_fx6/cm_fx6.c | 72 ++++++++++++++++++++++++++++--------------
>  include/configs/cm_fx6.h       |  1 -
>  2 files changed, 48 insertions(+), 25 deletions(-)
> 
> diff --git a/board/compulab/cm_fx6/cm_fx6.c b/board/compulab/cm_fx6/cm_fx6.c
> index b500f91..2fb8db5 100644
> --- a/board/compulab/cm_fx6/cm_fx6.c
> +++ b/board/compulab/cm_fx6/cm_fx6.c
> @@ -13,6 +13,7 @@
>  #include <fsl_esdhc.h>
>  #include <miiphy.h>
>  #include <netdev.h>
> +#include <errno.h>
>  #include <fdt_support.h>
>  #include <sata.h>
>  #include <splash.h>
> @@ -54,31 +55,27 @@ static void cm_fx6_enable_hdmi(struct display_info_t const *dev)
>  	imx_enable_hdmi_phy();
>  }
>  
> -struct display_info_t const displays[] = {
> -	{
> -		.bus	= -1,
> -		.addr	= 0,
> -		.pixfmt	= IPU_PIX_FMT_RGB24,
> -		.detect	= detect_hdmi,
> -		.enable	= cm_fx6_enable_hdmi,
> -		.mode	= {
> -			.name           = "HDMI",
> -			.refresh        = 60,
> -			.xres           = 1024,
> -			.yres           = 768,
> -			.pixclock       = 40385,
> -			.left_margin    = 220,
> -			.right_margin   = 40,
> -			.upper_margin   = 21,
> -			.lower_margin   = 7,
> -			.hsync_len      = 60,
> -			.vsync_len      = 10,
> -			.sync           = FB_SYNC_EXT,
> -			.vmode          = FB_VMODE_NONINTERLACED,
> -		}
> -	},
> +static struct display_info_t preset_hdmi_1024X768 = {
> +	.bus	= -1,
> +	.addr	= 0,
> +	.pixfmt	= IPU_PIX_FMT_RGB24,
> +	.enable	= cm_fx6_enable_hdmi,
> +	.mode	= {
> +		.name           = "HDMI",
> +		.refresh        = 60,
> +		.xres           = 1024,
> +		.yres           = 768,
> +		.pixclock       = 40385,
> +		.left_margin    = 220,
> +		.right_margin   = 40,
> +		.upper_margin   = 21,
> +		.lower_margin   = 7,
> +		.hsync_len      = 60,
> +		.vsync_len      = 10,
> +		.sync           = FB_SYNC_EXT,
> +		.vmode          = FB_VMODE_NONINTERLACED,
> +	}
>  };
> -size_t display_count = ARRAY_SIZE(displays);
>  
>  static void cm_fx6_setup_display(void)
>  {
> @@ -93,6 +90,33 @@ static void cm_fx6_setup_display(void)
>  	writel(reg, &mxc_ccm->CCGR3);
>  	clrbits_le32(&iomuxc_regs->gpr[3], MXC_CCM_CCGR3_IPU1_IPU_DI0_MASK);
>  }
> +
> +int board_video_skip(void)
> +{
> +	int ret;
> +	struct display_info_t *preset;
> +	char const *panel = getenv("panel");
> +
> +	if (!panel)
> +		return -ENOENT;
> +
> +	if (!strcmp(panel, "HDMI"))
> +		preset = &preset_hdmi_1024X768;
> +	else
> +		return -EINVAL;
> +
> +	ret = ipuv3_fb_init(&preset->mode, 0, preset->pixfmt);
> +	if (ret) {
> +		printf("Can't init display %s: %d\n", preset->mode.name, ret);
> +		return ret;
> +	}
> +
> +	preset->enable(preset);
> +	printf("Display: %s (%ux%u)\n", preset->mode.name, preset->mode.xres,
> +	       preset->mode.yres);
> +
> +	return 0;
> +}
>  #else
>  static inline void cm_fx6_setup_display(void) {}
>  #endif /* CONFIG_VIDEO_IPUV3 */
> diff --git a/include/configs/cm_fx6.h b/include/configs/cm_fx6.h
> index 231f4ba..f23ef8b 100644
> --- a/include/configs/cm_fx6.h
> +++ b/include/configs/cm_fx6.h
> @@ -258,7 +258,6 @@
>  #define CONFIG_VIDEO_IPUV3
>  #define CONFIG_IPUV3_CLK          260000000
>  #define CONFIG_IMX_HDMI
> -#define CONFIG_IMX_VIDEO_SKIP
>  #define CONFIG_CFB_CONSOLE
>  #define CONFIG_VGA_AS_SINGLE_DEVICE
>  #define CONFIG_SYS_CONSOLE_IS_IN_ENV
> 
Applied to u-boot-imx, thanks !

Best regards,
Stefano Babic


-- 
=====================================================================
DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: +49-8142-66989-53 Fax: +49-8142-66989-80 Email: sbabic at denx.de
=====================================================================


More information about the U-Boot mailing list