Module Name: src
Committed By: macallan
Date: Tue Dec 11 21:57:41 UTC 2012
Modified Files:
src/sys/arch/arm/omap: omapfb.c
Log Message:
different u-boot versions set up the video hardware in different ways, make
sure we can deal with both
To generate a diff of this commit:
cvs rdiff -u -r1.4 -r1.5 src/sys/arch/arm/omap/omapfb.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/arch/arm/omap/omapfb.c
diff -u src/sys/arch/arm/omap/omapfb.c:1.4 src/sys/arch/arm/omap/omapfb.c:1.5
--- src/sys/arch/arm/omap/omapfb.c:1.4 Mon Oct 29 18:11:36 2012
+++ src/sys/arch/arm/omap/omapfb.c Tue Dec 11 21:57:41 2012
@@ -1,4 +1,4 @@
-/* $NetBSD: omapfb.c,v 1.4 2012/10/29 18:11:36 macallan Exp $ */
+/* $NetBSD: omapfb.c,v 1.5 2012/12/11 21:57:41 macallan Exp $ */
/*
* Copyright (c) 2010 Michael Lorenz
@@ -31,7 +31,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: omapfb.c,v 1.4 2012/10/29 18:11:36 macallan Exp $");
+__KERNEL_RCSID(0, "$NetBSD: omapfb.c,v 1.5 2012/12/11 21:57:41 macallan Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -173,7 +173,23 @@ omapfb_attach(device_t parent, device_t
return;
}
+ /*
+ * XXX
+ * different u-boot versions initialize the graphics controller in
+ * different ways, so we look for the display resolution in a few
+ * different places...
+ */
sz = bus_space_read_4(sc->sc_iot, sc->sc_regh, OMAPFB_DISPC_GFX_SIZE);
+ if (sz == 0) {
+ sz = bus_space_read_4(sc->sc_iot, sc->sc_regh, OMAPFB_DISPC_SIZE_LCD);
+ }
+ if (sz == 0) {
+ sz = bus_space_read_4(sc->sc_iot, sc->sc_regh, OMAPFB_DISPC_SIZE_DIG);
+ }
+
+ /* ... and make sure it ends up where we need it */
+ bus_space_write_4(sc->sc_iot, sc->sc_regh, OMAPFB_DISPC_GFX_SIZE, sz);
+
sc->sc_width = (sz & 0xfff) + 1;
sc->sc_height = ((sz & 0x0fff0000 ) >> 16) + 1;
sc->sc_depth = 16;
@@ -293,9 +309,11 @@ omapfb_attach(device_t parent, device_t
bus_space_write_4(sc->sc_iot, sc->sc_regh, OMAPFB_DISPC_DEFAULT_COLOR_1,
0x00ff0000);
#endif
+
+ /* now we make sure the video output is actually running */
reg = bus_space_read_4(sc->sc_iot, sc->sc_regh, OMAPFB_DISPC_CONTROL);
bus_space_write_4(sc->sc_iot, sc->sc_regh, OMAPFB_DISPC_CONTROL,
- reg | OMAP_DISPC_CTRL_GO_LCD);
+ reg | OMAP_DISPC_CTRL_GO_LCD | OMAP_DISPC_CTRL_GO_DIGITAL);
#ifdef OMAPFB_DEBUG
printf("attr: %08x\n", bus_space_read_4(sc->sc_iot, sc->sc_regh, OMAPFB_DISPC_GFX_ATTRIBUTES));