[brcm47xx] update gpio patches
authorhauke <hauke@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Sat, 18 Aug 2012 11:51:35 +0000 (11:51 +0000)
committerhauke <hauke@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Sat, 18 Aug 2012 11:51:35 +0000 (11:51 +0000)
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@33208 3c298f89-4303-0410-b956-a3cf2f4a3e73

target/linux/brcm47xx/patches-3.3/502-bcm47xx-rewrite-gpio-handling.patch
target/linux/brcm47xx/patches-3.3/812-disable_wgt634u_crap.patch

index 25262bd..f38dcf6 100644 (file)
@@ -18,7 +18,7 @@
         Support for BCM47XX based boards
 --- a/arch/mips/bcm47xx/gpio.c
 +++ b/arch/mips/bcm47xx/gpio.c
-@@ -4,81 +4,198 @@
+@@ -4,83 +4,150 @@
   * for more details.
   *
   * Copyright (C) 2007 Aurelien Jarno <aurelien@aurel32.net>
 -              if (ssb_extif_available(&bcm47xx_bus.ssb.extif) &&
 -                  ((unsigned)gpio >= BCM47XX_EXTIF_GPIO_LINES))
 -                      return -EINVAL;
+-
+-              if (test_and_set_bit(gpio, gpio_in_use))
+-                      return -EBUSY;
+-
+-              return 0;
 +              return ssb_gpio_in(&bcm47xx_bus.ssb, mask);
-+#endif
-+#ifdef CONFIG_BCM47XX_BCMA
-+      case BCM47XX_BUS_TYPE_BCMA:
+ #endif
+ #ifdef CONFIG_BCM47XX_BCMA
+       case BCM47XX_BUS_TYPE_BCMA:
+-              if (gpio >= BCM47XX_CHIPCO_GPIO_LINES)
+-                      return -EINVAL;
+-
+-              if (test_and_set_bit(gpio, gpio_in_use))
+-                      return -EBUSY;
 +              return bcma_gpio_in(&bcm47xx_bus.bcma.bus, mask);
 +#endif
 +      }
@@ -73,8 +83,7 @@
 +}
 +EXPORT_SYMBOL(bcm47xx_gpio_in);
  
--              if (test_and_set_bit(gpio, gpio_in_use))
--                      return -EBUSY;
+-              return 0;
 +u32 bcm47xx_gpio_out(u32 mask, u32 value)
 +{
 +      switch (bcm47xx_bus_type) {
 +#ifdef CONFIG_BCM47XX_BCMA
 +      case BCM47XX_BUS_TYPE_BCMA:
 +              return bcma_gpio_out(&bcm47xx_bus.bcma.bus, mask, value);
-+#endif
-+      }
-+      return -EINVAL;
-+}
+ #endif
+       }
+       return -EINVAL;
+ }
+-EXPORT_SYMBOL(gpio_request);
 +EXPORT_SYMBOL(bcm47xx_gpio_out);
  
--              return 0;
+-void gpio_free(unsigned gpio)
 +u32 bcm47xx_gpio_outen(u32 mask, u32 value)
