summaryrefslogtreecommitdiffstats
path: root/sys/arm
diff options
context:
space:
mode:
authorgonzo <gonzo@FreeBSD.org>2013-06-27 00:33:08 +0000
committergonzo <gonzo@FreeBSD.org>2013-06-27 00:33:08 +0000
commit3079bcf3bb1fdbfc109c7bf0ce1e79cd0d050840 (patch)
treeebaeb68b05bf2962df05490bf1288d0b4eb41c93 /sys/arm
parent70506a4dd6c199d14c230a8786477b0bac30dc5f (diff)
downloadFreeBSD-src-3079bcf3bb1fdbfc109c7bf0ce1e79cd0d050840.zip
FreeBSD-src-3079bcf3bb1fdbfc109c7bf0ce1e79cd0d050840.tar.gz
- Request non-cached memory for framebuffer
- Properly probe/initialize syscons
Diffstat (limited to 'sys/arm')
-rw-r--r--sys/arm/ti/am335x/am335x_lcd.c26
1 files changed, 24 insertions, 2 deletions
diff --git a/sys/arm/ti/am335x/am335x_lcd.c b/sys/arm/ti/am335x/am335x_lcd.c
index 5cd875c..b236002 100644
--- a/sys/arm/ti/am335x/am335x_lcd.c
+++ b/sys/arm/ti/am335x/am335x_lcd.c
@@ -42,6 +42,10 @@ __FBSDID("$FreeBSD$");
#include <vm/vm.h>
#include <vm/pmap.h>
+/* syscons bits */
+#include <sys/fbio.h>
+#include <sys/consio.h>
+
#include <machine/bus.h>
#include <dev/fdt/fdt_common.h>
@@ -49,6 +53,9 @@ __FBSDID("$FreeBSD$");
#include <dev/ofw/ofw_bus.h>
#include <dev/ofw/ofw_bus_subr.h>
+#include <dev/fb/fbreg.h>
+#include <dev/syscons/syscons.h>
+
#include <arm/ti/ti_prcm.h>
#include <arm/ti/ti_scm.h>
@@ -395,12 +402,19 @@ am335x_lcd_intr(void *arg)
static int
am335x_lcd_probe(device_t dev)
{
+ int err;
+
if (!ofw_bus_is_compatible(dev, "ti,am335x-lcd"))
return (ENXIO);
device_set_desc(dev, "AM335x LCD controller");
- return (0);
+ err = sc_probe_unit(device_get_unit(dev),
+ device_get_flags(dev) | SC_AUTODETECT_KBD);
+ if (err != 0)
+ return (err);
+
+ return (BUS_PROBE_DEFAULT);
}
static int
@@ -480,7 +494,7 @@ am335x_lcd_attach(device_t dev)
goto fail;
err = bus_dmamem_alloc(sc->sc_dma_tag, (void **)&sc->sc_fb_base,
- 0, &sc->sc_dma_map);
+ BUS_DMA_COHERENT, &sc->sc_dma_map);
if (err) {
device_printf(dev, "cannot allocate framebuffer\n");
@@ -631,6 +645,14 @@ am335x_lcd_attach(device_t dev)
PWM_PERIOD, PWM_PERIOD) == 0)
sc->sc_backlight = 100;
+ err = (sc_attach_unit(device_get_unit(dev),
+ device_get_flags(dev) | SC_AUTODETECT_KBD));
+
+ if (err) {
+ device_printf(dev, "failed to attach syscons\n");
+ goto fail;
+ }
+
am335x_lcd_syscons_setup((vm_offset_t)sc->sc_fb_base, sc->sc_fb_phys, &panel);
return (0);
OpenPOWER on IntegriCloud