diff options
author | Mark Kettenis <kettenis@cvs.openbsd.org> | 2017-03-05 20:53:20 +0000 |
---|---|---|
committer | Mark Kettenis <kettenis@cvs.openbsd.org> | 2017-03-05 20:53:20 +0000 |
commit | f1a7723221ba707463948428b57eb471cbf657bd (patch) | |
tree | 31ce458f54492641568ffc8b5ddacf0b332fbb3c | |
parent | 6a15cbd70e98f6f1be51ec7678674c04f8a3462c (diff) |
Turn exgpio(4) into a pinctrl driver.
-rw-r--r-- | sys/arch/armv7/conf/GENERIC | 4 | ||||
-rw-r--r-- | sys/arch/armv7/exynos/exehci.c | 3 | ||||
-rw-r--r-- | sys/arch/armv7/exynos/exesdhc.c | 9 | ||||
-rw-r--r-- | sys/arch/armv7/exynos/exgpio.c | 390 | ||||
-rw-r--r-- | sys/arch/armv7/exynos/exgpiovar.h | 41 | ||||
-rw-r--r-- | sys/arch/armv7/exynos/exiic.c | 1 | ||||
-rw-r--r-- | sys/arch/armv7/exynos/files.exynos | 4 |
7 files changed, 172 insertions, 280 deletions
diff --git a/sys/arch/armv7/conf/GENERIC b/sys/arch/armv7/conf/GENERIC index 3da2e6867d9..48c98dab856 100644 --- a/sys/arch/armv7/conf/GENERIC +++ b/sys/arch/armv7/conf/GENERIC @@ -1,4 +1,4 @@ -# $OpenBSD: GENERIC,v 1.73 2017/03/04 18:17:24 kettenis Exp $ +# $OpenBSD: GENERIC,v 1.74 2017/03/05 20:53:19 kettenis Exp $ # # For further information on compiling OpenBSD kernels, see the config(8) # man page. @@ -120,7 +120,7 @@ expower* at fdt? early 1 exsysreg* at fdt? early 1 exmct* at fdt? early 1 exdog* at fdt? -exgpio* at exynos? +exgpio* at fdt? early 1 exiic* at exynos? iic* at exiic? exehci* at fdt? diff --git a/sys/arch/armv7/exynos/exehci.c b/sys/arch/armv7/exynos/exehci.c index b0f7f73e6fd..347b08bbb87 100644 --- a/sys/arch/armv7/exynos/exehci.c +++ b/sys/arch/armv7/exynos/exehci.c @@ -1,4 +1,4 @@ -/* $OpenBSD: exehci.c,v 1.5 2017/03/04 18:17:24 kettenis Exp $ */ +/* $OpenBSD: exehci.c,v 1.6 2017/03/05 20:53:19 kettenis Exp $ */ /* * Copyright (c) 2012-2013 Patrick Wildt <patrick@blueri.se> * @@ -32,7 +32,6 @@ #include <armv7/armv7/armv7var.h> #include <armv7/exynos/exsysregvar.h> #include <armv7/exynos/expowervar.h> -#include <armv7/exynos/exgpiovar.h> #include <dev/ofw/openfirm.h> #include <dev/ofw/ofw_clock.h> diff --git a/sys/arch/armv7/exynos/exesdhc.c b/sys/arch/armv7/exynos/exesdhc.c index 3a913d631bb..0cb87c40d02 100644 --- a/sys/arch/armv7/exynos/exesdhc.c +++ b/sys/arch/armv7/exynos/exesdhc.c @@ -1,4 +1,4 @@ -/* $OpenBSD: exesdhc.c,v 1.10 2017/03/04 18:17:24 kettenis Exp $ */ +/* $OpenBSD: exesdhc.c,v 1.11 2017/03/05 20:53:19 kettenis Exp $ */ /* * Copyright (c) 2009 Dale Rahn <drahn@openbsd.org> * Copyright (c) 2006 Uwe Stuehler <uwe@openbsd.org> @@ -42,7 +42,6 @@ #include <armv7/armv7/armv7var.h> #include <armv7/exynos/exclockvar.h> -#include <armv7/exynos/exgpiovar.h> /* registers */ #define SDHC_DS_ADDR 0x00 @@ -266,6 +265,8 @@ exesdhc_attach(struct device *parent, struct device *self, void *aux) struct sdmmcbus_attach_args saa; uint32_t caps; + pinctrl_byname(faa->fa_node, "default"); + sc->sc_iot = faa->fa_iot; if (bus_space_map(sc->sc_iot, faa->fa_reg[0].addr, @@ -446,6 +447,7 @@ exesdhc_host_maxblklen(sdmmc_chipset_handle_t sch) int exesdhc_card_detect(sdmmc_chipset_handle_t sch) { +#if 0 struct exesdhc_softc *sc = sch; int gpio; @@ -466,6 +468,9 @@ exesdhc_card_detect(sdmmc_chipset_handle_t sch) default: return 1; } +#else + return 1; +#endif } /* diff --git a/sys/arch/armv7/exynos/exgpio.c b/sys/arch/armv7/exynos/exgpio.c index beaa9a2a8b7..981e8293dbf 100644 --- a/sys/arch/armv7/exynos/exgpio.c +++ b/sys/arch/armv7/exynos/exgpio.c @@ -1,7 +1,8 @@ -/* $OpenBSD: exgpio.c,v 1.4 2016/07/26 22:10:10 patrick Exp $ */ +/* $OpenBSD: exgpio.c,v 1.5 2017/03/05 20:53:19 kettenis Exp $ */ /* * Copyright (c) 2007,2009 Dale Rahn <drahn@openbsd.org> * Copyright (c) 2012-2013 Patrick Wildt <patrick@blueri.se> + * Copyright (c) 2017 Mark Kettenis <kettenis@openbsd.org> * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -18,83 +19,45 @@ #include <sys/param.h> #include <sys/systm.h> -#include <sys/queue.h> #include <sys/device.h> #include <sys/malloc.h> -#include <sys/evcount.h> - -#include <arm/cpufunc.h> #include <machine/bus.h> -#if NFDT > 0 #include <machine/fdt.h> -#endif #include <machine/intr.h> -#include <armv7/armv7/armv7var.h> -#include <armv7/exynos/exgpiovar.h> - -/* Exynos5 registers */ -#define GPIO_BANK_SIZE 0x20 -#define GPIO_BANK(x) (GPIO_BANK_SIZE * ((x) / 8)) -#define GPIO_CON(x) (GPIO_BANK(x) + 0x00) -#define GPIO_DAT(x) (GPIO_BANK(x) + 0x04) -#define GPIO_PULL(x) (GPIO_BANK(x) + 0x08) -#define GPIO_DRV(x) (GPIO_BANK(x) + 0x0c) -#define GPIO_PDN_CON(x) (GPIO_BANK(x) + 0x10) -#define GPIO_PDN_PULL(x) (GPIO_BANK(x) + 0x14) - -/* bits and bytes */ -#define GPIO_PIN(x) ((x) % 8) -#define GPIO_CON_INPUT(x) (0x0 << (GPIO_PIN(x) << 2)) -#define GPIO_CON_OUTPUT(x) (0x1 << (GPIO_PIN(x) << 2)) -#define GPIO_CON_IRQ(x) (0xf << (GPIO_PIN(x) << 2)) -#define GPIO_CON_MASK(x) (0xf << (GPIO_PIN(x) << 2)) -#define GPIO_DAT_SET(x) (0x1 << (GPIO_PIN(x) << 0)) -#define GPIO_DAT_MASK(x) (0x1 << (GPIO_PIN(x) << 0)) -#define GPIO_PULL_NONE(x) (0x0 << (GPIO_PIN(x) << 1)) -#define GPIO_PULL_DOWN(x) (0x1 << (GPIO_PIN(x) << 1)) -#define GPIO_PULL_UP(x) (0x3 << (GPIO_PIN(x) << 1)) -#define GPIO_PULL_MASK(x) (0x3 << (GPIO_PIN(x) << 1)) -#define GPIO_DRV_1X(x) (0x0 << (GPIO_PIN(x) << 1)) -#define GPIO_DRV_2X(x) (0x1 << (GPIO_PIN(x) << 1)) -#define GPIO_DRV_3X(x) (0x2 << (GPIO_PIN(x) << 1)) -#define GPIO_DRV_4X(x) (0x3 << (GPIO_PIN(x) << 1)) -#define GPIO_DRV_MASK(x) (0x3 << (GPIO_PIN(x) << 1)) - -#define GPIO_PINS_PER_BANK 8 +#include <dev/ofw/openfirm.h> +#include <dev/ofw/ofw_pinctrl.h> +#include <dev/ofw/fdt.h> + +#define GPXCON(x) ((x) + 0x0000) +#define GPXDAT(x) ((x) + 0x0004) +#define GPXPUD(x) ((x) + 0x0008) +#define GPXDRV(x) ((x) + 0x000c) + +#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)) + +struct exgpio_bank { + const char name[8]; + bus_addr_t addr; +}; struct exgpio_softc { struct device sc_dev; bus_space_tag_t sc_iot; bus_space_handle_t sc_ioh; - int sc_ngpio; - unsigned int (*sc_get_bit)(struct exgpio_softc *sc, - unsigned int gpio); - void (*sc_set_bit)(struct exgpio_softc *sc, - unsigned int gpio); - void (*sc_clear_bit)(struct exgpio_softc *sc, - unsigned int gpio); - void (*sc_set_dir)(struct exgpio_softc *sc, - unsigned int gpio, unsigned int dir); -}; - -int exgpio_match(struct device *parent, void *v, void *aux); -void exgpio_attach(struct device *parent, struct device *self, void *args); -struct exgpio_softc *exgpio_pin_to_inst(unsigned int); -unsigned int exgpio_pin_to_offset(unsigned int); -unsigned int exgpio_v5_get_bit(struct exgpio_softc *, unsigned int); -void exgpio_v5_set_bit(struct exgpio_softc *, unsigned int); -void exgpio_v5_clear_bit(struct exgpio_softc *, unsigned int); -void exgpio_v5_set_dir(struct exgpio_softc *, unsigned int, unsigned int); -unsigned int exgpio_v5_get_dir(struct exgpio_softc *, unsigned int); + struct exgpio_bank *sc_banks; + int sc_nbanks; +}; +int exgpio_match(struct device *, void *, void *); +void exgpio_attach(struct device *, struct device *, void *); struct cfattach exgpio_ca = { - sizeof (struct exgpio_softc), NULL, exgpio_attach -}; -struct cfattach exgpio_fdt_ca = { sizeof (struct exgpio_softc), exgpio_match, exgpio_attach }; @@ -102,192 +65,159 @@ struct cfdriver exgpio_cd = { NULL, "exgpio", DV_DULL }; +/* Exynos 5420/5422 */ +struct exgpio_bank exynos5420_banks[] = { + /* Controller 0 */ + { "gpy7", 0x0000 }, + { "gpx0", 0x0c00 }, + { "gpx1", 0x0c20 }, + { "gpx2", 0x0c40 }, + { "gpx3", 0x0c60 }, + + /* Controller 1 */ + { "gpc0", 0x0000 }, + { "gpc1", 0x0020 }, + { "gpc2", 0x0040 }, + { "gpc3", 0x0060 }, + { "gpc4", 0x0080 }, + { "gpd1", 0x00a0 }, + { "gpy0", 0x00c0 }, + { "gpy1", 0x00e0 }, + { "gpy2", 0x0100 }, + { "gpy3", 0x0120 }, + { "gpy4", 0x0140 }, + { "gpy5", 0x0160 }, + { "gpy6", 0x0180 }, + + /* Controller 2 */ + { "gpe0", 0x0000 }, + { "gpe1", 0x0020 }, + { "gpf0", 0x0040 }, + { "gpf1", 0x0060 }, + { "gpg0", 0x0080 }, + { "gpg1", 0x00a0 }, + { "gpg2", 0x00c0 }, + { "gpj4", 0x00e0 }, + + /* Controller 3 */ + { "gpa0", 0x0000 }, + { "gpa1", 0x0020 }, + { "gpa2", 0x0040 }, + { "gpb0", 0x0060 }, + { "gpb1", 0x0080 }, + { "gpb2", 0x00a0 }, + { "gpb3", 0x00c0 }, + { "gpb4", 0x00e0 }, + { "gph0", 0x0100 }, + + /* Controller 4 */ + { "gpz", 0x0000 }, +}; + +int exgpio_pinctrl(uint32_t, void *); + int -exgpio_match(struct device *parent, void *v, void *aux) +exgpio_match(struct device *parent, void *match, void *aux) { -#if NFDT > 0 - struct armv7_attach_args *aa = aux; - - if (fdt_node_compatible("samsung,exynos5250-pinctrl", aa->aa_node)) - return 1; -#endif + struct fdt_attach_args *faa = aux; - return 0; + return OF_is_compatible(faa->fa_node, "samsung,exynos5420-pinctrl"); } void -exgpio_attach(struct device *parent, struct device *self, void *args) +exgpio_attach(struct device *parent, struct device *self, void *aux) { - struct armv7_attach_args *aa = args; - struct exgpio_softc *sc = (struct exgpio_softc *) self; - struct armv7mem mem; - - sc->sc_iot = aa->aa_iot; -#if NFDT > 0 - if (aa->aa_node) { - struct fdt_reg reg; - if (fdt_get_reg(aa->aa_node, 0, ®)) - panic("%s: could not extract memory data from FDT", - __func__); - mem.addr = reg.addr; - mem.size = reg.size; - } else -#endif - { - mem.addr = aa->aa_dev->mem[0].addr; - mem.size = aa->aa_dev->mem[0].size; - } - if (bus_space_map(sc->sc_iot, mem.addr, mem.size, 0, &sc->sc_ioh)) - panic("%s: bus_space_map failed!", __func__); - - sc->sc_ngpio = (mem.size / GPIO_BANK_SIZE) * GPIO_PINS_PER_BANK; + struct exgpio_softc *sc = (struct exgpio_softc *)self; + struct fdt_attach_args *faa = aux; - sc->sc_get_bit = exgpio_v5_get_bit; - sc->sc_set_bit = exgpio_v5_set_bit; - sc->sc_clear_bit = exgpio_v5_clear_bit; - sc->sc_set_dir = exgpio_v5_set_dir; - - printf("\n"); + sc->sc_iot = faa->fa_iot; - /* XXX - IRQ */ - /* XXX - SYSCONFIG */ - /* XXX - CTRL */ - /* XXX - DEBOUNCE */ -} - -struct exgpio_softc * -exgpio_pin_to_inst(unsigned int gpio) -{ - int i; + 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__); - for (i = 0; exgpio_cd.cd_devs[i] != NULL; i++) - { - struct exgpio_softc *sc = exgpio_cd.cd_devs[i]; - if (gpio < sc->sc_ngpio) - return sc; - else - gpio -= sc->sc_ngpio; + if (OF_is_compatible(faa->fa_node, "samsung,exynos5420-pinctrl")) { + sc->sc_banks = exynos5420_banks; + sc->sc_nbanks = nitems(exynos5420_banks); } - return NULL; + pinctrl_register(faa->fa_node, exgpio_pinctrl, sc); + printf("\n"); } -unsigned int -exgpio_pin_to_offset(unsigned int gpio) +int +exgpio_pinctrl(uint32_t phandle, void *cookie) { + struct exgpio_softc *sc = cookie; + char *pins; + char *bank, *next; + uint32_t func, val, pud, drv; + uint32_t reg; + int node; + int len; + int pin; int i; - for (i = 0; exgpio_cd.cd_devs[i] != NULL; i++) - { - struct exgpio_softc *sc = exgpio_cd.cd_devs[i]; - if (gpio < sc->sc_ngpio) - return gpio; - else - gpio -= sc->sc_ngpio; + node = OF_getnodebyphandle(phandle); + if (node == 0) + return -1; + + len = OF_getproplen(node, "samsung,pins"); + if (len <= 0) + return -1; + + pins = malloc(len, M_TEMP, M_WAITOK); + OF_getprop(node, "samsung,pins", pins, len); + + func = OF_getpropint(node, "samsung,pin-function", 0); + val = OF_getpropint(node, "samsung,pin-val", 0); + pud = OF_getpropint(node, "samsung,pin-pud", 1); + drv = OF_getpropint(node, "samsung,pin-drv", 0); + + bank = pins; + while (bank < pins + len) { + next = strchr(bank, '-'); + if (next == NULL) + return -1; + *next++ = 0; + pin = *next++ - '0'; + if (pin < 0 || pin > 7) + return -1; + next++; + + for (i = 0; i < sc->sc_nbanks; i++) { + if (strcmp(bank, sc->sc_banks[i].name) != 0) + break; + + reg = HREAD4(sc, GPXCON(sc->sc_banks[i].addr)); + reg &= ~(0xf << (pin * 4)); + reg |= (func << (pin * 4)); + HWRITE4(sc, GPXCON(sc->sc_banks[i].addr), reg); + + reg = HREAD4(sc, GPXDAT(sc->sc_banks[i].addr)); + if (val) + reg |= (1 << pin); + else + reg &= ~(1 << pin); + HWRITE4(sc, GPXDAT(sc->sc_banks[i].addr), reg); + + reg = HREAD4(sc, GPXPUD(sc->sc_banks[i].addr)); + reg &= ~(0x3 << (pin * 2)); + reg |= (pud << (pin * 2)); + HWRITE4(sc, GPXPUD(sc->sc_banks[i].addr), reg); + + reg = HREAD4(sc, GPXDRV(sc->sc_banks[i].addr)); + reg &= ~(0x3 << (pin * 2)); + reg |= (drv << (pin * 2)); + HWRITE4(sc, GPXDRV(sc->sc_banks[i].addr), reg); + break; + } + if (i == sc->sc_nbanks) + return -1; + + bank = next; } + free(pins, M_TEMP, len); return 0; } - -unsigned int -exgpio_get_bit(unsigned int gpio) -{ - struct exgpio_softc *sc = exgpio_pin_to_inst(gpio); - - return sc->sc_get_bit(sc, gpio); -} - -void -exgpio_set_bit(unsigned int gpio) -{ - struct exgpio_softc *sc = exgpio_pin_to_inst(gpio); - - sc->sc_set_bit(sc, gpio); -} - -void -exgpio_clear_bit(unsigned int gpio) -{ - struct exgpio_softc *sc = exgpio_pin_to_inst(gpio); - - sc->sc_clear_bit(sc, gpio); -} -void -exgpio_set_dir(unsigned int gpio, unsigned int dir) -{ - struct exgpio_softc *sc = exgpio_pin_to_inst(gpio); - - sc->sc_set_dir(sc, gpio, dir); -} - -unsigned int -exgpio_v5_get_bit(struct exgpio_softc *sc, unsigned int gpio) -{ - u_int32_t val; - - gpio = exgpio_pin_to_offset(gpio); - val = bus_space_read_4(sc->sc_iot, sc->sc_ioh, GPIO_DAT(gpio)); - - return !!(val & GPIO_DAT_SET(gpio)); -} - -void -exgpio_v5_set_bit(struct exgpio_softc *sc, unsigned int gpio) -{ - u_int32_t val; - - gpio = exgpio_pin_to_offset(gpio); - val = bus_space_read_4(sc->sc_iot, sc->sc_ioh, GPIO_DAT(gpio)); - - bus_space_write_4(sc->sc_iot, sc->sc_ioh, GPIO_DAT(gpio), - val | GPIO_DAT_SET(gpio)); -} - -void -exgpio_v5_clear_bit(struct exgpio_softc *sc, unsigned int gpio) -{ - u_int32_t val; - - gpio = exgpio_pin_to_offset(gpio); - val = bus_space_read_4(sc->sc_iot, sc->sc_ioh, GPIO_DAT(gpio)); - - bus_space_write_4(sc->sc_iot, sc->sc_ioh, GPIO_DAT(gpio), - val & ~GPIO_DAT_MASK(gpio)); -} - -void -exgpio_v5_set_dir(struct exgpio_softc *sc, unsigned int gpio, unsigned int dir) -{ - int s; - u_int32_t val; - - gpio = exgpio_pin_to_offset(gpio); - s = splhigh(); - - val = bus_space_read_4(sc->sc_iot, sc->sc_ioh, GPIO_CON(gpio)); - val &= ~GPIO_CON_OUTPUT(gpio); - if (dir == EXGPIO_DIR_OUT) - val |= GPIO_CON_OUTPUT(gpio); - bus_space_write_4(sc->sc_iot, sc->sc_ioh, GPIO_CON(gpio), val); - - splx(s); -} - -unsigned int -exgpio_v5_get_dir(struct exgpio_softc *sc, unsigned int gpio) -{ - int s; - u_int32_t val; - - gpio = exgpio_pin_to_offset(gpio); - s = splhigh(); - - val = bus_space_read_4(sc->sc_iot, sc->sc_ioh, GPIO_CON(gpio)); - if (val & GPIO_CON_OUTPUT(gpio)) - val = EXGPIO_DIR_OUT; - else - val = EXGPIO_DIR_IN; - - splx(s); - return val; -} diff --git a/sys/arch/armv7/exynos/exgpiovar.h b/sys/arch/armv7/exynos/exgpiovar.h deleted file mode 100644 index a53b9fedd3d..00000000000 --- a/sys/arch/armv7/exynos/exgpiovar.h +++ /dev/null @@ -1,41 +0,0 @@ -/* $OpenBSD: exgpiovar.h,v 1.1 2015/01/26 02:48:24 bmercer Exp $ */ -/* - * Copyright (c) 2007,2009 Dale Rahn <drahn@openbsd.org> - * Copyright (c) 2012-2013 Patrick Wildt <patrick@blueri.se> - * - * 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. - */ - -#ifndef EXGPIOVAR_H -#define EXGPIOVAR_H - -#define EXGPIO_DIR_IN 0 -#define EXGPIO_DIR_OUT 1 - -unsigned int exgpio_get_function(unsigned int gpio, unsigned int fn); -void exgpio_set_function(unsigned int gpio, unsigned int fn); -unsigned int exgpio_get_bit(unsigned int gpio); -void exgpio_set_bit(unsigned int gpio); -void exgpio_clear_bit(unsigned int gpio); -void exgpio_set_dir(unsigned int gpio, unsigned int dir); - -/* interrupts */ -void exgpio_clear_intr(unsigned int gpio); -void exgpio_intr_mask(unsigned int gpio); -void exgpio_intr_unmask(unsigned int gpio); -void exgpio_intr_level(unsigned int gpio, unsigned int level); -void *exgpio_intr_establish(unsigned int gpio, int level, int spl, - int (*func)(void *), void *arg, char *name); -void exgpio_intr_disestablish(void *cookie); - -#endif /* EXGPIOVAR_H */ diff --git a/sys/arch/armv7/exynos/exiic.c b/sys/arch/armv7/exynos/exiic.c index de4f90da738..c69c94563d7 100644 --- a/sys/arch/armv7/exynos/exiic.c +++ b/sys/arch/armv7/exynos/exiic.c @@ -26,7 +26,6 @@ #endif #include <armv7/armv7/armv7var.h> -#include <armv7/exynos/exgpiovar.h> #include <armv7/exynos/exiicvar.h> #include <armv7/exynos/exclockvar.h> diff --git a/sys/arch/armv7/exynos/files.exynos b/sys/arch/armv7/exynos/files.exynos index 76def465539..d8a02f5f6ff 100644 --- a/sys/arch/armv7/exynos/files.exynos +++ b/sys/arch/armv7/exynos/files.exynos @@ -1,4 +1,4 @@ -# $OpenBSD: files.exynos,v 1.6 2017/03/04 18:17:24 kettenis Exp $ +# $OpenBSD: files.exynos,v 1.7 2017/03/05 20:53:19 kettenis Exp $ define exynos {} device exynos: exynos @@ -38,7 +38,7 @@ attach exdog at fdt file arch/armv7/exynos/exdog.c exdog device exgpio -attach exgpio at exynos +attach exgpio at fdt file arch/armv7/exynos/exgpio.c exgpio device exiic: i2cbus |