sunxi: video: Add support for VGA via external DACs connected to the LCD pins

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>
diff --git a/board/sunxi/Kconfig b/board/sunxi/Kconfig
index 61b4959..5959577 100644
--- a/board/sunxi/Kconfig
+++ b/board/sunxi/Kconfig
@@ -294,6 +294,15 @@
 	---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
diff --git a/drivers/video/sunxi_display.c b/drivers/video/sunxi_display.c
index 98ff942..e01c8f5 100644
--- a/drivers/video/sunxi_display.c
+++ b/drivers/video/sunxi_display.c
@@ -767,6 +767,12 @@
 		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 @@
 	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 @@
 		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 @@
 		pipeline = "de_be0-lcd0";
 		break;
 	case sunxi_monitor_vga:
+		pipeline = "de_be0-lcd0";
 		break;
 	}