static void rtw_coex_power_save_state(struct rtw_dev *rtwdev, u8 ps_type,
                                      u8 lps_val, u8 rpwm_val)
 {
-       struct rtw_lps_conf *lps_conf = &rtwdev->lps_conf;
-       struct rtw_vif *rtwvif;
        struct rtw_coex *coex = &rtwdev->coex;
        struct rtw_coex_stat *coex_stat = &coex->stat;
        u8 lps_mode = 0x0;
                /* recover to original 32k low power setting */
                coex_stat->wl_force_lps_ctrl = false;
 
-               rtwvif = lps_conf->rtwvif;
-               if (rtwvif && rtw_in_lps(rtwdev))
-                       rtw_leave_lps(rtwdev, rtwvif);
+               rtw_leave_lps(rtwdev);
                break;
        case COEX_PS_LPS_OFF:
                coex_stat->wl_force_lps_ctrl = true;
                if (lps_mode)
                        rtw_fw_coex_tdma_type(rtwdev, 0x8, 0, 0, 0, 0);
 
-               rtwvif = lps_conf->rtwvif;
-               if (rtwvif && rtw_in_lps(rtwdev))
-                       rtw_leave_lps(rtwdev, rtwvif);
+               rtw_leave_lps(rtwdev);
                break;
        default:
                break;
 
        struct rtw_vif *rtwvif = (struct rtw_vif *)vif->drv_priv;
        u32 config = 0;
 
-       rtw_leave_lps(rtwdev, rtwvif);
+       rtw_leave_lps(rtwdev);
 
        mutex_lock(&rtwdev->mutex);
 
 
         */
        if (rtw_fw_support_lps &&
            data.rtwvif && !data.active && data.assoc_cnt == 1)
-               rtw_enter_lps(rtwdev, data.rtwvif);
+               rtw_enter_lps(rtwdev, data.rtwvif->port);
        else
-               rtw_leave_lps(rtwdev, rtwdev->lps_conf.rtwvif);
+               rtw_leave_lps(rtwdev);
 
        if (test_bit(RTW_FLAG_SCANNING, rtwdev->flags))
                return;
 
 };
 
 struct rtw_lps_conf {
-       /* the interface to enter lps */
-       struct rtw_vif *rtwvif;
        enum rtw_lps_mode mode;
        enum rtw_pwr_state state;
        u8 awake_interval;
 
        return test_bit(RTW_FLAG_LEISURE_PS, rtwdev->flags);
 }
 
-void rtw_enter_lps(struct rtw_dev *rtwdev, struct rtw_vif *rtwvif)
+void rtw_enter_lps(struct rtw_dev *rtwdev, u8 port_id)
 {
        struct rtw_lps_conf *conf = &rtwdev->lps_conf;
 
-       if (WARN_ON(!rtwvif))
-               return;
-
-       if (rtwvif->in_lps)
+       if (test_bit(RTW_FLAG_LEISURE_PS, rtwdev->flags))
                return;
 
        conf->mode = RTW_MODE_LPS;
-       conf->rtwvif = rtwvif;
-       rtwvif->in_lps = true;
+       conf->port_id = port_id;
 
        rtw_enter_lps_core(rtwdev);
 }
 
-void rtw_leave_lps(struct rtw_dev *rtwdev, struct rtw_vif *rtwvif)
+void rtw_leave_lps(struct rtw_dev *rtwdev)
 {
        struct rtw_lps_conf *conf = &rtwdev->lps_conf;
 
-       if (WARN_ON(!rtwvif))
-               return;
-
-       if (!rtwvif->in_lps)
+       if (!test_bit(RTW_FLAG_LEISURE_PS, rtwdev->flags))
                return;
 
        conf->mode = RTW_MODE_ACTIVE;
-       conf->rtwvif = rtwvif;
-       rtwvif->in_lps = false;
 
        rtw_leave_lps_core(rtwdev);
 }
 
 int rtw_enter_ips(struct rtw_dev *rtwdev);
 int rtw_leave_ips(struct rtw_dev *rtwdev);
 
-void rtw_enter_lps(struct rtw_dev *rtwdev, struct rtw_vif *rtwvif);
-void rtw_leave_lps(struct rtw_dev *rtwdev, struct rtw_vif *rtwvif);
+void rtw_enter_lps(struct rtw_dev *rtwdev, u8 port_id);
+void rtw_leave_lps(struct rtw_dev *rtwdev);
 bool rtw_in_lps(struct rtw_dev *rtwdev);
 
 #endif