kernel: backport BCM5357 fix for GPIOs
authorHauke Mehrtens <hauke@hauke-m.de>
Sun, 30 Mar 2014 19:08:37 +0000 (19:08 +0000)
committerHauke Mehrtens <hauke@hauke-m.de>
Sun, 30 Mar 2014 19:08:37 +0000 (19:08 +0000)
This backports: bcma: gpio: register 32 GPIOs on BCM5357

Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
SVN-Revision: 40347

target/linux/generic/patches-3.10/025-bcma_backport.patch
target/linux/generic/patches-3.12/025-bcma_backport.patch
target/linux/generic/patches-3.13/025-bcma_backport.patch
target/linux/generic/patches-3.14/025-bcma_backport.patch [new file with mode: 0644]

index ca911cdcc21df10f6e25caf480fb654c4a95964f..c3f7ffb3545cca68f4368d7b8026bb343379c94d 100644 (file)
  
        chip->label             = "bcma_gpio";
        chip->owner             = THIS_MODULE;
-@@ -95,7 +215,9 @@ int bcma_gpio_init(struct bcma_drv_cc *c
+@@ -95,8 +215,17 @@ int bcma_gpio_init(struct bcma_drv_cc *c
        chip->set               = bcma_gpio_set_value;
        chip->direction_input   = bcma_gpio_direction_input;
        chip->direction_output  = bcma_gpio_direction_output;
 +#if IS_BUILTIN(CONFIG_BCMA_HOST_SOC)
        chip->to_irq            = bcma_gpio_to_irq;
+-      chip->ngpio             = 16;
 +#endif
-       chip->ngpio             = 16;
++      switch (cc->core->bus->chipinfo.id) {
++      case BCMA_CHIP_ID_BCM5357:
++              chip->ngpio     = 32;
++              break;
++      default:
++              chip->ngpio     = 16;
++      }
++
        /* There is just one SoC in one device and its GPIO addresses should be
         * deterministic to address them more easily. The other buses could get
-@@ -105,10 +227,21 @@ int bcma_gpio_init(struct bcma_drv_cc *c
+        * a random base number. */
+@@ -105,10 +234,21 @@ int bcma_gpio_init(struct bcma_drv_cc *c
        else
                chip->base              = -1;
  
index 3e86f69f420c780df0b852afd1bf9580b12888e8..1b88dfdda0a979b2c874f767de048a086e15bab0 100644 (file)
  
        chip->label             = "bcma_gpio";
        chip->owner             = THIS_MODULE;
-@@ -95,7 +215,9 @@ int bcma_gpio_init(struct bcma_drv_cc *c
+@@ -95,8 +215,17 @@ int bcma_gpio_init(struct bcma_drv_cc *c
        chip->set               = bcma_gpio_set_value;
        chip->direction_input   = bcma_gpio_direction_input;
        chip->direction_output  = bcma_gpio_direction_output;
 +#if IS_BUILTIN(CONFIG_BCMA_HOST_SOC)
        chip->to_irq            = bcma_gpio_to_irq;
+-      chip->ngpio             = 16;
 +#endif
-       chip->ngpio             = 16;
++      switch (cc->core->bus->chipinfo.id) {
++      case BCMA_CHIP_ID_BCM5357:
++              chip->ngpio     = 32;
++              break;
++      default:
++              chip->ngpio     = 16;
++      }
++
        /* There is just one SoC in one device and its GPIO addresses should be
         * deterministic to address them more easily. The other buses could get
-@@ -105,10 +227,21 @@ int bcma_gpio_init(struct bcma_drv_cc *c
+        * a random base number. */
+@@ -105,10 +234,21 @@ int bcma_gpio_init(struct bcma_drv_cc *c
        else
                chip->base              = -1;
  
index 3aad2a16db0a5358d2cc18b6918ac02b525773b9..dcb712dbbc0895b30383f384cf1f3987666d8103 100644 (file)
  
        chip->label             = "bcma_gpio";
        chip->owner             = THIS_MODULE;
-@@ -95,7 +215,9 @@ int bcma_gpio_init(struct bcma_drv_cc *c
+@@ -95,8 +215,17 @@ int bcma_gpio_init(struct bcma_drv_cc *c
        chip->set               = bcma_gpio_set_value;
        chip->direction_input   = bcma_gpio_direction_input;
        chip->direction_output  = bcma_gpio_direction_output;
 +#if IS_BUILTIN(CONFIG_BCMA_HOST_SOC)
        chip->to_irq            = bcma_gpio_to_irq;
+-      chip->ngpio             = 16;
 +#endif
-       chip->ngpio             = 16;
++      switch (cc->core->bus->chipinfo.id) {
++      case BCMA_CHIP_ID_BCM5357:
++              chip->ngpio     = 32;
++              break;
++      default:
++              chip->ngpio     = 16;
++      }
++
        /* There is just one SoC in one device and its GPIO addresses should be
         * deterministic to address them more easily. The other buses could get
-@@ -105,10 +227,21 @@ int bcma_gpio_init(struct bcma_drv_cc *c
+        * a random base number. */
+@@ -105,10 +234,21 @@ int bcma_gpio_init(struct bcma_drv_cc *c
        else
                chip->base              = -1;
  
diff --git a/target/linux/generic/patches-3.14/025-bcma_backport.patch b/target/linux/generic/patches-3.14/025-bcma_backport.patch
new file mode 100644 (file)
index 0000000..b49d345
--- /dev/null
@@ -0,0 +1,18 @@
+--- a/drivers/bcma/driver_gpio.c
++++ b/drivers/bcma/driver_gpio.c
+@@ -218,7 +218,14 @@ int bcma_gpio_init(struct bcma_drv_cc *c
+ #if IS_BUILTIN(CONFIG_BCMA_HOST_SOC)
+       chip->to_irq            = bcma_gpio_to_irq;
+ #endif
+-      chip->ngpio             = 16;
++      switch (cc->core->bus->chipinfo.id) {
++      case BCMA_CHIP_ID_BCM5357:
++              chip->ngpio     = 32;
++              break;
++      default:
++              chip->ngpio     = 16;
++      }
++
+       /* There is just one SoC in one device and its GPIO addresses should be
+        * deterministic to address them more easily. The other buses could get
+        * a random base number. */