Date: Mon, 4 Sep 2006 06:08:46 GMT From: Warner Losh <imp@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 105637 for review Message-ID: <200609040608.k8468kaj023345@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=105637 Change 105637 by imp@imp_lighthouse on 2006/09/04 06:07:47 implement GPIO_CFG, and expand it to allow for selective setting of configuration things as well as which bits to set. # This gives TSC all the control it needs from userland. Affected files ... .. //depot/projects/arm/src/sys/arm/at91/at91_pio.c#17 edit .. //depot/projects/arm/src/sys/sys/gpio.h#3 edit Differences ... ==== //depot/projects/arm/src/sys/arm/at91/at91_pio.c#17 (text+ko) ==== @@ -287,8 +287,21 @@ case GPIO_READ: /* Get the status of input bits */ *(uint32_t *)data = RD4(sc, PIO_PDSR); return (0); + case GPIO_CFG: /* Configure GPIO pins */ + if (sc->cfgmask & GPIO_CFG_INPUT) { + WR4(sc, PIO_OER, sc->iomask & ~sc->input); + WR4(sc, PIO_ODR, sc->iomask & sc->input); + } + if (sc->cfgmask & GPIO_CFG_HI_Z) { + WR4(sc, PIO_MDER, sc->iomask & ~sc->hi_z); + WR4(sc, PIO_MDDR, sc->iomask & sc->hi_z); + } + if (ac->cfgmask & GPIO_CFG_PULLUP) { + WR4(sc, PIO_PUER, sc->iomask & ~sc->pullup); + WR4(sc, PIO_PUDR, sc->iomask & sc->pullup); + } + return (0); case GPIO_INFO: /* Learn about this device's GPIO bits */ - case GPIO_CFG: /* Configure GPIO pins */ break; } return (ENOTTY); ==== //depot/projects/arm/src/sys/sys/gpio.h#3 (text+ko) ==== @@ -40,7 +40,11 @@ struct gpio_cfg { - uint32_t mask; /* Mask of bits to change */ + uint32_t cfgmask; /* which things change */ +#define GPIO_CFG_INPUT 1 +#define GPIO_CFG_HI_Z 2 +#define GPIO_CFG_PULLUP 4 + uint32_t iomask; /* Mask of bits to change */ uint32_t input; /* or output */ uint32_t hi_z; /* Disable output */ uint32_t pullup; /* Enable pullup resistor */
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200609040608.k8468kaj023345>