bcma: unregister gpios before unloading bcma
This patch unregisters the gpio chip before bcma gets unloaded. Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> Reported-by: Piotr Haber <phaber@broadcom.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
committed by
John W. Linville
parent
a5ffbe0a19
commit
c50ae9470e
@@ -94,11 +94,16 @@ void __devinit bcma_core_pci_hostmode_init(struct bcma_drv_pci *pc);
|
|||||||
#ifdef CONFIG_BCMA_DRIVER_GPIO
|
#ifdef CONFIG_BCMA_DRIVER_GPIO
|
||||||
/* driver_gpio.c */
|
/* driver_gpio.c */
|
||||||
int bcma_gpio_init(struct bcma_drv_cc *cc);
|
int bcma_gpio_init(struct bcma_drv_cc *cc);
|
||||||
|
int bcma_gpio_unregister(struct bcma_drv_cc *cc);
|
||||||
#else
|
#else
|
||||||
static inline int bcma_gpio_init(struct bcma_drv_cc *cc)
|
static inline int bcma_gpio_init(struct bcma_drv_cc *cc)
|
||||||
{
|
{
|
||||||
return -ENOTSUPP;
|
return -ENOTSUPP;
|
||||||
}
|
}
|
||||||
|
static inline int bcma_gpio_unregister(struct bcma_drv_cc *cc)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
#endif /* CONFIG_BCMA_DRIVER_GPIO */
|
#endif /* CONFIG_BCMA_DRIVER_GPIO */
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -96,3 +96,8 @@ int bcma_gpio_init(struct bcma_drv_cc *cc)
|
|||||||
|
|
||||||
return gpiochip_add(chip);
|
return gpiochip_add(chip);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int bcma_gpio_unregister(struct bcma_drv_cc *cc)
|
||||||
|
{
|
||||||
|
return gpiochip_remove(&cc->gpio);
|
||||||
|
}
|
||||||
|
|||||||
@@ -268,6 +268,13 @@ int __devinit bcma_bus_register(struct bcma_bus *bus)
|
|||||||
void bcma_bus_unregister(struct bcma_bus *bus)
|
void bcma_bus_unregister(struct bcma_bus *bus)
|
||||||
{
|
{
|
||||||
struct bcma_device *cores[3];
|
struct bcma_device *cores[3];
|
||||||
|
int err;
|
||||||
|
|
||||||
|
err = bcma_gpio_unregister(&bus->drv_cc);
|
||||||
|
if (err == -EBUSY)
|
||||||
|
bcma_err(bus, "Some GPIOs are still in use.\n");
|
||||||
|
else if (err)
|
||||||
|
bcma_err(bus, "Can not unregister GPIO driver: %i\n", err);
|
||||||
|
|
||||||
cores[0] = bcma_find_core(bus, BCMA_CORE_MIPS_74K);
|
cores[0] = bcma_find_core(bus, BCMA_CORE_MIPS_74K);
|
||||||
cores[1] = bcma_find_core(bus, BCMA_CORE_PCIE);
|
cores[1] = bcma_find_core(bus, BCMA_CORE_PCIE);
|
||||||
|
|||||||
Reference in New Issue
Block a user