-+{
-+      switch (bcm47xx_bus_type) {
-+#ifdef CONFIG_BCM47XX_SSB
-+      case BCM47XX_BUS_TYPE_SSB:
+ {
+       switch (bcm47xx_bus_type) {
+ #ifdef CONFIG_BCM47XX_SSB
+       case BCM47XX_BUS_TYPE_SSB:
+-              if (ssb_chipco_available(&bcm47xx_bus.ssb.chipco) &&
+-                  ((unsigned)gpio >= BCM47XX_CHIPCO_GPIO_LINES))
+-                      return;
 +              return ssb_gpio_outen(&bcm47xx_bus.ssb, mask, value);
- #endif
- #ifdef CONFIG_BCM47XX_BCMA
-       case BCM47XX_BUS_TYPE_BCMA:
--              if (gpio >= BCM47XX_CHIPCO_GPIO_LINES)
--                      return -EINVAL;
++#endif
++#ifdef CONFIG_BCM47XX_BCMA
++      case BCM47XX_BUS_TYPE_BCMA:
 +              return bcma_gpio_outen(&bcm47xx_bus.bcma.bus, mask, value);
 +#endif
 +      }
 +}
 +EXPORT_SYMBOL(bcm47xx_gpio_outen);
  
--              if (test_and_set_bit(gpio, gpio_in_use))
--                      return -EBUSY;
+-              if (ssb_extif_available(&bcm47xx_bus.ssb.extif) &&
+-                  ((unsigned)gpio >= BCM47XX_EXTIF_GPIO_LINES))
+-                      return;
 +u32 bcm47xx_gpio_control(u32 mask, u32 value)
 +{
 +      switch (bcm47xx_bus_type) {
 +}
 +EXPORT_SYMBOL(bcm47xx_gpio_control);
  
--              return 0;
+-              clear_bit(gpio, gpio_in_use);
+-              return;
 +u32 bcm47xx_gpio_intmask(u32 mask, u32 value)
 +{
 +      switch (bcm47xx_bus_type) {
 +#ifdef CONFIG_BCM47XX_SSB
 +      case BCM47XX_BUS_TYPE_SSB:
 +              return ssb_gpio_intmask(&bcm47xx_bus.ssb, mask, value);
-+#endif
-+#ifdef CONFIG_BCM47XX_BCMA
-+      case BCM47XX_BUS_TYPE_BCMA:
-+              return bcma_gpio_intmask(&bcm47xx_bus.bcma.bus, mask, value);
  #endif
-       }
-       return -EINVAL;
- }
--EXPORT_SYMBOL(gpio_request);
+ #ifdef CONFIG_BCM47XX_BCMA
+       case BCM47XX_BUS_TYPE_BCMA:
+-              if (gpio >= BCM47XX_CHIPCO_GPIO_LINES)
+-                      return;
++              return bcma_gpio_intmask(&bcm47xx_bus.bcma.bus, mask, value);
++#endif
++      }
++      return -EINVAL;
++}
 +EXPORT_SYMBOL(bcm47xx_gpio_intmask);
  
--void gpio_free(unsigned gpio)
+-              clear_bit(gpio, gpio_in_use);
+-              return;
 +u32 bcm47xx_gpio_polarity(u32 mask, u32 value)
- {
-       switch (bcm47xx_bus_type) {
- #ifdef CONFIG_BCM47XX_SSB
-       case BCM47XX_BUS_TYPE_SSB:
--              if (ssb_chipco_available(&bcm47xx_bus.ssb.chipco) &&
--                  ((unsigned)gpio >= BCM47XX_CHIPCO_GPIO_LINES))
--                      return;
++{
++      switch (bcm47xx_bus_type) {
++#ifdef CONFIG_BCM47XX_SSB
++      case BCM47XX_BUS_TYPE_SSB:
 +              return ssb_gpio_polarity(&bcm47xx_bus.ssb, mask, value);
 +#endif
 +#ifdef CONFIG_BCM47XX_BCMA
 +      case BCM47XX_BUS_TYPE_BCMA:
 +              return bcma_gpio_polarity(&bcm47xx_bus.bcma.bus, mask, value);
-+#endif
-+      }
+ #endif
+       }
 +      return -EINVAL;
 +}
 +EXPORT_SYMBOL(bcm47xx_gpio_polarity);
 +
 +
-+
 +static int bcm47xx_gpio_get_value(struct gpio_chip *chip, unsigned gpio)
 +{
 +      return bcm47xx_gpio_in(1 << gpio);
 +      /* then set the gpio mode */
 +      bcm47xx_gpio_outen(1 << gpio, 1 << gpio);
 +      return 0;
-+}
+ }
+-EXPORT_SYMBOL(gpio_free);
+-int gpio_to_irq(unsigned gpio)
++static int bcm47xx_gpio_to_irq(struct gpio_chip *chip, unsigned gpio)
+ {
+       switch (bcm47xx_bus_type) {
+ #ifdef CONFIG_BCM47XX_SSB
+@@ -99,4 +166,55 @@ int gpio_to_irq(unsigned gpio)
+       }
+       return -EINVAL;
+ }
+-EXPORT_SYMBOL_GPL(gpio_to_irq);
 +
 +static struct gpio_chip bcm47xx_gpio_chip = {
 +      .label                  = "bcm47xx",
 +      .set                    = bcm47xx_gpio_set_value,
 +      .direction_input        = bcm47xx_gpio_direction_input,
 +      .direction_output       = bcm47xx_gpio_direction_output,
++      .to_irq                 = bcm47xx_gpio_to_irq,
 +      .base                   = 0,
 +};
--              if (ssb_extif_available(&bcm47xx_bus.ssb.extif) &&
--                  ((unsigned)gpio >= BCM47XX_EXTIF_GPIO_LINES))
--                      return;
++
 +void __init bcm47xx_gpio_init(void)
 +{
 +      int err;
--              clear_bit(gpio, gpio_in_use);
--              return;
++
 +      switch (bcm47xx_bus_type) {
 +#ifdef CONFIG_BCM47XX_SSB
 +      case BCM47XX_BUS_TYPE_SSB:
 +              bcm47xx_gpio_count = ssb_gpio_count(&bcm47xx_bus.ssb);
- #endif
- #ifdef CONFIG_BCM47XX_BCMA
-       case BCM47XX_BUS_TYPE_BCMA:
--              if (gpio >= BCM47XX_CHIPCO_GPIO_LINES)
--                      return;
--
--              clear_bit(gpio, gpio_in_use);
--              return;
++              break;
++#endif
++#ifdef CONFIG_BCM47XX_BCMA
++      case BCM47XX_BUS_TYPE_BCMA:
 +              bcm47xx_gpio_count = bcma_gpio_count(&bcm47xx_bus.bcma.bus);
- #endif
-       }
++              break;
++#endif
++      }
 +
 +      bcm47xx_gpio_chip.ngpio = bcm47xx_gpio_count;
 +
 +      err = gpiochip_add(&bcm47xx_gpio_chip);
 +      if (err)
 +              panic("cannot add BCM47xx GPIO chip, error=%d", err);
- }
--EXPORT_SYMBOL(gpio_free);
++}
 +
 +int gpio_get_value(unsigned gpio)
 +{
 +              __gpio_set_value(gpio, value);
 +}
 +EXPORT_SYMBOL(gpio_set_value);
