diff options
author | gonzo <gonzo@FreeBSD.org> | 2013-06-27 00:33:08 +0000 |
---|---|---|
committer | gonzo <gonzo@FreeBSD.org> | 2013-06-27 00:33:08 +0000 |
commit | 3079bcf3bb1fdbfc109c7bf0ce1e79cd0d050840 (patch) | |
tree | ebaeb68b05bf2962df05490bf1288d0b4eb41c93 /sys/arm | |
parent | 70506a4dd6c199d14c230a8786477b0bac30dc5f (diff) | |
download | FreeBSD-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.c | 26 |
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); |