aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c')
-rw-r--r--drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c30
1 files changed, 16 insertions, 14 deletions
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c b/drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c
index c4da05817443..2a1e5ae0c402 100644
--- a/drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c
+++ b/drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c
@@ -1181,27 +1181,29 @@ exit:
1181} 1181}
1182#endif /* DEBUG */ 1182#endif /* DEBUG */
1183 1183
1184static int __init brcmfmac_init(void) 1184static void brcmf_driver_init(struct work_struct *work)
1185{ 1185{
1186 int ret = 0;
1187
1188#ifdef CONFIG_BRCMFMAC_SDIO 1186#ifdef CONFIG_BRCMFMAC_SDIO
1189 ret = brcmf_sdio_init(); 1187 brcmf_sdio_init();
1190 if (ret)
1191 goto fail;
1192#endif 1188#endif
1193#ifdef CONFIG_BRCMFMAC_USB 1189#ifdef CONFIG_BRCMFMAC_USB
1194 ret = brcmf_usb_init(); 1190 brcmf_usb_init();
1195 if (ret)
1196 goto fail;
1197#endif 1191#endif
1192}
1193static DECLARE_WORK(brcmf_driver_work, brcmf_driver_init);
1198 1194
1199fail: 1195static int __init brcmfmac_module_init(void)
1200 return ret; 1196{
1197 if (!schedule_work(&brcmf_driver_work))
1198 return -EBUSY;
1199
1200 return 0;
1201} 1201}
1202 1202
1203static void __exit brcmfmac_exit(void) 1203static void __exit brcmfmac_module_exit(void)
1204{ 1204{
1205 cancel_work_sync(&brcmf_driver_work);
1206
1205#ifdef CONFIG_BRCMFMAC_SDIO 1207#ifdef CONFIG_BRCMFMAC_SDIO
1206 brcmf_sdio_exit(); 1208 brcmf_sdio_exit();
1207#endif 1209#endif
@@ -1210,5 +1212,5 @@ static void __exit brcmfmac_exit(void)
1210#endif 1212#endif
1211} 1213}
1212 1214
1213module_init(brcmfmac_init); 1215module_init(brcmfmac_module_init);
1214module_exit(brcmfmac_exit); 1216module_exit(brcmfmac_module_exit);