From 4055fea1aae9e4166535b2823583dec40f9a2527 Mon Sep 17 00:00:00 2001
From: Gabor Juhos <juhosg@openwrt.org>
Date: Thu, 4 Dec 2008 12:17:14 +0000
Subject: make all AR913x GPIO lines usable

SVN-Revision: 13509
---
 target/linux/ar71xx/files/arch/mips/ar71xx/gpio.c     | 19 +++++++++++++++++++
 .../files/include/asm-mips/mach-ar71xx/ar71xx.h       |  1 +
 .../ar71xx/files/include/asm-mips/mach-ar71xx/gpio.h  |  5 +++--
 3 files changed, 23 insertions(+), 2 deletions(-)

(limited to 'target/linux/ar71xx')

diff --git a/target/linux/ar71xx/files/arch/mips/ar71xx/gpio.c b/target/linux/ar71xx/files/arch/mips/ar71xx/gpio.c
index 03bf38b..a3d00ae 100644
--- a/target/linux/ar71xx/files/arch/mips/ar71xx/gpio.c
+++ b/target/linux/ar71xx/files/arch/mips/ar71xx/gpio.c
@@ -22,6 +22,9 @@
 
 static DEFINE_SPINLOCK(ar71xx_gpio_lock);
 
+unsigned long ar71xx_gpio_count;
+EXPORT_SYMBOL(ar71xx_gpio_count);
+
 void __ar71xx_gpio_set_value(unsigned gpio, int value)
 {
 	unsigned long flags;
@@ -129,6 +132,22 @@ void __init ar71xx_gpio_init(void)
 				"AR71xx GPIO controller"))
 		panic("cannot allocate AR71xx GPIO registers page");
 
+	switch (ar71xx_soc) {
+	case AR71XX_SOC_AR7130:
+	case AR71XX_SOC_AR7141:
+	case AR71XX_SOC_AR7161:
+		ar71xx_gpio_chip.ngpio = AR71XX_GPIO_COUNT;
+		break;
+
+	case AR71XX_SOC_AR9130:
+	case AR71XX_SOC_AR9132:
+		ar71xx_gpio_chip.ngpio = AR91XX_GPIO_COUNT;
+		break;
+
+	default:
+		BUG();
+	}
+
 	err = gpiochip_add(&ar71xx_gpio_chip);
 	if (err)
 		panic("cannot add AR71xx GPIO chip, error=%d", err);
diff --git a/target/linux/ar71xx/files/include/asm-mips/mach-ar71xx/ar71xx.h b/target/linux/ar71xx/files/include/asm-mips/mach-ar71xx/ar71xx.h
index 78cf1ca..5e551a1 100644
--- a/target/linux/ar71xx/files/include/asm-mips/mach-ar71xx/ar71xx.h
+++ b/target/linux/ar71xx/files/include/asm-mips/mach-ar71xx/ar71xx.h
@@ -206,6 +206,7 @@ extern void ar71xx_add_device_usb(void) __init;
 #define GPIO_FUNC_USB_CLK_EN	BIT(0)
 
 #define AR71XX_GPIO_COUNT	16
+#define AR91XX_GPIO_COUNT	22
 
 extern void __iomem *ar71xx_gpio_base;
 
diff --git a/target/linux/ar71xx/files/include/asm-mips/mach-ar71xx/gpio.h b/target/linux/ar71xx/files/include/asm-mips/mach-ar71xx/gpio.h
index 3477270..6354d68 100644
--- a/target/linux/ar71xx/files/include/asm-mips/mach-ar71xx/gpio.h
+++ b/target/linux/ar71xx/files/include/asm-mips/mach-ar71xx/gpio.h
@@ -18,6 +18,7 @@
 
 #include <asm/mach-ar71xx/ar71xx.h>
 
+extern unsigned long ar71xx_gpio_count;
 extern void __ar71xx_gpio_set_value(unsigned gpio, int value);
 extern int __ar71xx_gpio_get_value(unsigned gpio);
 
@@ -33,7 +34,7 @@ static inline int irq_to_gpio(unsigned irq)
 
 static inline int gpio_get_value(unsigned gpio)
 {
-	if (gpio < AR71XX_GPIO_COUNT)
+	if (gpio < ar71xx_gpio_count)
 		return __ar71xx_gpio_get_value(gpio);
 
 	return __gpio_get_value(gpio);
@@ -41,7 +42,7 @@ static inline int gpio_get_value(unsigned gpio)
 
 static inline void gpio_set_value(unsigned gpio, int value)
 {
-	if (gpio < AR71XX_GPIO_COUNT)
+	if (gpio < ar71xx_gpio_count)
 		__ar71xx_gpio_set_value(gpio, value);
 	else
 		__gpio_set_value(gpio, value);
-- 
cgit v1.1