}
#ifdef WL_CFG80211
- wl_cfg80211_down(NULL);
+ if ((dhd->dhd_state & DHD_ATTACH_STATE_CFG80211)) {
+ wl_cfg80211_down(NULL);
+ }
#endif /* WL_CFG80211 */
if (dhd->dhd_state & DHD_ATTACH_STATE_PROT_ATTACH) {
brcm_wowlan_config->patterns = NULL;
brcm_wowlan_config->n_patterns = 0;
brcm_wowlan_config->tcp = NULL;
+ brcm_wowlan_config->nd_config = NULL;
} else {
WL_ERR(("Can not allocate memory for brcm_wowlan_config,"
" So wiphy->wowlan_config is set to NULL\n"));
return err;
}
}
-
- err = wl_create_event_handler(cfg);
- if (err) {
- WL_ERR(("wl_create_event_handler failed\n"));
- return err;
+ if (!dhd_download_fw_on_driverload) {
+ err = wl_create_event_handler(cfg);
+ if (err) {
+ WL_ERR(("wl_create_event_handler failed\n"));
+ return err;
+ }
+ wl_init_event_handler(cfg);
}
- wl_init_event_handler(cfg);
err = wl_init_scan(cfg);
if (err) {
DNGL_FUNC(dhd_cfg80211_down, (cfg));
/* Avoid deadlock from wl_cfg80211_down */
- mutex_unlock(&cfg->usr_sync);
- wl_destroy_event_handler(cfg);
- mutex_lock(&cfg->usr_sync);
+ if (!dhd_download_fw_on_driverload) {
+ mutex_unlock(&cfg->usr_sync);
+ wl_destroy_event_handler(cfg);
+ mutex_lock(&cfg->usr_sync);
+ }
wl_flush_eq(cfg);
wl_link_down(cfg);
if (cfg->p2p_supported) {