瀏覽代碼

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>
Michael Hennerich 17 年之前
父節點
當前提交
2acde90230
共有 1 個文件被更改,包括 15 次插入0 次删除
  1. 15 0
      arch/blackfin/kernel/bfin_gpio.c

+ 15 - 0
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);