diff options
Diffstat (limited to 'drivers/ssb/main.c')
| -rw-r--r-- | drivers/ssb/main.c | 36 | 
1 files changed, 21 insertions, 15 deletions
diff --git a/drivers/ssb/main.c b/drivers/ssb/main.c index c82c5c95fe8..24dc331b470 100644 --- a/drivers/ssb/main.c +++ b/drivers/ssb/main.c @@ -443,6 +443,15 @@ static void ssb_devices_unregister(struct ssb_bus *bus)  void ssb_bus_unregister(struct ssb_bus *bus)  { +	int err; + +	err = ssb_gpio_unregister(bus); +	if (err == -EBUSY) +		ssb_dprintk(KERN_ERR PFX "Some GPIOs are still in use.\n"); +	else if (err) +		ssb_dprintk(KERN_ERR PFX +			    "Can not unregister GPIO driver: %i\n", err); +  	ssb_buses_lock();  	ssb_devices_unregister(bus);  	list_del(&bus->list); @@ -548,7 +557,7 @@ error:  }  /* Needs ssb_buses_lock() */ -static int __devinit ssb_attach_queued_buses(void) +static int ssb_attach_queued_buses(void)  {  	struct ssb_bus *bus, *n;  	int err = 0; @@ -761,9 +770,9 @@ out:  	return err;  } -static int __devinit ssb_bus_register(struct ssb_bus *bus, -				      ssb_invariants_func_t get_invariants, -				      unsigned long baseaddr) +static int ssb_bus_register(struct ssb_bus *bus, +			    ssb_invariants_func_t get_invariants, +			    unsigned long baseaddr)  {  	int err; @@ -851,8 +860,7 @@ err_disable_xtal:  }  #ifdef CONFIG_SSB_PCIHOST -int __devinit ssb_bus_pcibus_register(struct ssb_bus *bus, -				      struct pci_dev *host_pci) +int ssb_bus_pcibus_register(struct ssb_bus *bus, struct pci_dev *host_pci)  {  	int err; @@ -875,9 +883,9 @@ EXPORT_SYMBOL(ssb_bus_pcibus_register);  #endif /* CONFIG_SSB_PCIHOST */  #ifdef CONFIG_SSB_PCMCIAHOST -int __devinit ssb_bus_pcmciabus_register(struct ssb_bus *bus, -					 struct pcmcia_device *pcmcia_dev, -					 unsigned long baseaddr) +int ssb_bus_pcmciabus_register(struct ssb_bus *bus, +			       struct pcmcia_device *pcmcia_dev, +			       unsigned long baseaddr)  {  	int err; @@ -897,9 +905,8 @@ EXPORT_SYMBOL(ssb_bus_pcmciabus_register);  #endif /* CONFIG_SSB_PCMCIAHOST */  #ifdef CONFIG_SSB_SDIOHOST -int __devinit ssb_bus_sdiobus_register(struct ssb_bus *bus, -				       struct sdio_func *func, -				       unsigned int quirks) +int ssb_bus_sdiobus_register(struct ssb_bus *bus, struct sdio_func *func, +			     unsigned int quirks)  {  	int err; @@ -919,9 +926,8 @@ int __devinit ssb_bus_sdiobus_register(struct ssb_bus *bus,  EXPORT_SYMBOL(ssb_bus_sdiobus_register);  #endif /* CONFIG_SSB_PCMCIAHOST */ -int __devinit ssb_bus_ssbbus_register(struct ssb_bus *bus, -				      unsigned long baseaddr, -				      ssb_invariants_func_t get_invariants) +int ssb_bus_ssbbus_register(struct ssb_bus *bus, unsigned long baseaddr, +			    ssb_invariants_func_t get_invariants)  {  	int err;  |