From a8c053089c7e22b8d329065d7ff65237f6f690f4 Mon Sep 17 00:00:00 2001 From: Sam Leffler Date: Mon, 22 Jun 2009 20:38:55 +0000 Subject: [PATCH] add ixp425_set_gpio to program the gpio interrupt type --- sys/arm/xscale/ixp425/avila_ata.c | 11 +---------- sys/arm/xscale/ixp425/ixp425.c | 19 +++++++++++++++++++ sys/arm/xscale/ixp425/ixp425var.h | 2 ++ 3 files changed, 22 insertions(+), 10 deletions(-) diff --git a/sys/arm/xscale/ixp425/avila_ata.c b/sys/arm/xscale/ixp425/avila_ata.c index c0ec15fba8e..1d9708ca53f 100644 --- a/sys/arm/xscale/ixp425/avila_ata.c +++ b/sys/arm/xscale/ixp425/avila_ata.c @@ -218,16 +218,7 @@ ata_avila_attach(device_t dev) rman_set_bustag(&sc->sc_alt_ata, &sc->sc_expbus_tag); rman_set_bushandle(&sc->sc_alt_ata, sc->sc_alt_ioh); - GPIO_CONF_WRITE_4(sa, IXP425_GPIO_GPOER, - GPIO_CONF_READ_4(sa, IXP425_GPIO_GPOER) | (1<gpin)); - /* set interrupt type */ - GPIO_CONF_WRITE_4(sa, GPIO_TYPE_REG(config->gpin), - (GPIO_CONF_READ_4(sa, GPIO_TYPE_REG(config->gpin)) &~ - GPIO_TYPE(config->gpin, GPIO_TYPE_MASK)) | - GPIO_TYPE(config->gpin, GPIO_TYPE_EDG_RISING)); - - /* clear ISR */ - GPIO_CONF_WRITE_4(sa, IXP425_GPIO_GPISR, (1<gpin)); + ixp425_set_gpio(sa, config->gpin, GPIO_TYPE_EDG_RISING); /* configure CS1/3 window, leaving timing unchanged */ EXP_BUS_WRITE_4(sc, sc->sc_16bit_off, diff --git a/sys/arm/xscale/ixp425/ixp425.c b/sys/arm/xscale/ixp425/ixp425.c index ffe48ae2919..bc67fc488ff 100644 --- a/sys/arm/xscale/ixp425/ixp425.c +++ b/sys/arm/xscale/ixp425/ixp425.c @@ -159,6 +159,25 @@ DB_SHOW_COMMAND(gpio, db_show_gpio) } #endif +void +ixp425_set_gpio(struct ixp425_softc *sc, int pin, int type) +{ + uint32_t gpiotr = GPIO_CONF_READ_4(sc, GPIO_TYPE_REG(pin)); + + /* clear interrupt type */ + GPIO_CONF_WRITE_4(sc, GPIO_TYPE_REG(pin), + gpiotr &~ GPIO_TYPE(pin, GPIO_TYPE_MASK)); + /* clear any pending interrupt */ + GPIO_CONF_WRITE_4(sc, IXP425_GPIO_GPISR, (1<