diff options
Diffstat (limited to 'drivers/net/wireless/mwifiex/main.c')
| -rw-r--r-- | drivers/net/wireless/mwifiex/main.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/drivers/net/wireless/mwifiex/main.c b/drivers/net/wireless/mwifiex/main.c index e15ab72fb03d..1753431de361 100644 --- a/drivers/net/wireless/mwifiex/main.c +++ b/drivers/net/wireless/mwifiex/main.c | |||
| @@ -427,6 +427,10 @@ static void mwifiex_fw_dpc(const struct firmware *firmware, void *context) | |||
| 427 | "Cal data request_firmware() failed\n"); | 427 | "Cal data request_firmware() failed\n"); |
| 428 | } | 428 | } |
| 429 | 429 | ||
| 430 | /* enable host interrupt after fw dnld is successful */ | ||
| 431 | if (adapter->if_ops.enable_int) | ||
| 432 | adapter->if_ops.enable_int(adapter); | ||
| 433 | |||
| 430 | adapter->init_wait_q_woken = false; | 434 | adapter->init_wait_q_woken = false; |
| 431 | ret = mwifiex_init_fw(adapter); | 435 | ret = mwifiex_init_fw(adapter); |
| 432 | if (ret == -1) { | 436 | if (ret == -1) { |
| @@ -478,6 +482,8 @@ err_add_intf: | |||
| 478 | mwifiex_del_virtual_intf(adapter->wiphy, priv->wdev); | 482 | mwifiex_del_virtual_intf(adapter->wiphy, priv->wdev); |
| 479 | rtnl_unlock(); | 483 | rtnl_unlock(); |
| 480 | err_init_fw: | 484 | err_init_fw: |
| 485 | if (adapter->if_ops.disable_int) | ||
| 486 | adapter->if_ops.disable_int(adapter); | ||
| 481 | pr_debug("info: %s: unregister device\n", __func__); | 487 | pr_debug("info: %s: unregister device\n", __func__); |
| 482 | adapter->if_ops.unregister_dev(adapter); | 488 | adapter->if_ops.unregister_dev(adapter); |
| 483 | done: | 489 | done: |
| @@ -855,7 +861,7 @@ mwifiex_add_card(void *card, struct semaphore *sem, | |||
| 855 | INIT_WORK(&adapter->main_work, mwifiex_main_work_queue); | 861 | INIT_WORK(&adapter->main_work, mwifiex_main_work_queue); |
| 856 | 862 | ||
| 857 | /* Register the device. Fill up the private data structure with relevant | 863 | /* Register the device. Fill up the private data structure with relevant |
| 858 | information from the card and request for the required IRQ. */ | 864 | information from the card. */ |
| 859 | if (adapter->if_ops.register_dev(adapter)) { | 865 | if (adapter->if_ops.register_dev(adapter)) { |
| 860 | pr_err("%s: failed to register mwifiex device\n", __func__); | 866 | pr_err("%s: failed to register mwifiex device\n", __func__); |
| 861 | goto err_registerdev; | 867 | goto err_registerdev; |
| @@ -919,6 +925,11 @@ int mwifiex_remove_card(struct mwifiex_adapter *adapter, struct semaphore *sem) | |||
| 919 | if (!adapter) | 925 | if (!adapter) |
| 920 | goto exit_remove; | 926 | goto exit_remove; |
| 921 | 927 | ||
| 928 | /* We can no longer handle interrupts once we start doing the teardown | ||
| 929 | * below. */ | ||
| 930 | if (adapter->if_ops.disable_int) | ||
| 931 | adapter->if_ops.disable_int(adapter); | ||
| 932 | |||
| 922 | adapter->surprise_removed = true; | 933 | adapter->surprise_removed = true; |
| 923 | 934 | ||
| 924 | /* Stop data */ | 935 | /* Stop data */ |
