[U-Boot] [PATCH 11/17] sunxi: video: Add support for VGA via external DACs connected to the LCD pins

Hans de Goede
2014-12-24T19:06:23Z

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>
---
board/sunxi/Kconfig | 9 +++++++++
drivers/video/sunxi_display.c | 14 ++++++++++++++
2 files changed, 23 insertions(+)

diff --git a/board/sunxi/Kconfig b/board/sunxi/Kconfig
index 7a8503b..3e42866 100644
--- a/board/sunxi/Kconfig
+++ b/board/sunxi/Kconfig
@@ -253,6 +253,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
diff --git a/drivers/video/sunxi_display.c b/drivers/video/sunxi_display.c
index 2822cc6..624e5e0 100644
--- a/drivers/video/sunxi_display.c
+++ b/drivers/video/sunxi_display.c
@@ -768,6 +768,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;
}
}
@@ -798,6 +804,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
@@ -850,8 +858,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) {
@@ -904,6 +917,7 @@ int sunxi_simplefb_setup(void *blob)
pipeline = "de_be0-lcd0";
break;
case sunxi_monitor_vga:
+ pipeline = "de_be0-lcd0";
break;
}

--
2.1.0