- int gpio_to_irq(unsigned gpio)
- {
-@@ -99,4 +216,11 @@ int gpio_to_irq(unsigned gpio)
-       }
-       return -EINVAL;
- }
--EXPORT_SYMBOL_GPL(gpio_to_irq);
-+EXPORT_SYMBOL(gpio_to_irq);
-+
-+int irq_to_gpio(unsigned irq)
-+{
-+      /* FIXME */
-+      return -EINVAL;
-+}
-+EXPORT_SYMBOL(irq_to_gpio);
 --- a/arch/mips/bcm47xx/setup.c
 +++ b/arch/mips/bcm47xx/setup.c
 @@ -344,6 +344,8 @@ void __init plat_mem_setup(void)
  
 +              err = gpio_request(WGT634U_GPIO_RESET, "reset-buton");
 +              if (err) {
-+                      printk(KERN_INFO "Can not register gpio fir reset button\n");
++                      printk(KERN_INFO "Can not register gpio for reset button\n");
 +                      return 0;
 +              }
 +
  #endif /* __ASM_BCM47XX_H */
 --- a/arch/mips/include/asm/mach-bcm47xx/gpio.h
 +++ b/arch/mips/include/asm/mach-bcm47xx/gpio.h
-@@ -4,152 +4,39 @@
+@@ -4,152 +4,42 @@
   * for more details.
   *
   * Copyright (C) 2007 Aurelien Jarno <aurelien@aurel32.net>
 -extern int gpio_request(unsigned gpio, const char *label);
 -extern void gpio_free(unsigned gpio);
 -extern int gpio_to_irq(unsigned gpio);
