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; _______________________________________________ svn-src-all@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/svn-src-all To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"