On Sat, Aug 06, 2016 at 11:34:09AM +0200, Mark Kettenis wrote:
> Note that on many platforms (including i.MX6) u-boot already sets up a
> framebuffer.  So if we'd know framebuffer address and the layout of
> the framebuffer it would be trivial to attach a rasops-based
> wsdisplay(4) to that.  There is a "simple-framebuffer" device tree
> binding for passing that information; see
> 
>   Documentation/devicetree/bindings/display/simple-framebuffer.txt
> 
> in the Linux tree.  Unofrtunately u-boot only adds the appropriate
> nodes to the tree on the Allwinner and Raspberry Pi platforms.  I
> don't think it would be too difficult to add it for other platforms
> though.
> 
> Of course this wouldn't allow you to change resolution and color
> depth.  But it would be enough to run X with the wsfb driver.

Neat, I agree this is the way to go on imx given the sheer amount of
effort it would take to implement a full display driver properly. I will
move imxdisplay(4) efforts to follow your model instead. am335x on the
other hand...
 
> If it interests you, go for it.  But I think that for most of our
> users a simple framebuffer as I sketched above would be good enough.
> So for me, this doesn't have a very high priority.

It does & I intend to. The am335x LCDC is relatively much, much less
complex and I am not far off from a working driver (discounting the
TDA19988/EDID issue). The BBB is a popular enough board that I think a
comprehensive display driver would be worthwhile considering it ends up
as many novices' first board & lack of X presents too high a
barrier-to-entry for them.

Of course, amdisplay(4) would only be worthwhile were it to actually be
committed upon completion -- my last effort (tipru(4)) proved to be
conceptually incompatible with OpenBSD & I'd like to avoid fighting
windmills this time around. :)

Below is further along but still incomplete amdisplay(4) patch provided
for continuity

Ian

Index: sys/arch/armv7/conf/GENERIC
===================================================================
RCS file: /cvs/src/sys/arch/armv7/conf/GENERIC,v
retrieving revision 1.31
diff -u -p -r1.31 GENERIC
--- sys/arch/armv7/conf/GENERIC 12 Jul 2016 19:17:49 -0000      1.31
+++ sys/arch/armv7/conf/GENERIC 7 Aug 2016 07:40:40 -0000
@@ -76,6 +76,8 @@ cpsw*         at fdt?
 com*           at fdt?                 # onboard uarts
 ommmc*         at fdt?                 # SD/MMC card controller
 sdmmc*         at ommmc?               # SD/MMC bus
+amdisplay*     at fdt?                 # LCD controller
+wsdisplay*     at amdisplay? console ?
 
 ehci*          at omap?                # EHCI (shim)
 usb*           at ehci?
Index: sys/arch/armv7/omap/am335x_prcmreg.h
===================================================================
RCS file: /cvs/src/sys/arch/armv7/omap/am335x_prcmreg.h,v
retrieving revision 1.4
diff -u -p -r1.4 am335x_prcmreg.h
--- sys/arch/armv7/omap/am335x_prcmreg.h        18 Mar 2014 07:34:17
-0000   1.4
+++ sys/arch/armv7/omap/am335x_prcmreg.h        7 Aug 2016 07:40:40
-0000
@@ -20,6 +20,7 @@
 #define AM335X_CLKCTRL_MODULEMODE_MASK         0x00000003
 
 #define PRCM_AM335X_CM_PER             0x0000
+#define PRCM_AM335X_LCDC_CLKCTRL       0x0018
 #define PRCM_AM335X_USB0_CLKCTRL       0x001c
 #define PRCM_AM335X_TPTC0_CLKCTRL      0x0024
 #define PRCM_AM335X_MMC0_CLKCTRL       0x003c
