static unsigned int uart_debug;
 static unsigned int ath6kl_p2p;
 static unsigned int testmode;
+static unsigned int recovery_enable;
 static unsigned int heart_beat_poll;
 
 module_param(debug_mask, uint, 0644);
 module_param(uart_debug, uint, 0644);
 module_param(ath6kl_p2p, uint, 0644);
 module_param(testmode, uint, 0644);
+module_param(recovery_enable, uint, 0644);
 module_param(heart_beat_poll, uint, 0644);
-MODULE_PARM_DESC(heart_beat_poll, "Enable fw error detection periodic" \
-                "polling. This also specifies the polling interval in msecs");
+MODULE_PARM_DESC(recovery_enable, "Enable recovery from firmware error");
+MODULE_PARM_DESC(heart_beat_poll, "Enable fw error detection periodic"   \
+                "polling. This also specifies the polling interval in"  \
+                "msecs. Set reocvery_enable for this to be effective");
 
 void ath6kl_core_tx_complete(struct ath6kl *ar, struct sk_buff *skb)
 {
        ath6kl_dbg(ATH6KL_DBG_TRC, "%s: name=%s dev=0x%p, ar=0x%p\n",
                   __func__, wdev->netdev->name, wdev->netdev, ar);
 
+       ar->fw_recovery.enable = !!recovery_enable;
+       if (!ar->fw_recovery.enable)
+               return ret;
+
        if (heart_beat_poll &&
            test_bit(ATH6KL_FW_CAPABILITY_HEART_BEAT_POLL,
                     ar->fw_capabilities))
 
 
 void ath6kl_recovery_err_notify(struct ath6kl *ar, enum ath6kl_fw_err reason)
 {
+       if (!ar->fw_recovery.enable)
+               return;
+
        ath6kl_dbg(ATH6KL_DBG_RECOVERY, "Fw error detected, reason:%d\n",
                   reason);
 
 
 void ath6kl_recovery_cleanup(struct ath6kl *ar)
 {
+       if (!ar->fw_recovery.enable)
+               return;
+
        set_bit(RECOVERY_CLEANUP, &ar->flag);
 
        del_timer_sync(&ar->fw_recovery.hb_timer);
 
 void ath6kl_recovery_suspend(struct ath6kl *ar)
 {
+       if (!ar->fw_recovery.enable)
+               return;
+
        ath6kl_recovery_cleanup(ar);
 
        if (!ar->fw_recovery.err_reason)
 
 void ath6kl_recovery_resume(struct ath6kl *ar)
 {
+       if (!ar->fw_recovery.enable)
+               return;
+
        clear_bit(RECOVERY_CLEANUP, &ar->flag);
 
        if (!ar->fw_recovery.hb_poll)