diff options
author | Michael Hennerich <michael.hennerich@analog.com> | 2007-10-11 00:24:40 +0800 |
---|---|---|
committer | Bryan Wu <bryan.wu@analog.com> | 2007-10-11 00:24:40 +0800 |
commit | 2acde902301f73e824101e5ca9eb95dc733dc17d (patch) | |
tree | 0fc37f01db4c0f761a07d2547da31562e770d1db /arch/blackfin/kernel | |
parent | 55249e9e3d07617e00cc6c52b83f7d1a7eb7e64d (diff) | |
download | op-kernel-dev-2acde902301f73e824101e5ca9eb95dc733dc17d.zip op-kernel-dev-2acde902301f73e824101e5ca9eb95dc733dc17d.tar.gz |
Blackfin arch: a few things still use bfin_read_PORT_FER()
- Update gpio_request to allow multiple request with the same signature (label)
- Use generic GPIO API where applicable
- Update generic board support form stamp board
Signed-off-by: Michael Hennerich <michael.hennerich@analog.com>
Signed-off-by: Bryan Wu <bryan.wu@analog.com>
Diffstat (limited to 'arch/blackfin/kernel')
-rw-r--r-- | arch/blackfin/kernel/bfin_gpio.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/arch/blackfin/kernel/bfin_gpio.c b/arch/blackfin/kernel/bfin_gpio.c index 78438d8..b58b0de 100644 --- a/arch/blackfin/kernel/bfin_gpio.c +++ b/arch/blackfin/kernel/bfin_gpio.c @@ -930,6 +930,8 @@ void peripheral_free(unsigned short per) reserved_peri_map[gpio_bank(ident)] &= ~gpio_bit(ident); + set_label(ident, "free"); + local_irq_restore(flags); } EXPORT_SYMBOL(peripheral_free); @@ -969,6 +971,17 @@ int gpio_request(unsigned short gpio, const char *label) local_irq_save(flags); + /* + * Allow that the identical GPIO can + * be requested from the same driver twice + * Do nothing and return - + */ + + if (cmp_label(gpio, label) == 0) { + local_irq_restore(flags); + return 0; + } + if (unlikely(reserved_gpio_map[gpio_bank(gpio)] & gpio_bit(gpio))) { printk(KERN_ERR "bfin-gpio: GPIO %d is already reserved by %s !\n", gpio, get_label(gpio)); @@ -1016,6 +1029,8 @@ void gpio_free(unsigned short gpio) reserved_gpio_map[gpio_bank(gpio)] &= ~gpio_bit(gpio); + set_label(gpio, "free"); + local_irq_restore(flags); } EXPORT_SYMBOL(gpio_free); |