Date: Mon, 22 Jun 2009 20:38:55 +0000 (UTC) From: Sam Leffler <sam@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r194653 - head/sys/arm/xscale/ixp425 Message-ID: <200906222038.n5MKctca051938@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: sam Date: Mon Jun 22 20:38:55 2009 New Revision: 194653 URL: http://svn.freebsd.org/changeset/base/194653 Log: add ixp425_set_gpio to program the gpio interrupt type Modified: head/sys/arm/xscale/ixp425/avila_ata.c head/sys/arm/xscale/ixp425/ixp425.c head/sys/arm/xscale/ixp425/ixp425var.h Modified: head/sys/arm/xscale/ixp425/avila_ata.c ============================================================================== --- head/sys/arm/xscale/ixp425/avila_ata.c Mon Jun 22 20:36:22 2009 (r194652) +++ head/sys/arm/xscale/ixp425/avila_ata.c Mon Jun 22 20:38:55 2009 (r194653) @@ -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<<config->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<<config->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, Modified: head/sys/arm/xscale/ixp425/ixp425.c ============================================================================== --- head/sys/arm/xscale/ixp425/ixp425.c Mon Jun 22 20:36:22 2009 (r194652) +++ head/sys/arm/xscale/ixp425/ixp425.c Mon Jun 22 20:38:55 2009 (r194653) @@ -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<<pin)); + /* set new interrupt type */ + GPIO_CONF_WRITE_4(sc, GPIO_TYPE_REG(pin), + gpiotr | GPIO_TYPE(pin, type)); + + /* configure gpio line as an input */ + GPIO_CONF_WRITE_4(sc, IXP425_GPIO_GPOER, + GPIO_CONF_READ_4(sc, IXP425_GPIO_GPOER) | (1<<pin)); +} + static __inline void ixp425_gpio_ack(int irq) { Modified: head/sys/arm/xscale/ixp425/ixp425var.h ============================================================================== --- head/sys/arm/xscale/ixp425/ixp425var.h Mon Jun 22 20:36:22 2009 (r194652) +++ head/sys/arm/xscale/ixp425/ixp425var.h Mon Jun 22 20:38:55 2009 (r194653) @@ -65,6 +65,8 @@ struct ixp425_softc { bus_dma_tag_t sc_dmat; }; +void ixp425_set_gpio(struct ixp425_softc *sc, int pin, int type); + struct ixppcib_softc { device_t sc_dev;
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200906222038.n5MKctca051938>