diff --git a/drivers/video/sunxi_display.c b/drivers/video/sunxi_display.c index cedb56ecb9..cf81e452c7 100644 --- a/drivers/video/sunxi_display.c +++ b/drivers/video/sunxi_display.c @@ -358,7 +358,9 @@ retry: void *video_hw_init(void) { static GraphicDevice *graphic_device = &sunxi_display.graphic_device; - const struct ctfb_res_modes *mode = &res_mode_init[RES_MODE_1024x768]; + const struct ctfb_res_modes *mode; + const char *options; + unsigned int depth; int ret; memset(&sunxi_display, 0, sizeof(struct sunxi_display)); @@ -367,14 +369,22 @@ void *video_hw_init(void) CONFIG_SUNXI_FB_SIZE >> 10); gd->fb_base = gd->ram_top; + video_get_ctfb_res_modes(RES_MODE_1024x768, 24, &mode, &depth, &options); + ret = sunxi_hdmi_hpd_detect(); if (!ret) return NULL; printf("HDMI connected.\n"); - sunxi_display.enabled = true; - printf("Setting up a %dx%d console.\n", mode->xres, mode->yres); + if (mode->vmode != FB_VMODE_NONINTERLACED) { + printf("Only non-interlaced modes supported, falling back to 1024x768\n"); + mode = &res_mode_init[RES_MODE_1024x768]; + } else { + printf("Setting up a %dx%d console\n", mode->xres, mode->yres); + } + + sunxi_display.enabled = true; sunxi_engines_init(); sunxi_mode_set(mode, gd->fb_base - CONFIG_SYS_SDRAM_BASE); diff --git a/include/configs/sunxi-common.h b/include/configs/sunxi-common.h index 4741b2ec57..77e37a8425 100644 --- a/include/configs/sunxi-common.h +++ b/include/configs/sunxi-common.h @@ -205,7 +205,7 @@ * The amount of RAM that is reserved for the FB. This will not show up as * RAM to the kernel, but will be reclaimed by a KMS driver in future. */ -#define CONFIG_SUNXI_FB_SIZE (8 << 20) +#define CONFIG_SUNXI_FB_SIZE (9 << 20) /* Do we want to initialize a simple FB? */ #define CONFIG_VIDEO_DT_SIMPLEFB