|
|
|
@ -14,14 +14,13 @@ |
|
|
|
|
#include <asm/gpio.h> |
|
|
|
|
#include <asm/imx-common/iomux-v3.h> |
|
|
|
|
#include <asm/imx-common/boot_mode.h> |
|
|
|
|
#include <asm/imx-common/video.h> |
|
|
|
|
#include <mmc.h> |
|
|
|
|
#include <fsl_esdhc.h> |
|
|
|
|
#include <miiphy.h> |
|
|
|
|
#include <netdev.h> |
|
|
|
|
#include <asm/arch/mxc_hdmi.h> |
|
|
|
|
#include <asm/arch/crm_regs.h> |
|
|
|
|
#include <linux/fb.h> |
|
|
|
|
#include <ipu_pixfmt.h> |
|
|
|
|
#include <asm/io.h> |
|
|
|
|
#include <asm/arch/sys_proto.h> |
|
|
|
|
DECLARE_GLOBAL_DATA_PTR; |
|
|
|
@ -265,14 +264,6 @@ int board_phy_config(struct phy_device *phydev) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#if defined(CONFIG_VIDEO_IPUV3) |
|
|
|
|
struct display_info_t { |
|
|
|
|
int bus; |
|
|
|
|
int addr; |
|
|
|
|
int pixfmt; |
|
|
|
|
int (*detect)(struct display_info_t const *dev); |
|
|
|
|
void (*enable)(struct display_info_t const *dev); |
|
|
|
|
struct fb_videomode mode; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
static int detect_hdmi(struct display_info_t const *dev) |
|
|
|
|
{ |
|
|
|
@ -309,7 +300,7 @@ static void enable_lvds(struct display_info_t const *dev) |
|
|
|
|
writel(reg, &iomux->gpr[2]); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static struct display_info_t const displays[] = {{ |
|
|
|
|
struct display_info_t const displays[] = {{ |
|
|
|
|
.bus = -1, |
|
|
|
|
.addr = 0, |
|
|
|
|
.pixfmt = IPU_PIX_FMT_RGB666, |
|
|
|
@ -350,51 +341,7 @@ static struct display_info_t const displays[] = {{ |
|
|
|
|
.sync = FB_SYNC_EXT, |
|
|
|
|
.vmode = FB_VMODE_NONINTERLACED |
|
|
|
|
} } }; |
|
|
|
|
|
|
|
|
|
int board_video_skip(void) |
|
|
|
|
{ |
|
|
|
|
int i; |
|
|
|
|
int ret; |
|
|
|
|
char const *panel = getenv("panel"); |
|
|
|
|
if (!panel) { |
|
|
|
|
for (i = 0; i < ARRAY_SIZE(displays); i++) { |
|
|
|
|
struct display_info_t const *dev = displays+i; |
|
|
|
|
if (dev->detect && dev->detect(dev)) { |
|
|
|
|
panel = dev->mode.name; |
|
|
|
|
printf("auto-detected panel %s\n", panel); |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (!panel) { |
|
|
|
|
panel = displays[0].mode.name; |
|
|
|
|
printf("No panel detected: default to %s\n", panel); |
|
|
|
|
i = 0; |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
for (i = 0; i < ARRAY_SIZE(displays); i++) { |
|
|
|
|
if (!strcmp(panel, displays[i].mode.name)) |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (i < ARRAY_SIZE(displays)) { |
|
|
|
|
ret = ipuv3_fb_init(&displays[i].mode, 0, |
|
|
|
|
displays[i].pixfmt); |
|
|
|
|
if (!ret) { |
|
|
|
|
displays[i].enable(displays+i); |
|
|
|
|
printf("Display: %s (%ux%u)\n", |
|
|
|
|
displays[i].mode.name, |
|
|
|
|
displays[i].mode.xres, |
|
|
|
|
displays[i].mode.yres); |
|
|
|
|
} else |
|
|
|
|
printf("LCD %s cannot be configured: %d\n", |
|
|
|
|
displays[i].mode.name, ret); |
|
|
|
|
} else { |
|
|
|
|
printf("unsupported panel %s\n", panel); |
|
|
|
|
return -EINVAL; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
size_t display_count = ARRAY_SIZE(displays); |
|
|
|
|
|
|
|
|
|
static void setup_display(void) |
|
|
|
|
{ |
|
|
|
|