|
@@ -846,36 +846,43 @@ void *video_hw_init(void)
|
|
|
printf("Unknown monitor: '%s', falling back to '%s'\n",
|
|
|
mon, sunxi_get_mon_desc(sunxi_display.monitor));
|
|
|
|
|
|
+#ifdef CONFIG_VIDEO_HDMI
|
|
|
+ /* If HDMI/DVI is selected do HPD & EDID, and handle fallback */
|
|
|
+ if (sunxi_display.monitor == sunxi_monitor_dvi ||
|
|
|
+ sunxi_display.monitor == sunxi_monitor_hdmi) {
|
|
|
+ /* Always call hdp_detect, as it also enables clocks, etc. */
|
|
|
+ ret = sunxi_hdmi_hpd_detect();
|
|
|
+ if (ret) {
|
|
|
+ printf("HDMI connected: ");
|
|
|
+ if (edid && sunxi_hdmi_edid_get_mode(&custom) == 0)
|
|
|
+ mode = &custom;
|
|
|
+ } else if (hpd) {
|
|
|
+ sunxi_hdmi_shutdown();
|
|
|
+ /* Fallback to lcd / vga / none */
|
|
|
+ if (lcd_mode[0]) {
|
|
|
+ sunxi_display.monitor = sunxi_monitor_lcd;
|
|
|
+ } else {
|
|
|
+#ifdef CONFIG_VIDEO_VGA_VIA_LCD
|
|
|
+ sunxi_display.monitor = sunxi_monitor_vga;
|
|
|
+#else
|
|
|
+ sunxi_display.monitor = sunxi_monitor_none;
|
|
|
+#endif
|
|
|
+ }
|
|
|
+ } /* else continue with hdmi/dvi without a cable connected */
|
|
|
+ }
|
|
|
+#endif
|
|
|
+
|
|
|
switch (sunxi_display.monitor) {
|
|
|
case sunxi_monitor_none:
|
|
|
return NULL;
|
|
|
case sunxi_monitor_dvi:
|
|
|
case sunxi_monitor_hdmi:
|
|
|
-#ifndef CONFIG_VIDEO_HDMI
|
|
|
+#ifdef CONFIG_VIDEO_HDMI
|
|
|
+ break;
|
|
|
+#else
|
|
|
printf("HDMI/DVI not supported on this board\n");
|
|
|
sunxi_display.monitor = sunxi_monitor_none;
|
|
|
return NULL;
|
|
|
-#else
|
|
|
- /* Always call hdp_detect, as it also enables clocks, etc. */
|
|
|
- ret = sunxi_hdmi_hpd_detect();
|
|
|
- if (ret) {
|
|
|
- printf("HDMI connected: ");
|
|
|
- if (edid && sunxi_hdmi_edid_get_mode(&custom) == 0)
|
|
|
- mode = &custom;
|
|
|
- break;
|
|
|
- }
|
|
|
- if (!hpd)
|
|
|
- break; /* User has requested to ignore hpd */
|
|
|
-
|
|
|
- sunxi_hdmi_shutdown();
|
|
|
-
|
|
|
- if (lcd_mode[0] == 0) {
|
|
|
- sunxi_display.monitor = sunxi_monitor_none;
|
|
|
- return NULL; /* No LCD, bail */
|
|
|
- }
|
|
|
-
|
|
|
- /* Fall back / through to LCD */
|
|
|
- sunxi_display.monitor = sunxi_monitor_lcd;
|
|
|
#endif
|
|
|
case sunxi_monitor_lcd:
|
|
|
if (lcd_mode[0]) {
|