aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/ssb
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2013-02-08 18:02:14 -0500
committerDavid S. Miller <davem@davemloft.net>2013-02-08 18:02:14 -0500
commitfd5023111cf720db890ef34f305ac5d427e690a0 (patch)
tree4d21e9a02bfbdafe5fc598af0755db791238dbe7 /drivers/ssb
parent8b9a4d56866e0dca6ae886ed9bff777e50d0b70c (diff)
parent836dc9e3fbbab0c30aa6e664417225f5c1fb1c39 (diff)
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Synchronize with 'net' in order to sort out some l2tp, wireless, and ipv6 GRE fixes that will be built on top of in 'net-next'. Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/ssb')
-rw-r--r--drivers/ssb/driver_gpio.c12
-rw-r--r--drivers/ssb/main.c9
-rw-r--r--drivers/ssb/ssb_private.h5
3 files changed, 26 insertions, 0 deletions
diff --git a/drivers/ssb/driver_gpio.c b/drivers/ssb/driver_gpio.c
index accabe39b320..dc109de228c6 100644
--- a/drivers/ssb/driver_gpio.c
+++ b/drivers/ssb/driver_gpio.c
@@ -196,3 +196,15 @@ int ssb_gpio_init(struct ssb_bus *bus)
196 196
197 return -1; 197 return -1;
198} 198}
199
200int ssb_gpio_unregister(struct ssb_bus *bus)
201{
202 if (ssb_chipco_available(&bus->chipco) ||
203 ssb_extif_available(&bus->extif)) {
204 return gpiochip_remove(&bus->gpio);
205 } else {
206 SSB_WARN_ON(1);
207 }
208
209 return -1;
210}
diff --git a/drivers/ssb/main.c b/drivers/ssb/main.c
index 9987d9f366f4..3b645b8a261f 100644
--- a/drivers/ssb/main.c
+++ b/drivers/ssb/main.c
@@ -443,6 +443,15 @@ static void ssb_devices_unregister(struct ssb_bus *bus)
443 443
444void ssb_bus_unregister(struct ssb_bus *bus) 444void ssb_bus_unregister(struct ssb_bus *bus)
445{ 445{
446 int err;
447
448 err = ssb_gpio_unregister(bus);
449 if (err == -EBUSY)
450 ssb_dprintk(KERN_ERR PFX "Some GPIOs are still in use.\n");
451 else if (err)
452 ssb_dprintk(KERN_ERR PFX
453 "Can not unregister GPIO driver: %i\n", err);
454
446 ssb_buses_lock(); 455 ssb_buses_lock();
447 ssb_devices_unregister(bus); 456 ssb_devices_unregister(bus);
448 list_del(&bus->list); 457 list_del(&bus->list);
diff --git a/drivers/ssb/ssb_private.h b/drivers/ssb/ssb_private.h
index 53198dcec90e..466171b77f68 100644
--- a/drivers/ssb/ssb_private.h
+++ b/drivers/ssb/ssb_private.h
@@ -267,11 +267,16 @@ static inline void ssb_extif_init(struct ssb_extif *extif)
267 267
268#ifdef CONFIG_SSB_DRIVER_GPIO 268#ifdef CONFIG_SSB_DRIVER_GPIO
269extern int ssb_gpio_init(struct ssb_bus *bus); 269extern int ssb_gpio_init(struct ssb_bus *bus);
270extern int ssb_gpio_unregister(struct ssb_bus *bus);
270#else /* CONFIG_SSB_DRIVER_GPIO */ 271#else /* CONFIG_SSB_DRIVER_GPIO */
271static inline int ssb_gpio_init(struct ssb_bus *bus) 272static inline int ssb_gpio_init(struct ssb_bus *bus)
272{ 273{
273 return -ENOTSUPP; 274 return -ENOTSUPP;
274} 275}
276static inline int ssb_gpio_unregister(struct ssb_bus *bus)
277{
278 return 0;
279}
275#endif /* CONFIG_SSB_DRIVER_GPIO */ 280#endif /* CONFIG_SSB_DRIVER_GPIO */
276 281
277#endif /* LINUX_SSB_PRIVATE_H_ */ 282#endif /* LINUX_SSB_PRIVATE_H_ */