Index: sys/arch/armv7/omap/amdisplay.c
===================================================================
RCS file: sys/arch/armv7/omap/amdisplay.c
diff -N sys/arch/armv7/omap/amdisplay.c
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ sys/arch/armv7/omap/amdisplay.c     7 Aug 2016 07:40:40 -0000
@@ -0,0 +1,422 @@
+/*
+ * Copyright (c) 2016 Ian Sutton <[email protected]>
+ *
+ * Permission to use, copy, modify, and distribute this software for
any
+ * purpose with or without fee is hereby granted, provided that the
above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE
FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY
DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/malloc.h>
+
+#include <dev/cons.h>
+#include <dev/wscons/wsconsio.h>
+#include <dev/wscons/wsdisplayvar.h>
+#include <dev/wscons/wscons_callbacks.h>
+#include <dev/rasops/rasops.h>
+
+#include <dev/ofw/openfirm.h>
+#include <dev/ofw/fdt.h>
+#include <machine/fdt.h>
+
+#include <armv7/omap/prcmvar.h>
+
+/* register offsets */
+#define AMDISPLAY_PID                  0x00
+#define AMDISPLAY_CTRL                 0x04
+#define   AMDISPLAY_CTRL_CLKDIV_MASK   (0xFF << 8)
+#define   AMDISPLAY_CTRL_MODESEL_MASK  (1 << 0)
+#define AMDISPLAY_RASTER_CTRL          0x28
+#define   AMDISPLAY_RASTER_CTRL_TFT24UNPACKED_MASK     (1 << 26)
+#define   AMDISPLAY_RASTER_CTRL_TFT24_MASK             (1 << 25)
+#define   AMDISPLAY_RASTER_CTRL_LCDTFT_MASK            (1 << 7)
+#define   AMDISPLAY_RASTER_CTRL_LCDEN_MASK             (1 << 0)
+#define AMDISPLAY_RASTER_TIMING_0      0x2C
+#define AMDISPLAY_RASTER_TIMING_1      0x30
+#define AMDISPLAY_RASTER_TIMING_2      0x34
+#define AMDISPLAY_RASTER_SUBPANEL      0x38
+#define AMDISPLAY_RASTER_SUBPANEL_2    0x3C
+#define AMDISPLAY_LCDDMA_CTRL          0x40
+#define AMDISPLAY_LCDDMA_FB0_BASE      0x44
+#define AMDISPLAY_LCDDMA_FB0_CEILING   0x48
+#define AMDISPLAY_LCDDMA_FB1_BASE      0x4C
+#define AMDISPLAY_LCDDMA_FB1_CEILING   0x50
+#define AMDISPLAY_SYSCONFIG            0x54
+#define   AMDISPLAY_SYSCONFIG_STANDBYMODE_MASK         (3 << 4)
+#define   AMDISPLAY_SYSCONFIG_IDLEMODE_MASK            (3 << 2)
+#define   AMDISPLAY_SYSCONFIG_STANDBYMODE_SHAMT                4
+#define   AMDISPLAY_SYSCONFIG_IDLEMODE_SHAMT           2
+#define AMDISPLAY_IRQSTATUS_RAW                0x58
+#define AMDISPLAY_IRQSTATUS            0x5C
+#define AMDISPLAY_IRQENABLE_SET                0x60
+#define AMDISPLAY_IRQENABLE_CLEAR      0x64
+#define AMDISPLAY_CLKC_ENABLE          0x6C
+#define AMDISPLAY_CLKC_RESET           0x70
+
+/* intr. masks */
+#define AMDISPLAY_IRQ_EOF1     (1 << 9)
+#define AMDISPLAY_IRQ_EOF0     (1 << 8)
+#define AMDISPLAY_IRQ_PL       (1 << 6)
+#define AMDISPLAY_IRQ_FUF      (1 << 5)
+#define AMDISPLAY_IRQ_ACB      (1 << 3)
+#define AMDISPLAY_IRQ_SYNC     (1 << 2)
+#define AMDISPLAY_IRQ_RR_DONE  (1 << 1)
+#define AMDISPLAY_IRQ_DONE     (1 << 0)
+
+#define DEVNAME(_s) ((_s)->sc_dev.dv_xname)
+
+#define HREAD4(sc, reg)
\
+       (bus_space_read_4((sc)->sc_iot, (sc)->sc_ioh, (reg)))
+#define HWRITE4(sc, reg, val)
\
+       bus_space_write_4((sc)->sc_iot, (sc)->sc_ioh, (reg), (val))
+#define HSET4(sc, reg, bits)
\
+       HWRITE4((sc), (reg), HREAD4((sc), (reg)) | (bits))
+#define HCLR4(sc, reg, bits)
\
+       HWRITE4((sc), (reg), HREAD4((sc), (reg)) & ~(bits))
+
+struct amdisplay_softc {
+       struct device           sc_dev;
+       bus_space_tag_t         sc_iot;
+       bus_space_handle_t      sc_ioh;
+       bus_dma_tag_t           sc_dmat;
+       void                    *sc_ih;
+
+       bus_dmamap_t            sc_fb0_dma;
+       bus_dmamap_t            sc_fb1_dma;
+       bus_dma_segment_t       sc_fb0_dma_segs[1];
+       bus_dma_segment_t       sc_fb1_dma_segs[1];
+       void                    *sc_fb0;
+       void                    *sc_fb1;
+       int                     sc_fb_dma_nsegs;
+       bus_size_t              sc_fb_size;
+
+       int                     depth;
+       struct rasops_info      *ro;
+       struct amdisplay_panel_data     *sc_active;
+};
+
+struct amdisplay_panel_data {
+       int width;
+       int height;
+       int horiz_sync_width;
+       int horiz_front_porch;
+       int horiz_back_porch;
+       int vert_sync_width;
+       int vert_front_porch;
+       int vert_back_porch;
+       int panel_flags;
+       int sync;
+       int depth;
+       int linebytes;
+};
+
+/* we use this dummy device and hope it applies as the am335x has no
on-chip
+ * method of determining peripheral display capabilities. the
beaglebone black
+ * has the LCDC pins hardwired to a TDA19988 which sits between LCDC &
HDMI
+ * connector and is also wired to an i2c port over which it sends EDID
+ * information needed to properly configure display geometry on a
per-panel
+ * basis XXX */
+struct amdisplay_panel_data dummy = {
+       1280,
+       720,
+       44, 88, 148,
+       5, 4, 36,
+       0,
+       0,
+       24,
+       (24 / 8) * 1280
+};
+
+struct wsscreen_descr amdisplay_stdscreen = {
+       "std"
+};
+
+const struct wsscreen_descr *amdisplay_scrlist[] = {
+       &amdisplay_stdscreen,
+};
+
+struct wsscreen_list amdisplay_screenlist = {
+       nitems(amdisplay_scrlist), amdisplay_scrlist
+};
+
+int  amdisplay_match(struct device *, void *, void *);
+void amdisplay_attach(struct device *, struct device *, void *);
+int  amdisplay_detach(struct device *, int);
+int  amdisplay_activate(struct device *, int);
+int  amdisplay_intr(void *);
+
+int  amdisplay_ioctl(void *, u_long, caddr_t, int, struct proc *);
+int  amdisplay_alloc_screen(void *, const struct wsscreen_descr *,
+       void **, int *, int *, long *);
+void amdisplay_free_screen(void *, void *);
+int  amdisplay_show_screen(void *, void *, int,
+       void (*)(void *, int, int), void *);
+void amdisplay_doswitch(void *, void *);
+int  amdisplay_load_font(void *, void *, struct wsdisplay_font *);
+int  amdisplay_list_font(void *, struct wsdisplay_font *);
+int  amdisplay_getchar(void *, int, int, struct wsdisplay_charcell *);
+void amdisplay_burner(void *, u_int, u_int);
+paddr_t amdisplay_mmap(void *, off_t, int);
+
+void amdisplay_setup_rasops(struct amdisplay_softc *);
+int  amdisplay_setup_dma(struct amdisplay_softc *, struct
amdisplay_panel_data *);
+
+struct wsdisplay_accessops amdisplay_accessops = {
+       .ioctl = amdisplay_ioctl,
+       .mmap = amdisplay_mmap,
+       .alloc_screen = amdisplay_alloc_screen,
+       .free_screen = amdisplay_free_screen,
+       .show_screen = amdisplay_show_screen,
+       .getchar = amdisplay_getchar,
+       .load_font = amdisplay_load_font,
+       .list_font = amdisplay_list_font,
+       .burn_screen = amdisplay_burner
+};
+
+struct cfattach amdisplay_ca = {
+       sizeof(struct amdisplay_softc), amdisplay_match,
amdisplay_attach, amdisplay_detach
+};
+
+struct cfdriver amdisplay_cd = {
+       NULL, "amdisplay", DV_DULL
+};
+
+int
+amdisplay_match(struct device *parent, void *v, void *aux)
+{
+       struct fdt_attach_args *faa = aux;
+       return OF_is_compatible(faa->fa_node, "ti,am33xx-tilcdc");
+}
+
+void
+amdisplay_attach(struct device *parent, struct device *self, void
*args)
+{
+       struct   amdisplay_softc        *sc = (struct amdisplay_softc *)
self;
+       struct   fdt_attach_args        *faa = args;
+       struct   wsemuldisplaydev_attach_args wsaa;
+       
+       uint32_t irq, reg;
+
+       sc->sc_iot  = faa->fa_iot;
+       sc->sc_dmat = faa->fa_dmat;
+       if (bus_space_map(sc->sc_iot, faa->fa_reg[0].addr,
+           faa->fa_reg[0].size, 0, &sc->sc_ioh))
+               panic("%s: bus_space_map failed!", __func__);
+
+       irq = faa->fa_intr[0];
+
+       prcm_enablemodule(PRCM_LCDC);
+
+       /* force ourselves out of standby/idle states */
+       reg = HREAD4(sc, AMDISPLAY_SYSCONFIG);
+       reg &= ~(AMDISPLAY_SYSCONFIG_STANDBYMODE_MASK |
AMDISPLAY_SYSCONFIG_IDLEMODE_MASK);
+       reg |= (1 << AMDISPLAY_SYSCONFIG_STANDBYMODE_SHAMT);
+       reg |= (1 << AMDISPLAY_SYSCONFIG_IDLEMODE_SHAMT);
+       HWRITE4(sc, AMDISPLAY_SYSCONFIG, reg);
+
+       sc->sc_ih = arm_intr_establish(irq, IPL_BIO, amdisplay_intr, sc,
DEVNAME(sc));
+
+       printf("\n");
+
+       /* allocate DMA-able memory for framebuffer */
+       if (amdisplay_setup_dma(sc, &dummy)) {
+           printf("%s: could not create framebuffer!\n", DEVNAME(sc));
+           return;
+       }
+
+       amdisplay_setup_rasops(sc);
+
+       /* set raster mode */
+       HSET4(sc, AMDISPLAY_CTRL, AMDISPLAY_CTRL_MODESEL_MASK);
+
+       /* enable all intrs. */
+       reg = 0;
+       reg |= (AMDISPLAY_IRQ_EOF1 | AMDISPLAY_IRQ_EOF0 |
AMDISPLAY_IRQ_PL |
+           AMDISPLAY_IRQ_FUF | AMDISPLAY_IRQ_ACB | AMDISPLAY_IRQ_SYNC |
+           AMDISPLAY_IRQ_RR_DONE | AMDISPLAY_IRQ_DONE);
+       HWRITE4(sc, AMDISPLAY_IRQENABLE_SET, reg);
+
+       wsaa.console = 0;
+       wsaa.scrdata = &amdisplay_screenlist;
+       wsaa.accessops = &amdisplay_accessops;
+       wsaa.accesscookie = sc;
+       wsaa.defaultscreens = 0;
+
+       printf("%s: %dx%d\n", sc->sc_dev.dv_xname, sc->ro->ri_width,
+           sc->ro->ri_height);
+
+       //config_found(self, &wsaa, wsemuldisplaydevprint);
+}
+
+int
+amdisplay_detach(struct device *self, int flags)
+{
+       struct amdisplay_softc *sc = (struct amdisplay_softc *)self;
+
+       if (sc->ro)
+           free(sc->ro, M_DEVBUF, sizeof(struct rasops_info));
+
+       if (!sc->sc_fb0)
+           return 0;
+
+       bus_dmamap_sync(sc->sc_dmat, sc->sc_fb0_dma, 0, sc->sc_fb_size,
+           BUS_DMASYNC_POSTREAD | BUS_DMASYNC_POSTWRITE);
+       bus_dmamap_sync(sc->sc_dmat, sc->sc_fb1_dma, 0, sc->sc_fb_size,
+           BUS_DMASYNC_POSTREAD | BUS_DMASYNC_POSTWRITE);
+
+
+       bus_dmamap_unload(sc->sc_dmat, sc->sc_fb0_dma);
+       bus_dmamap_unload(sc->sc_dmat, sc->sc_fb1_dma);
+
+       bus_dmamem_unmap(sc->sc_dmat, (caddr_t)(sc->sc_fb0),
sc->sc_fb_size);
+       bus_dmamem_unmap(sc->sc_dmat, (caddr_t)(sc->sc_fb1),
sc->sc_fb_size);
+
+       bus_dmamem_free(sc->sc_dmat, sc->sc_fb0_dma_segs,
sc->sc_fb_dma_nsegs);
+       bus_dmamem_free(sc->sc_dmat, sc->sc_fb1_dma_segs,
sc->sc_fb_dma_nsegs);
+
+       bus_dmamap_destroy(sc->sc_dmat, sc->sc_fb0_dma);
+       bus_dmamap_destroy(sc->sc_dmat, sc->sc_fb1_dma);
+
+       return 0;
+}
+
+void
+amdisplay_setup_rasops(struct amdisplay_softc *sc)
+{
+       if (!sc->ro)
+           sc->ro = (struct rasops_info *)malloc(sizeof(struct
rasops_info),
+               M_DEVBUF, M_ZERO);
+
+       sc->ro->ri_depth  = sc->sc_active->depth;
+       sc->ro->ri_width  = sc->sc_active->width;
+       sc->ro->ri_height = sc->sc_active->height;
+       sc->ro->ri_stride = sc->sc_active->width * sc->sc_active->depth;
+//     sc->ro->ri_bits   = sc->sc_fb;
+       /* XXX 08/07 left off here */
+
+       rasops_init(sc->ro, 100, 100);
+}
+
+int
+amdisplay_setup_dma(struct amdisplay_softc *sc, struct
amdisplay_panel_data *p)
+{
+       int dma_flags     = (cold ? BUS_DMA_NOWAIT : BUS_DMA_WAITOK);
+
+       sc->sc_fb_size = roundup(p->height * p->linebytes, 16);
+       sc->sc_fb_dma_nsegs = 1;
+
+       if (bus_dmamap_create(sc->sc_dmat, sc->sc_fb_size,
sc->sc_fb_dma_nsegs,
+           sc->sc_fb_size, 0, dma_flags, &(sc->sc_fb0_dma)))
+               return -1;
+       if (bus_dmamap_create(sc->sc_dmat, sc->sc_fb_size,
sc->sc_fb_dma_nsegs,
+           sc->sc_fb_size, 0, dma_flags, &(sc->sc_fb1_dma)))
+               return -2;
+
+       /* XXX check alignment */
+       if (bus_dmamem_alloc(sc->sc_dmat, sc->sc_fb_size, 0x100000, 0,
+           sc->sc_fb0_dma_segs, 1, &(sc->sc_fb_dma_nsegs), dma_flags))
+               return -1;
+       if (bus_dmamem_alloc(sc->sc_dmat, sc->sc_fb_size, 0x100000, 0,
+           sc->sc_fb1_dma_segs, 1, &(sc->sc_fb_dma_nsegs), dma_flags))
+               return -2;
+
+       if (bus_dmamem_map(sc->sc_dmat, sc->sc_fb0_dma_segs,
sc->sc_fb_dma_nsegs,
+           sc->sc_fb_size, (caddr_t *)&(sc->sc_fb0), dma_flags |
BUS_DMA_COHERENT))
+               return -1;
+       if (bus_dmamem_map(sc->sc_dmat, sc->sc_fb1_dma_segs,
sc->sc_fb_dma_nsegs,
+           sc->sc_fb_size, (caddr_t *)&(sc->sc_fb1), dma_flags |
BUS_DMA_COHERENT))
+               return -2;
+
+       sc->sc_active = p;
+       return 0;
+}
+
+int
+amdisplay_intr(void *arg)
+{
+       return 0;
+}
+
+int
+amdisplay_ioctl(void *sconf, u_long cmd, caddr_t data, int flat, struct
proc *p)
+{
+       return -1;
+}
+
+paddr_t
+amdisplay_mmap(void *sconf, off_t off, int prot)
+{
+       return -1;
+}
+
+int
+amdisplay_alloc_screen(void *sconf, const struct wsscreen_descr *type,
+       void **cookiep, int *curxp, int *curyp, long *attrp)
+{
+       struct amdisplay_softc *sc = sconf;
+       struct rasops_info *ri = sc->ro;
+
+       return rasops_alloc_screen(ri, cookiep, curxp, curyp, attrp);
+}
+
+void
+amdisplay_free_screen(void *sconf, void *cookie)
+{
+       struct amdisplay_softc *sc = sconf;
+       struct rasops_info *ri = sc->ro;
+
+       return rasops_free_screen(ri, cookie);
+}
+
+int
+amdisplay_show_screen(void *sconf, void *cookie, int waitok,
+       void (*cb)(void *, int, int), void *cbarg)
+{
+       return (0);
+}
+
+void
+amdisplay_doswitch(void *v, void *dummy)
+{
+}
+
+int
+amdisplay_getchar(void *sconf, int row, int col, struct
wsdisplay_charcell *cell)
+{
+       struct amdisplay_softc *sc = sconf;
+       struct rasops_info *ri = sc->ro;
+
+       return rasops_getchar(ri, row, col, cell);
+}
+
+int
+amdisplay_load_font(void *sconf, void *cookie, struct wsdisplay_font
*font)
+{
+       struct amdisplay_softc *sc = sconf;
+       struct rasops_info *ri = sc->ro;
+
+       return rasops_load_font(ri, cookie, font);
+}
+
+int
+amdisplay_list_font(void *sconf, struct wsdisplay_font *font)
+{
+       struct amdisplay_softc *sc = sconf;
+       struct rasops_info *ri = sc->ro;
+
+       return rasops_list_font(ri, font);
+}
+
+void
+amdisplay_burner(void *sconf, u_int on, u_int flags)
+{
+}
Index: sys/arch/armv7/omap/files.omap
===================================================================
RCS file: /cvs/src/sys/arch/armv7/omap/files.omap,v
retrieving revision 1.13
diff -u -p -r1.13 files.omap
--- sys/arch/armv7/omap/files.omap      26 Jun 2016 09:06:35 -0000
1.13
+++ sys/arch/armv7/omap/files.omap      7 Aug 2016 07:40:40 -0000
@@ -81,6 +81,11 @@ device omdisplay: wsemuldisplaydev, raso
 attach omdisplay at omap
 file arch/armv7/omap/omdisplay.c               omdisplay
 
