diff options
author | sam <sam@FreeBSD.org> | 2009-06-22 20:38:55 +0000 |
---|---|---|
committer | sam <sam@FreeBSD.org> | 2009-06-22 20:38:55 +0000 |
commit | 8c798bdc5358b4ab9c10fc4c8f1e70f3e9cc74a4 (patch) | |
tree | a8cbc380ee6393d97e54a798ed6b99a31f5fe761 /sys/arm/xscale/ixp425/ixp425.c | |
parent | e8030f4a28ba52b796c613adfaa81f2f0983d6fd (diff) | |
download | FreeBSD-src-8c798bdc5358b4ab9c10fc4c8f1e70f3e9cc74a4.zip FreeBSD-src-8c798bdc5358b4ab9c10fc4c8f1e70f3e9cc74a4.tar.gz |
add ixp425_set_gpio to program the gpio interrupt type
Diffstat (limited to 'sys/arm/xscale/ixp425/ixp425.c')
-rw-r--r-- | sys/arm/xscale/ixp425/ixp425.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/sys/arm/xscale/ixp425/ixp425.c b/sys/arm/xscale/ixp425/ixp425.c index ffe48ae..bc67fc48 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<<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) { |