sunxi: video: Add support for VGA via external DACs connected to the LCD pins
authorHans de Goede <hdegoede@redhat.com>
Wed, 24 Dec 2014 11:17:07 +0000 (12:17 +0100)
committerHans de Goede <hdegoede@redhat.com>
Wed, 14 Jan 2015 13:56:39 +0000 (14:56 +0100)
Add support for external DACs connected to the parallel LCD interface driving
a VGA connector, such as found on the Olimex A13 boards.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Acked-by: Ian Campbell <ijc@hellion.org.uk>
board/sunxi/Kconfig
drivers/video/sunxi_display.c

index 61b4959..5959577 100644 (file)
@@ -294,6 +294,15 @@ config VIDEO_HDMI
        ---help---
        Say Y here to add support for outputting video over HDMI.
 
+config VIDEO_VGA_VIA_LCD
+       boolean "VGA via LCD controller support"
+       depends on VIDEO
+       default n
+       ---help---
+       Say Y here to add support for external DACs connected to the parallel
+       LCD interface driving a VGA connector, such as found on the
+       Olimex A13 boards.
+
 config VIDEO_LCD_MODE
        string "LCD panel timing details"
        depends on VIDEO
index 98ff942..e01c8f5 100644 (file)
@@ -767,6 +767,12 @@ static void sunxi_mode_set(const struct ctfb_res_modes *mode,
                sunxi_lcdc_backlight_enable();
                break;
        case sunxi_monitor_vga:
+#ifdef CONFIG_VIDEO_VGA_VIA_LCD
+               sunxi_composer_mode_set(mode, address);
+               sunxi_lcdc_tcon0_mode_set(mode);
+               sunxi_composer_enable();
+               sunxi_lcdc_enable();
+#endif
                break;
        }
 }
@@ -808,6 +814,8 @@ void *video_hw_init(void)
        hpd = video_get_option_int(options, "hpd", 1);
        edid = video_get_option_int(options, "edid", 1);
        sunxi_display.monitor = sunxi_monitor_dvi;
+#elif defined CONFIG_VIDEO_VGA_VIA_LCD
+       sunxi_display.monitor = sunxi_monitor_vga;
 #else
        sunxi_display.monitor = sunxi_monitor_lcd;
 #endif
@@ -860,8 +868,13 @@ void *video_hw_init(void)
                printf("LCD not supported on this board\n");
                return NULL;
        case sunxi_monitor_vga:
+#ifdef CONFIG_VIDEO_VGA_VIA_LCD
+               sunxi_display.depth = 18;
+               break;
+#else
                printf("VGA not supported on this board\n");
                return NULL;
+#endif
        }
 
        if (mode->vmode != FB_VMODE_NONINTERLACED) {
@@ -914,6 +927,7 @@ int sunxi_simplefb_setup(void *blob)
                pipeline = "de_be0-lcd0";
                break;
        case sunxi_monitor_vga:
+               pipeline = "de_be0-lcd0";
                break;
        }