+# am335x LCD frame buffer
+device amdisplay: wsemuldisplaydev, rasops16
+attach amdisplay at fdt
+file arch/armv7/omap/amdisplay.c               amdisplay
+
 # MCSPI - spi 
 device mcspi 
 attach mcspi at omap
Index: sys/arch/armv7/omap/prcm.c
===================================================================
RCS file: /cvs/src/sys/arch/armv7/omap/prcm.c,v
retrieving revision 1.11
diff -u -p -r1.11 prcm.c
--- sys/arch/armv7/omap/prcm.c  18 Jul 2016 15:03:01 -0000      1.11
+++ sys/arch/armv7/omap/prcm.c  7 Aug 2016 07:40:40 -0000
@@ -336,6 +336,8 @@ prcm_am335x_clkctrl(int mod)
                return PRCM_AM335X_I2C1_CLKCTRL;
        case PRCM_I2C2:
                return PRCM_AM335X_I2C2_CLKCTRL;
+       case PRCM_LCDC:
+               return PRCM_AM335X_LCDC_CLKCTRL;
        default:
                panic("%s: module not found\n", __func__);
        }
Index: sys/arch/armv7/omap/prcmvar.h
===================================================================
RCS file: /cvs/src/sys/arch/armv7/omap/prcmvar.h,v
retrieving revision 1.6
diff -u -p -r1.6 prcmvar.h
--- sys/arch/armv7/omap/prcmvar.h       18 Jul 2016 15:03:01 -0000
1.6
+++ sys/arch/armv7/omap/prcmvar.h       7 Aug 2016 07:40:40 -0000
@@ -54,6 +54,7 @@ enum PRCM_MODULES {
        PRCM_I2C1,
        PRCM_I2C2,
        PRCM_I2C3,
+       PRCM_LCDC,
 };
 
 #define PRCM_REG_MAX   6


Reply via email to