.btc_is_disable_edca_turbo = rtl_btc_is_disable_edca_turbo,
        .btc_is_bt_disabled = rtl_btc_is_bt_disabled,
        .btc_special_packet_notify = rtl_btc_special_packet_notify,
+       .btc_record_pwr_mode = rtl_btc_record_pwr_mode,
 };
 
+void rtl_btc_record_pwr_mode(struct rtl_priv *rtlpriv, u8 *buf, u8 len)
+{
+       u8 safe_len;
+
+       safe_len = sizeof(gl_bt_coexist.pwr_mode_val);
+
+       if (safe_len > len)
+               safe_len = len;
+
+       memcpy(gl_bt_coexist.pwr_mode_val, buf, safe_len);
+}
+
 void rtl_btc_init_variables(struct rtl_priv *rtlpriv)
 {
        exhalbtc_initlize_variables();
 
 bool rtl_btc_is_disable_edca_turbo(struct rtl_priv *rtlpriv);
 bool rtl_btc_is_bt_disabled(struct rtl_priv *rtlpriv);
 void rtl_btc_special_packet_notify(struct rtl_priv *rtlpriv, u8 pkt_type);
+void rtl_btc_record_pwr_mode(struct rtl_priv *rtlpriv, u8 *buf, u8 len);
 
 struct rtl_btc_ops *rtl_btc_get_ops_pointer(void);
 
 
        struct rtl_priv *rtlpriv = rtl_priv(hw);
        u8 u1_h2c_set_pwrmode[H2C_92E_PWEMODE_LENGTH] = { 0 };
        struct rtl_ps_ctl *ppsc = rtl_psc(rtl_priv(hw));
-       u8 rlbm , power_state = 0;
+       u8 rlbm, power_state = 0, byte5 = 0x40;
+       struct rtl_btc_ops *btc_ops = rtlpriv->btcoexist.btc_ops;
 
        RT_TRACE(rtlpriv, COMP_POWER, DBG_LOUD , "FW LPS mode = %d\n", mode);
 
        else
                power_state |= FW_PWR_STATE_RF_OFF;
        SET_H2CCMD_PWRMODE_PARM_PWR_STATE(u1_h2c_set_pwrmode, power_state);
+       SET_H2CCMD_PWRMODE_PARM_BYTE5(u1_h2c_set_pwrmode, byte5);
 
        RT_PRINT_DATA(rtlpriv, COMP_CMD, DBG_DMESG,
                      "rtl92c_set_fw_pwrmode(): u1_h2c_set_pwrmode\n",
                      u1_h2c_set_pwrmode, H2C_92E_PWEMODE_LENGTH);
+       if (rtlpriv->cfg->ops->get_btc_status())
+               btc_ops->btc_record_pwr_mode(rtlpriv, u1_h2c_set_pwrmode,
+                                            H2C_92E_PWEMODE_LENGTH);
        rtl92ee_fill_h2c_cmd(hw, H2C_92E_SETPWRMODE, H2C_92E_PWEMODE_LENGTH,
                             u1_h2c_set_pwrmode);
 }
 
 #define USE_OLD_WOWLAN_DEBUG_FW 0
 
 #define H2C_92E_RSVDPAGE_LOC_LEN               5
-#define H2C_92E_PWEMODE_LENGTH                 5
+#define H2C_92E_PWEMODE_LENGTH                 7
 #define H2C_92E_JOINBSSRPT_LENGTH              1
 #define H2C_92E_AP_OFFLOAD_LENGTH              3
 #define H2C_92E_WOWLAN_LENGTH                  3
        SET_BITS_TO_LE_1BYTE((__cmd)+3, 0, 8, __val)
 #define SET_H2CCMD_PWRMODE_PARM_PWR_STATE(__cmd, __val)                \
        SET_BITS_TO_LE_1BYTE((__cmd)+4, 0, 8, __val)
+#define SET_H2CCMD_PWRMODE_PARM_BYTE5(__cmd, __val)            \
+       SET_BITS_TO_LE_1BYTE((__cmd) + 5, 0, 8, __val)
 #define GET_92E_H2CCMD_PWRMODE_PARM_MODE(__cmd)                        \
        LE_BITS_TO_1BYTE(__cmd, 0, 8)
 
 
        struct rtl_priv *rtlpriv = rtl_priv(hw);
        u8 u1_h2c_set_pwrmode[H2C_PWEMODE_LENGTH] = { 0 };
        struct rtl_ps_ctl *ppsc = rtl_psc(rtl_priv(hw));
-       u8 rlbm, power_state = 0;
+       u8 rlbm, power_state = 0, byte5 = 0x40;
+       struct rtl_btc_ops *btc_ops = rtlpriv->btcoexist.btc_ops;
+
        RT_TRACE(rtlpriv, COMP_POWER, DBG_LOUD, "FW LPS mode = %d\n", mode);
 
        SET_H2CCMD_PWRMODE_PARM_MODE(u1_h2c_set_pwrmode, ((mode) ? 1 : 0));
        else
                power_state |= FW_PWR_STATE_RF_OFF;
        SET_H2CCMD_PWRMODE_PARM_PWR_STATE(u1_h2c_set_pwrmode, power_state);
