diff --git a/drivers/net/wireless/marvell/mwifiex/main.c b/drivers/net/wireless/marvell/mwifiex/main.c index 8b67a552a690..2b65334235ca 100644 --- a/drivers/net/wireless/marvell/mwifiex/main.c +++ b/drivers/net/wireless/marvell/mwifiex/main.c @@ -21,6 +21,7 @@ #include "wmm.h" #include "cfg80211.h" #include "11n.h" +#include "sdio.h" #define VERSION "1.0" @@ -514,6 +515,7 @@ static void mwifiex_fw_dpc(const struct firmware *firmware, void *context) struct semaphore *sem = adapter->card_sem; bool init_failed = false; struct wireless_dev *wdev; + struct sdio_mmc_card *card = adapter->card; if (!firmware) { mwifiex_dbg(adapter, ERROR, @@ -526,10 +528,16 @@ static void mwifiex_fw_dpc(const struct firmware *firmware, void *context) fw.fw_buf = (u8 *) adapter->firmware->data; fw.fw_len = adapter->firmware->size; - if (adapter->if_ops.dnld_fw) + if (adapter->if_ops.dnld_fw) { ret = adapter->if_ops.dnld_fw(adapter, &fw); - else + } else { + if (adapter->iface_type == MWIFIEX_SDIO) + sdio_claim_host(card->func); ret = mwifiex_dnld_fw(adapter, &fw); + if (adapter->iface_type == MWIFIEX_SDIO) + sdio_release_host(card->func); + } + if (ret == -1) goto err_dnld_fw;