瀏覽代碼

Blackfin arch: add BF54x missing GPIO access functions

Signed-off-by: Michael Hennerich <michael.hennerich@analog.com>
Signed-off-by: Bryan Wu <bryan.wu@analog.com>
Michael Hennerich 18 年之前
父節點
當前提交
cefe658bca
共有 3 個文件被更改,包括 22 次插入3 次删除
  1. 17 0
      arch/blackfin/mach-bf548/gpio.c
  2. 3 1
      include/asm-blackfin/gpio.h
  3. 2 2
      include/asm-blackfin/mach-bf548/gpio.h

+ 17 - 0
arch/blackfin/mach-bf548/gpio.c

@@ -52,6 +52,7 @@ inline int check_gpio(unsigned short gpio)
 {
 {
 	if (gpio == GPIO_PB15 || gpio == GPIO_PC14 || gpio == GPIO_PC15 \
 	if (gpio == GPIO_PB15 || gpio == GPIO_PC14 || gpio == GPIO_PC15 \
 			|| gpio == GPIO_PH14 || gpio == GPIO_PH15 \
 			|| gpio == GPIO_PH14 || gpio == GPIO_PH15 \
+			|| gpio == GPIO_PJ14 || gpio == GPIO_PJ15 \
 			|| gpio > MAX_BLACKFIN_GPIOS)
 			|| gpio > MAX_BLACKFIN_GPIOS)
 		return -EINVAL;
 		return -EINVAL;
 	return 0;
 	return 0;
@@ -173,3 +174,19 @@ void gpio_direction_output(unsigned short gpio)
 	local_irq_restore(flags);
 	local_irq_restore(flags);
 }
 }
 EXPORT_SYMBOL(gpio_direction_output);
 EXPORT_SYMBOL(gpio_direction_output);
+
+void gpio_set_value(unsigned short gpio, unsigned short arg)
+{
+	if (arg)
+		gpio_array[gpio_bank(gpio)]->port_set = gpio_bit(gpio);
+	else
+		gpio_array[gpio_bank(gpio)]->port_clear = gpio_bit(gpio);
+
+}
+EXPORT_SYMBOL(gpio_set_value);
+
+unsigned short gpio_get_value(unsigned short gpio)
+{
+	return (1 & (gpio_array[gpio_bank(gpio)]->port_data >> gpio_sub_n(gpio)));
+}
+EXPORT_SYMBOL(gpio_get_value);

+ 3 - 1
include/asm-blackfin/gpio.h

@@ -234,6 +234,7 @@
 * MODIFICATION HISTORY :
 * MODIFICATION HISTORY :
 **************************************************************/
 **************************************************************/
 
 
+#ifndef BF548_FAMILY
 void set_gpio_dir(unsigned short, unsigned short);
 void set_gpio_dir(unsigned short, unsigned short);
 void set_gpio_inen(unsigned short, unsigned short);
 void set_gpio_inen(unsigned short, unsigned short);
 void set_gpio_polar(unsigned short, unsigned short);
 void set_gpio_polar(unsigned short, unsigned short);
@@ -268,7 +269,6 @@ unsigned short get_gpiop_maska(unsigned short);
 unsigned short get_gpiop_maskb(unsigned short);
 unsigned short get_gpiop_maskb(unsigned short);
 unsigned short get_gpiop_data(unsigned short);
 unsigned short get_gpiop_data(unsigned short);
 
 
-#ifndef BF548_FAMILY
 struct gpio_port_t {
 struct gpio_port_t {
 	unsigned short data;
 	unsigned short data;
 	unsigned short dummy1;
 	unsigned short dummy1;
@@ -363,8 +363,10 @@ void gpio_free(unsigned short);
 void gpio_set_value(unsigned short gpio, unsigned short arg);
 void gpio_set_value(unsigned short gpio, unsigned short arg);
 unsigned short gpio_get_value(unsigned short gpio);
 unsigned short gpio_get_value(unsigned short gpio);
 
 
+#ifndef BF548_FAMILY
 #define gpio_get_value(gpio) 		get_gpio_data(gpio)
 #define gpio_get_value(gpio) 		get_gpio_data(gpio)
 #define gpio_set_value(gpio, value)	set_gpio_data(gpio, value)
 #define gpio_set_value(gpio, value)	set_gpio_data(gpio, value)
+#endif
 
 
 void gpio_direction_input(unsigned short gpio);
 void gpio_direction_input(unsigned short gpio);
 void gpio_direction_output(unsigned short gpio);
 void gpio_direction_output(unsigned short gpio);

+ 2 - 2
include/asm-blackfin/mach-bf548/gpio.h

@@ -187,8 +187,8 @@
 #define GPIO_PJ11	155
 #define GPIO_PJ11	155
 #define GPIO_PJ12	156
 #define GPIO_PJ12	156
 #define GPIO_PJ13	157
 #define GPIO_PJ13	157
-#define GPIO_PJ14	158
-#define GPIO_PJ15	159
+#define GPIO_PJ14	158	/* N/A */
+#define GPIO_PJ15	159	/* N/A */
 
 
 #define MAX_BLACKFIN_GPIOS 160
 #define MAX_BLACKFIN_GPIOS 160