diff options
author | Michael Hennerich <michael.hennerich@analog.com> | 2007-10-10 12:24:40 -0400 |
---|---|---|
committer | Bryan Wu <bryan.wu@analog.com> | 2007-10-10 12:24:40 -0400 |
commit | 2acde902301f73e824101e5ca9eb95dc733dc17d (patch) | |
tree | 0fc37f01db4c0f761a07d2547da31562e770d1db /arch/blackfin/kernel/bfin_gpio.c | |
parent | 55249e9e3d07617e00cc6c52b83f7d1a7eb7e64d (diff) |
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/bfin_gpio.c')
-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 78438d88d22a..b58b0de3c907 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) | |||
930 | 930 | ||
931 | reserved_peri_map[gpio_bank(ident)] &= ~gpio_bit(ident); | 931 | reserved_peri_map[gpio_bank(ident)] &= ~gpio_bit(ident); |
932 | 932 | ||
933 | set_label(ident, "free"); | ||
934 | |||
933 | local_irq_restore(flags); | 935 | local_irq_restore(flags); |
934 | } | 936 | } |
935 | EXPORT_SYMBOL(peripheral_free); | 937 | EXPORT_SYMBOL(peripheral_free); |
@@ -969,6 +971,17 @@ int gpio_request(unsigned short gpio, const char *label) | |||
969 | 971 | ||
970 | local_irq_save(flags); | 972 | local_irq_save(flags); |
971 | 973 | ||
974 | /* | ||
975 | * Allow that the identical GPIO can | ||
976 | * be requested from the same driver twice | ||
977 | * Do nothing and return - | ||
978 | */ | ||
979 | |||
980 | if (cmp_label(gpio, label) == 0) { | ||
981 | local_irq_restore(flags); | ||
982 | return 0; | ||
983 | } | ||
984 | |||
972 | if (unlikely(reserved_gpio_map[gpio_bank(gpio)] & gpio_bit(gpio))) { | 985 | if (unlikely(reserved_gpio_map[gpio_bank(gpio)] & gpio_bit(gpio))) { |
973 | printk(KERN_ERR "bfin-gpio: GPIO %d is already reserved by %s !\n", | 986 | printk(KERN_ERR "bfin-gpio: GPIO %d is already reserved by %s !\n", |
974 | gpio, get_label(gpio)); | 987 | gpio, get_label(gpio)); |
@@ -1016,6 +1029,8 @@ void gpio_free(unsigned short gpio) | |||
1016 | 1029 | ||
1017 | reserved_gpio_map[gpio_bank(gpio)] &= ~gpio_bit(gpio); | 1030 | reserved_gpio_map[gpio_bank(gpio)] &= ~gpio_bit(gpio); |
1018 | 1031 | ||
1032 | set_label(gpio, "free"); | ||
1033 | |||
1019 | local_irq_restore(flags); | 1034 | local_irq_restore(flags); |
1020 | } | 1035 | } |
1021 | EXPORT_SYMBOL(gpio_free); | 1036 | EXPORT_SYMBOL(gpio_free); |