summaryrefslogtreecommitdiff
path: root/board/compulab
diff options
context:
space:
mode:
authorNikita Kiryanov <nikita@compulab.co.il>2015-07-23 17:19:29 +0300
committerStefano Babic <sbabic@denx.de>2015-08-02 10:51:37 +0200
commit4377859aa697ebec8e2ddb1cefe2ce338cd73f65 (patch)
tree7306f72ddeb28db3ee17f321b9c7274563278dac /board/compulab
parent75dbbbfdf36ac01d56418a1e47ed30deeb6f72ec (diff)
downloadu-boot-imx-4377859aa697ebec8e2ddb1cefe2ce338cd73f65.zip
u-boot-imx-4377859aa697ebec8e2ddb1cefe2ce338cd73f65.tar.gz
u-boot-imx-4377859aa697ebec8e2ddb1cefe2ce338cd73f65.tar.bz2
arm: mx6: cm-fx6: make it possible to not init display
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>
Diffstat (limited to 'board/compulab')
-rw-r--r--board/compulab/cm_fx6/cm_fx6.c72
1 files changed, 48 insertions, 24 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 */