priv->op_mode == NL80211_IFTYPE_AP)
                        vnt_schedule_command(priv, WLAN_CMD_BECON_SEND);
 
-               if (int_data->isr0 & ISR_TBTT) {
-                       if (priv->hw->conf.flags & IEEE80211_CONF_PS)
+               if (int_data->isr0 & ISR_TBTT &&
+                   priv->hw->conf.flags & IEEE80211_CONF_PS) {
+                       if (!priv->wake_up_count)
+                               priv->wake_up_count =
+                                       priv->hw->conf.listen_interval;
+
+                       --priv->wake_up_count;
+
+                       /* Turn on wake up to listen next beacon */
+                       if (priv->wake_up_count == 1)
                                vnt_schedule_command(priv,
-                                                       WLAN_CMD_TBTT_WAKEUP);
+                                                    WLAN_CMD_TBTT_WAKEUP);
                }
                priv->current_tsf = le64_to_cpu(int_data->tsf);
 
 
        struct ieee80211_conf *conf = &hw->conf;
        int wake_up = false;
 
-       if (conf->listen_interval == 1) {
+       if (conf->listen_interval > 1) {
                /* Turn on wake up to listen next beacon */
                vnt_mac_reg_bits_on(priv, MAC_REG_PSCTL, PSCTL_LNBCN);
                wake_up = true;