+       SET_H2CCMD_PWRMODE_PARM_BYTE5(u1_h2c_set_pwrmode, byte5);
 
        RT_PRINT_DATA(rtlpriv, COMP_CMD, DBG_DMESG,
                      "rtl92c_set_fw_pwrmode(): u1_h2c_set_pwrmode\n",
                      u1_h2c_set_pwrmode, H2C_PWEMODE_LENGTH);
+       if (rtlpriv->cfg->ops->get_btc_status())
+               btc_ops->btc_record_pwr_mode(rtlpriv, u1_h2c_set_pwrmode,
+                                            H2C_PWEMODE_LENGTH);
        rtl8723be_fill_h2c_cmd(hw, H2C_8723B_SETPWRMODE, H2C_PWEMODE_LENGTH,
                               u1_h2c_set_pwrmode);
 }
 
 
 #define USE_OLD_WOWLAN_DEBUG_FW                        0
 
-#define H2C_PWEMODE_LENGTH                     5
+#define H2C_PWEMODE_LENGTH                     7
 
 /* Fw PS state for RPWM.
 *BIT[2:0] = HW state
        SET_BITS_TO_LE_1BYTE((__ph2ccmd)+3, 0, 8, __val)
 #define SET_H2CCMD_PWRMODE_PARM_PWR_STATE(__ph2ccmd, __val)            \
        SET_BITS_TO_LE_1BYTE((__ph2ccmd)+4, 0, 8, __val)
+#define SET_H2CCMD_PWRMODE_PARM_BYTE5(__ph2ccmd, __val)                        \
+       SET_BITS_TO_LE_1BYTE((__ph2ccmd) + 5, 0, 8, __val)
 #define GET_88E_H2CCMD_PWRMODE_PARM_MODE(__ph2ccmd)                    \
        LE_BITS_TO_1BYTE(__ph2ccmd, 0, 8)
 
 
        struct rtl_priv *rtlpriv = rtl_priv(hw);
        u8 u1_h2c_set_pwrmode[H2C_8821AE_PWEMODE_LENGTH] = { 0 };
        struct rtl_ps_ctl *ppsc = rtl_psc(rtl_priv(hw));
-       u8 rlbm, power_state = 0;
+       u8 rlbm, power_state = 0, byte5 = 0x40;
+       struct rtl_btc_ops *btc_ops = rtlpriv->btcoexist.btc_ops;
 
        RT_TRACE(rtlpriv, COMP_POWER, DBG_LOUD, "FW LPS mode = %d\n", mode);
 
                power_state |= FW_PWR_STATE_RF_OFF;
 
        SET_H2CCMD_PWRMODE_PARM_PWR_STATE(u1_h2c_set_pwrmode, power_state);
+       SET_H2CCMD_PWRMODE_PARM_BYTE5(u1_h2c_set_pwrmode, byte5);
 
        RT_PRINT_DATA(rtlpriv, COMP_CMD, DBG_DMESG,
                      "rtl92c_set_fw_pwrmode(): u1_h2c_set_pwrmode\n",
                      u1_h2c_set_pwrmode, H2C_8821AE_PWEMODE_LENGTH);
+       if (rtlpriv->cfg->ops->get_btc_status())
+               btc_ops->btc_record_pwr_mode(rtlpriv, u1_h2c_set_pwrmode,
+                                            H2C_8821AE_PWEMODE_LENGTH);
        rtl8821ae_fill_h2c_cmd(hw, H2C_8821AE_SETPWRMODE,
                               H2C_8821AE_PWEMODE_LENGTH,
                               u1_h2c_set_pwrmode);
 
 #define USE_OLD_WOWLAN_DEBUG_FW 0
 
 #define H2C_8821AE_RSVDPAGE_LOC_LEN            5
-#define H2C_8821AE_PWEMODE_LENGTH                      5
+#define H2C_8821AE_PWEMODE_LENGTH                      7
 #define H2C_8821AE_JOINBSSRPT_LENGTH           1
 #define H2C_8821AE_AP_OFFLOAD_LENGTH           3
 #define H2C_8821AE_WOWLAN_LENGTH                       3
        SET_BITS_TO_LE_1BYTE((__cmd)+3, 0, 8, __value)
 #define SET_H2CCMD_PWRMODE_PARM_PWR_STATE(__cmd, __value)      \
        SET_BITS_TO_LE_1BYTE((__cmd)+4, 0, 8, __value)
+#define SET_H2CCMD_PWRMODE_PARM_BYTE5(__cmd, __value)          \
+       SET_BITS_TO_LE_1BYTE((__cmd) + 5, 0, 8, __value)
 #define GET_8821AE_H2CCMD_PWRMODE_PARM_MODE(__cmd)             \
        LE_BITS_TO_1BYTE(__cmd, 0, 8)
 
 
        bool (*btc_is_bt_disabled) (struct rtl_priv *rtlpriv);
        void (*btc_special_packet_notify)(struct rtl_priv *rtlpriv,
                                          u8 pkt_type);
+       void (*btc_record_pwr_mode)(struct rtl_priv *rtlpriv, u8 *buf, u8 len);
 };
 
 struct proxim {