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 <[email protected]>
> Cc: Igor Grinberg <[email protected]>
> Signed-off-by: Nikita Kiryanov <[email protected]>
> Signed-off-by: Igor Grinberg <[email protected]>
> ---
>  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: [email protected]
=====================================================================
_______________________________________________
U-Boot mailing list
[email protected]
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to