kernel: backport BCM5357 fix for GPIOs

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
This commit is contained in:
Hauke Mehrtens 2014-03-30 19:08:37 +00:00
parent c286feac80
commit bdde12b13a
4 changed files with 54 additions and 9 deletions

View file

@ -479,17 +479,26 @@
chip->label = "bcma_gpio"; chip->label = "bcma_gpio";
chip->owner = THIS_MODULE; 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->set = bcma_gpio_set_value;
chip->direction_input = bcma_gpio_direction_input; chip->direction_input = bcma_gpio_direction_input;
chip->direction_output = bcma_gpio_direction_output; chip->direction_output = bcma_gpio_direction_output;
+#if IS_BUILTIN(CONFIG_BCMA_HOST_SOC) +#if IS_BUILTIN(CONFIG_BCMA_HOST_SOC)
chip->to_irq = bcma_gpio_to_irq; chip->to_irq = bcma_gpio_to_irq;
- chip->ngpio = 16;
+#endif +#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 /* 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 * 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 else
chip->base = -1; chip->base = -1;

View file

@ -198,17 +198,26 @@
chip->label = "bcma_gpio"; chip->label = "bcma_gpio";
chip->owner = THIS_MODULE; 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->set = bcma_gpio_set_value;
chip->direction_input = bcma_gpio_direction_input; chip->direction_input = bcma_gpio_direction_input;
chip->direction_output = bcma_gpio_direction_output; chip->direction_output = bcma_gpio_direction_output;
+#if IS_BUILTIN(CONFIG_BCMA_HOST_SOC) +#if IS_BUILTIN(CONFIG_BCMA_HOST_SOC)
chip->to_irq = bcma_gpio_to_irq; chip->to_irq = bcma_gpio_to_irq;
- chip->ngpio = 16;
+#endif +#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 /* 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 * 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 else
chip->base = -1; chip->base = -1;

View file

@ -198,17 +198,26 @@
chip->label = "bcma_gpio"; chip->label = "bcma_gpio";
chip->owner = THIS_MODULE; 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->set = bcma_gpio_set_value;
chip->direction_input = bcma_gpio_direction_input; chip->direction_input = bcma_gpio_direction_input;
chip->direction_output = bcma_gpio_direction_output; chip->direction_output = bcma_gpio_direction_output;
+#if IS_BUILTIN(CONFIG_BCMA_HOST_SOC) +#if IS_BUILTIN(CONFIG_BCMA_HOST_SOC)
chip->to_irq = bcma_gpio_to_irq; chip->to_irq = bcma_gpio_to_irq;
- chip->ngpio = 16;
+#endif +#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 /* 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 * 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 else
chip->base = -1; chip->base = -1;

View file

@ -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. */