diff mbox

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

Message ID 1437661179-32128-3-git-send-email-nikita@compulab.co.il
State Awaiting Upstream
Delegated to: Stefano Babic
Headers show

Commit Message

Nikita Kiryanov July 23, 2015, 2:19 p.m. UTC
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@denx.de>
Cc: Igor Grinberg <grinberg@compulab.co.il>
Signed-off-by: Nikita Kiryanov <nikita@compulab.co.il>
Signed-off-by: Igor Grinberg <grinberg@compulab.co.il>
---
 board/compulab/cm_fx6/cm_fx6.c | 72 ++++++++++++++++++++++++++++--------------
 include/configs/cm_fx6.h       |  1 -
 2 files changed, 48 insertions(+), 25 deletions(-)

Comments

Stefano Babic Aug. 2, 2015, 8:53 a.m. UTC | #1
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@denx.de>
> Cc: Igor Grinberg <grinberg@compulab.co.il>
> Signed-off-by: Nikita Kiryanov <nikita@compulab.co.il>
> Signed-off-by: Igor Grinberg <grinberg@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
diff mbox

Patch

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