wcn36xx_dbg(WCN36XX_DBG_MAC, "wcn36xx_config channel switch=%d\n",
                            ch);
 
-               if (wcn->sw_scan_opchannel == ch) {
+               if (wcn->sw_scan_opchannel == ch && wcn->sw_scan_channel) {
                        /* If channel is the initial operating channel, we may
                         * want to receive/transmit regular data packets, then
                         * simply stop the scan session and exit PS mode.
                         */
                        wcn36xx_smd_finish_scan(wcn, HAL_SYS_MODE_SCAN,
                                                wcn->sw_scan_vif);
+                       wcn->sw_scan_channel = 0;
                } else if (wcn->sw_scan) {
                        /* A scan is ongoing, do not change the operating
                         * channel, but start a scan session on the channel.
                        wcn36xx_smd_init_scan(wcn, HAL_SYS_MODE_SCAN,
                                              wcn->sw_scan_vif);
                        wcn36xx_smd_start_scan(wcn, ch);
+                       wcn->sw_scan_channel = ch;
                } else {
                        wcn36xx_change_opchannel(wcn, ch);
                }
 
        wcn->sw_scan = true;
        wcn->sw_scan_vif = vif;
+       wcn->sw_scan_channel = 0;
        if (vif_priv->sta_assoc)
                wcn->sw_scan_opchannel = WCN36XX_HW_CHANNEL(wcn);
        else