vif->wdev.iftype = type;
        vif->fw_vif_idx = fw_vif_idx;
        vif->nw_type = vif->next_mode = nw_type;
+       vif->listen_intvl_t = ATH6KL_DEFAULT_LISTEN_INTVAL;
 
        memcpy(ndev->dev_addr, ar->mac_addr, ETH_ALEN);
        if (fw_vif_idx != 0)
 
        clear_bit(SKIP_SCAN, &ar->flag);
        clear_bit(DESTROY_IN_PROGRESS, &ar->flag);
 
-       ar->listen_intvl_b = A_DEFAULT_LISTEN_INTERVAL;
        ar->tx_pwr = 0;
-
        ar->intra_bss = 1;
        ar->lrssi_roam_threshold = DEF_LRSSI_ROAM_THRESHOLD;
 
 
 #define MAX_DEFAULT_SEND_QUEUE_DEPTH      (MAX_DEF_COOKIE_NUM / WMM_NUM_AC)
 
 #define DISCON_TIMER_INTVAL               10000  /* in msec */
-#define A_DEFAULT_LISTEN_INTERVAL         1      /* beacon intervals */
-#define A_MAX_WOW_LISTEN_INTERVAL         1000
 
 /* Channel dwell time in fg scan */
 #define ATH6KL_FG_SCAN_INTERVAL                50 /* in ms */
 
 #define MBOX_YIELD_LIMIT 99
 
+#define ATH6KL_DEFAULT_LISTEN_INTVAL   100 /* in TUs */
+
 /* configuration lags */
 /*
  * ATH6KL_CONF_IGNORE_ERP_BARKER: Ignore the barker premable in
        bool probe_req_report;
        u16 next_chan;
        u16 assoc_bss_beacon_int;
+       u16 listen_intvl_t;
        u8 assoc_bss_dtim_period;
        struct net_device_stats net_stats;
        struct target_stats target_stats;
        u8 avail_idx_map;
        spinlock_t lock;
        struct semaphore sem;
-       u16 listen_intvl_b;
        u8 lrssi_roam_threshold;
        struct ath6kl_version version;
        u32 target_type;
 
        if (kstrtou16(buf, 0, &listen_interval))
                return -EINVAL;
 
-       if ((listen_interval < 1) || (listen_interval > 50))
+       if ((listen_interval < 15) || (listen_interval > 3000))
                return -EINVAL;
 
-       ar->listen_intvl_b = listen_interval;
-       ath6kl_wmi_listeninterval_cmd(ar->wmi, vif->fw_vif_idx, 0,
-                                     ar->listen_intvl_b);
+       vif->listen_intvl_t = listen_interval;
+       ath6kl_wmi_listeninterval_cmd(ar->wmi, vif->fw_vif_idx,
+                                     vif->listen_intvl_t, 0);
 
        return count;
 }
                                      size_t count, loff_t *ppos)
 {
        struct ath6kl *ar = file->private_data;
+       struct ath6kl_vif *vif;
        char buf[32];
        int len;
 
-       len = scnprintf(buf, sizeof(buf), "%u\n", ar->listen_intvl_b);
+       vif = ath6kl_vif_first(ar);
+       if (!vif)
+               return -EIO;
+
+       len = scnprintf(buf, sizeof(buf), "%u\n", vif->listen_intvl_t);
 
        return simple_read_from_buffer(user_buf, count, ppos, buf, len);
 }
 
        memcpy(vif->bssid, bssid, sizeof(vif->bssid));
        vif->bss_ch = channel;
 
-       if ((vif->nw_type == INFRA_NETWORK)) {
-               ar->listen_intvl_b = listen_int;
+       if ((vif->nw_type == INFRA_NETWORK))
                ath6kl_wmi_listeninterval_cmd(ar->wmi, vif->fw_vif_idx,
-                                             0, ar->listen_intvl_b);
-       }
+                                             vif->listen_intvl_t, 0);
 
        netif_wake_queue(vif->ndev);