return -1;
        }
 
+       if (adapter->hs_enabling && cmd_no != HostCmd_CMD_802_11_HS_CFG_ENH) {
+               dev_err(adapter->dev, "PREP_CMD: host entering sleep state\n");
+               return -1;
+       }
+
        if (adapter->surprise_removed) {
                dev_err(adapter->dev, "PREP_CMD: card is removed\n");
                return -1;
 
        u16 hs_activate_wait_q_woken;
        wait_queue_head_t hs_activate_wait_q;
        bool is_suspended;
+       bool hs_enabling;
        u8 event_body[MAX_EVENT_SIZE];
        u32 hw_dot_11n_dev_cap;
        u8 hw_dev_mcs_support;
 
 
        /* Indicate device suspended */
        adapter->is_suspended = true;
+       adapter->hs_enabling = false;
 
        return 0;
 }
 
        /* Enable the Host Sleep */
        if (!mwifiex_enable_hs(adapter)) {
                dev_err(adapter->dev, "cmd: failed to suspend\n");
+               adapter->hs_enabling = false;
                return -EFAULT;
        }
 
 
        /* Indicate device suspended */
        adapter->is_suspended = true;
+       adapter->hs_enabling = false;
 
        return ret;
 }
 
        memset(&hscfg, 0, sizeof(struct mwifiex_ds_hs_cfg));
        hscfg.is_invoke_hostcmd = true;
 
+       adapter->hs_enabling = true;
+       mwifiex_cancel_all_pending_cmd(adapter);
+
        if (mwifiex_set_hs_params(mwifiex_get_priv(adapter,
                                                   MWIFIEX_BSS_ROLE_STA),
                                  HostCmd_ACT_GEN_SET, MWIFIEX_SYNC_CMD,
 
         * 'suspended' state and a 'disconnect' one.
         */
        adapter->is_suspended = true;
+       adapter->hs_enabling = false;
 
        if (atomic_read(&card->rx_cmd_urb_pending) && card->rx_cmd.urb)
                usb_kill_urb(card->rx_cmd.urb);