Message ID | 1437661179-32128-3-git-send-email-nikita@compulab.co.il |
---|---|
State | Awaiting Upstream |
Delegated to: | Stefano Babic |
Headers | show |
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 --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