-+#define ARCH_NR_GPIOS 64
-+#include <asm-generic/gpio.h>
+-
 -static inline int gpio_get_value(unsigned gpio)
 -{
 -      switch (bcm47xx_bus_type) {
 -{
 -      return 0;
 -}
+-
+-static inline int gpio_is_valid(unsigned gpio)
+-{
+-      return gpio < (BCM47XX_EXTIF_GPIO_LINES + BCM47XX_CHIPCO_GPIO_LINES);
+-}
++#define ARCH_NR_GPIOS 64
++#include <asm-generic/gpio.h>
 +/* low level BCM47xx gpio api */
 +u32 bcm47xx_gpio_in(u32 mask);
 +u32 bcm47xx_gpio_out(u32 mask, u32 value);
 +u32 bcm47xx_gpio_intmask(u32 mask, u32 value);
 +u32 bcm47xx_gpio_polarity(u32 mask, u32 value);
  
--static inline int gpio_is_valid(unsigned gpio)
--{
--      return gpio < (BCM47XX_EXTIF_GPIO_LINES + BCM47XX_CHIPCO_GPIO_LINES);
--}
-+int gpio_to_irq(unsigned gpio);
-+int irq_to_gpio(unsigned irq);
-+int gpio_get_value(unsigned gpio);
-+void gpio_set_value(unsigned gpio, int value);
--
 -static inline int gpio_direction_input(unsigned gpio)
-+static inline void gpio_intmask(unsigned gpio, int value)
- {
+-{
 -      switch (bcm47xx_bus_type) {
 -#ifdef CONFIG_BCM47XX_SSB
 -      case BCM47XX_BUS_TYPE_SSB:
 -#endif
 -      }
 -      return -EINVAL;
-+      bcm47xx_gpio_intmask(1 << gpio, value ? 1 << gpio : 0);
- }
+-}
++int gpio_get_value(unsigned gpio);
++void gpio_set_value(unsigned gpio, int value);
  
 -static inline int gpio_direction_output(unsigned gpio, int value)
-+static inline void gpio_polarity(unsigned gpio, int value)
++static inline void gpio_intmask(unsigned gpio, int value)
  {
 -      switch (bcm47xx_bus_type) {
 -#ifdef CONFIG_BCM47XX_SSB
 -#endif
 -      }
 -      return -EINVAL;
-+      bcm47xx_gpio_polarity(1 << gpio, value ? 1 << gpio : 0);
++      bcm47xx_gpio_intmask(1 << gpio, value ? 1 << gpio : 0);
  }
  
 -static inline int gpio_intmask(unsigned gpio, int value)
--{
++static inline void gpio_polarity(unsigned gpio, int value)
+ {
 -      switch (bcm47xx_bus_type) {
 -#ifdef CONFIG_BCM47XX_SSB
 -      case BCM47XX_BUS_TYPE_SSB:
 -#endif
 -      }
 -      return -EINVAL;
--}
--
++      bcm47xx_gpio_polarity(1 << gpio, value ? 1 << gpio : 0);
+ }
 -static inline int gpio_polarity(unsigned gpio, int value)
--{
++static inline int irq_to_gpio(int gpio)
+ {
 -      switch (bcm47xx_bus_type) {
 -#ifdef CONFIG_BCM47XX_SSB
 -      case BCM47XX_BUS_TYPE_SSB:
 -              return 0;
 -#endif
 -      }
--      return -EINVAL;
--}
+       return -EINVAL;
+ }
  
 +#define gpio_cansleep __gpio_cansleep
++#define gpio_to_irq __gpio_to_irq
  
  #endif /* __BCM47XX_GPIO_H */
index e675c53..a2902e7 100644 (file)
 -
 -              err = gpio_request(WGT634U_GPIO_RESET, "reset-buton");
 -              if (err) {
--                      printk(KERN_INFO "Can not register gpio fir reset button\n");
+-                      printk(KERN_INFO "Can not register gpio for reset button\n");
 -                      return 0;
 -              }
 -