svn commit: r194653 - head/sys/arm/xscale/ixp425
Sam Leffler
sam at FreeBSD.org
Mon Jun 22 20:38:56 UTC 2009
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;
More information about the svn-src-head
mailing list