Module Name: src Committed By: kiyohara Date: Sat Oct 15 15:11:56 UTC 2016
Modified Files: src/sys/arch/arm/omap: files.omap2 omap2_gpio.c Log Message: Support TI_AM335X gpio to omap2_gpio.c. To generate a diff of this commit: cvs rdiff -u -r1.35 -r1.36 src/sys/arch/arm/omap/files.omap2 cvs rdiff -u -r1.18 -r1.19 src/sys/arch/arm/omap/omap2_gpio.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/arm/omap/files.omap2 diff -u src/sys/arch/arm/omap/files.omap2:1.35 src/sys/arch/arm/omap/files.omap2:1.36 --- src/sys/arch/arm/omap/files.omap2:1.35 Tue Oct 4 16:10:34 2016 +++ src/sys/arch/arm/omap/files.omap2 Sat Oct 15 15:11:56 2016 @@ -1,4 +1,4 @@ -# $NetBSD: files.omap2,v 1.35 2016/10/04 16:10:34 kiyohara Exp $ +# $NetBSD: files.omap2,v 1.36 2016/10/15 15:11:56 kiyohara Exp $ # # Configuration info for Texas Instruments OMAP2/OMAP3 CPU support # Based on xscale/files.pxa2x0 @@ -59,8 +59,7 @@ file arch/arm/omap/omap2430_intr.c omap # OMAP2 GPIO controllers device omapgpio: gpiobus attach omapgpio at obio with omap2gpio -file arch/arm/omap/omap2_gpio.c (omap2 | omap3) & !ti_am335x & omapgpio -file arch/arm/omap/am335x_gpio.c ti_am335x & omapgpio +file arch/arm/omap/omap2_gpio.c (omap2 | omap3) & omapgpio # TI_AM335X (and maybe TI OMAP4) I2C controllers device tiiic: i2cbus, i2cexec Index: src/sys/arch/arm/omap/omap2_gpio.c diff -u src/sys/arch/arm/omap/omap2_gpio.c:1.18 src/sys/arch/arm/omap/omap2_gpio.c:1.19 --- src/sys/arch/arm/omap/omap2_gpio.c:1.18 Mon Jul 11 14:53:05 2016 +++ src/sys/arch/arm/omap/omap2_gpio.c Sat Oct 15 15:11:56 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: omap2_gpio.c,v 1.18 2016/07/11 14:53:05 kiyohara Exp $ */ +/* $NetBSD: omap2_gpio.c,v 1.19 2016/10/15 15:11:56 kiyohara Exp $ */ /*- * Copyright (c) 2007 The NetBSD Foundation, Inc. * All rights reserved. @@ -28,7 +28,7 @@ * POSSIBILITY OF SUCH DAMAGE. */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: omap2_gpio.c,v 1.18 2016/07/11 14:53:05 kiyohara Exp $"); +__KERNEL_RCSID(0, "$NetBSD: omap2_gpio.c,v 1.19 2016/10/15 15:11:56 kiyohara Exp $"); #define _INTR_PRIVATE @@ -50,9 +50,13 @@ __KERNEL_RCSID(0, "$NetBSD: omap2_gpio.c #include <sys/bus.h> +#include <arm/omap/am335x_prcm.h> #include <arm/omap/omap2_reg.h> #include <arm/omap/omap2_obiovar.h> #include <arm/omap/omap2_gpio.h> +#include <arm/omap/omap2_prcm.h> +#include <arm/omap/sitara_cm.h> +#include <arm/omap/sitara_cmreg.h> #include <arm/pic/picvar.h> #if NGPIO > 0 @@ -60,6 +64,13 @@ __KERNEL_RCSID(0, "$NetBSD: omap2_gpio.c #include <dev/gpio/gpiovar.h> #endif +static const struct omap_module gpio_module[] = { + { 0, 0 }, + { AM335X_PRCM_CM_PER, CM_PER_GPIO1_CLKCTRL }, + { AM335X_PRCM_CM_PER, CM_PER_GPIO2_CLKCTRL }, + { AM335X_PRCM_CM_PER, CM_PER_GPIO3_CLKCTRL }, +}; + static void gpio_pic_block_irqs(struct pic_softc *, size_t, uint32_t); static void gpio_pic_block_irqs2(struct pic_softc *, size_t, uint32_t); static void gpio_pic_unblock_irqs(struct pic_softc *, size_t, uint32_t); @@ -318,16 +329,11 @@ omap2gpio_pin_write(void *arg, int pin, { struct gpio_softc * const gpio = arg; uint32_t mask = 1 << pin; - uint32_t old, new; - old = GPIO_READ(gpio, GPIO_DATAOUT); if (value) - new = old | mask; + GPIO_WRITE(gpio, GPIO_SETDATAOUT, mask); else - new = old & ~mask; - - if (old != new) - GPIO_WRITE(gpio, GPIO_DATAOUT, new); + GPIO_WRITE(gpio, GPIO_CLEARDATAOUT, mask); } static void @@ -524,6 +530,23 @@ gpio_attach(device_t parent, device_t se aprint_normal(", intr %d", oa->obio_intr); } aprint_normal("\n"); + +#ifdef TI_AM335X + switch (oa->obio_addr) { + case GPIO0_BASE_TI_AM335X: + break; + case GPIO1_BASE_TI_AM335X: + prcm_module_enable(&gpio_module[1]); + break; + case GPIO2_BASE_TI_AM335X: + prcm_module_enable(&gpio_module[2]); + break; + case GPIO3_BASE_TI_AM335X: + prcm_module_enable(&gpio_module[3]); + break; + } +#endif + #if NGPIO > 0 #if 0 config_interrupts(self, gpio_attach1);