sunxi: video: Add support for video-mode environment variable
authorHans de Goede <hdegoede@redhat.com>
Fri, 19 Dec 2014 13:03:40 +0000 (14:03 +0100)
committerHans de Goede <hdegoede@redhat.com>
Wed, 14 Jan 2015 13:56:38 +0000 (14:56 +0100)
Add support for the standard video-mode environment variable using the
videomodes.c video_get_ctfb_res_modes() helper function.

This will allow users to specify the resolution e.g. :

setenv video-mode sunxi:video-mode=1280x1024-24@60
saveenv

Also make the reserved fb mem slightly larger to allow 1920x1200 to work.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Acked-by: Ian Campbell <ijc@hellion.org.uk>
Acked-by: Anatolij Gustschin <agust@denx.de>
drivers/video/sunxi_display.c
include/configs/sunxi-common.h

index cedb56ecb99d346ac77076e9c28d1403075481f3..cf81e452c7a6ea1414bc743315499d5423a30f32 100644 (file)
@@ -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);
 
index 4741b2ec576a7b0055be825c9c88b21b29ad78fd..77e37a84253ef383fe40c4a7cea1fd1884102dd0 100644 (file)
  * 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