Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
[firefly-linux-kernel-4.4.55.git] / drivers / net / wireless / rtlwifi / rtl8723ae / hw.c
index 9a0c71c2e15ecdf4fa60a345391ecabba8d2fad1..c333dfd116b868a8aff3dcf780e04611860d7951 100644 (file)
@@ -449,6 +449,9 @@ void rtl8723ae_set_hw_reg(struct ieee80211_hw *hw, u8 variable, u8 *val)
                rtl8723ae_set_fw_joinbss_report_cmd(hw, (*(u8 *) val));
 
                break; }
+       case HW_VAR_H2C_FW_P2P_PS_OFFLOAD:
+               rtl8723ae_set_p2p_ps_offload_cmd(hw, (*(u8 *)val));
+               break;
        case HW_VAR_AID:{
                u16 u2btmp;
                u2btmp = rtl_read_word(rtlpriv, REG_BCN_PSR_RPT);
@@ -474,6 +477,39 @@ void rtl8723ae_set_hw_reg(struct ieee80211_hw *hw, u8 variable, u8 *val)
                if (btype_ibss == true)
                        _rtl8723ae_resume_tx_beacon(hw);
                break; }
+       case HW_VAR_FW_LPS_ACTION: {
+               bool enter_fwlps = *((bool *)val);
+               u8 rpwm_val, fw_pwrmode;
+               bool fw_current_inps;
+
+               if (enter_fwlps) {
+                       rpwm_val = 0x02;        /* RF off */
+                       fw_current_inps = true;
+                       rtlpriv->cfg->ops->set_hw_reg(hw,
+                                       HW_VAR_FW_PSMODE_STATUS,
+                                       (u8 *)(&fw_current_inps));
+                       rtlpriv->cfg->ops->set_hw_reg(hw,
+                                       HW_VAR_H2C_FW_PWRMODE,
+                                       (u8 *)(&ppsc->fwctrl_psmode));
+
+                       rtlpriv->cfg->ops->set_hw_reg(hw,
+                                       HW_VAR_SET_RPWM,
+                                       (u8 *)(&rpwm_val));
+               } else {
+                       rpwm_val = 0x0C;        /* RF on */
+                       fw_pwrmode = FW_PS_ACTIVE_MODE;
+                       fw_current_inps = false;
+                       rtlpriv->cfg->ops->set_hw_reg(hw, HW_VAR_SET_RPWM,
+                                       (u8 *)(&rpwm_val));
+                       rtlpriv->cfg->ops->set_hw_reg(hw,
+                                       HW_VAR_H2C_FW_PWRMODE,
+                                       (u8 *)(&fw_pwrmode));
+
+                       rtlpriv->cfg->ops->set_hw_reg(hw,
+                                       HW_VAR_FW_PSMODE_STATUS,
+                                       (u8 *)(&fw_current_inps));
+               }
+               break; }
        default:
                RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG,
                         "switch case not processed\n");
@@ -1379,7 +1415,7 @@ static void _rtl8723ae_read_txpower_info_from_hwpg(struct ieee80211_hw *hw,
                }
 
                for (i = 0; i < 14; i++) {
-                       RTPRINT(rtlpriv, FINIT, INIT_TxPower,
+                       RTPRINT(rtlpriv, FINIT, INIT_TXPOWER,
                                "RF(%d)-Ch(%d) [CCK / HT40_1S / HT40_2S] = "
                                "[0x%x / 0x%x / 0x%x]\n", rf_path, i,
                                rtlefuse->txpwrlevel_cck[rf_path][i],
@@ -1420,10 +1456,10 @@ static void _rtl8723ae_read_txpower_info_from_hwpg(struct ieee80211_hw *hw,
                                    0xf0) >> 4);
                        }
 
-                       RTPRINT(rtlpriv, FINIT, INIT_TxPower,
+                       RTPRINT(rtlpriv, FINIT, INIT_TXPOWER,
                                "RF-%d pwrgroup_ht20[%d] = 0x%x\n", rf_path, i,
                                rtlefuse->pwrgroup_ht20[rf_path][i]);
-                       RTPRINT(rtlpriv, FINIT, INIT_TxPower,
+                       RTPRINT(rtlpriv, FINIT, INIT_TXPOWER,
                                "RF-%d pwrgroup_ht40[%d] = 0x%x\n", rf_path, i,
                                rtlefuse->pwrgroup_ht40[rf_path][i]);
                }
@@ -1463,19 +1499,19 @@ static void _rtl8723ae_read_txpower_info_from_hwpg(struct ieee80211_hw *hw,
            rtlefuse->txpwr_legacyhtdiff[RF90_PATH_A][7];
 
        for (i = 0; i < 14; i++)
-               RTPRINT(rtlpriv, FINIT, INIT_TxPower,
+               RTPRINT(rtlpriv, FINIT, INIT_TXPOWER,
                        "RF-A Ht20 to HT40 Diff[%d] = 0x%x\n", i,
                        rtlefuse->txpwr_ht20diff[RF90_PATH_A][i]);
        for (i = 0; i < 14; i++)
-               RTPRINT(rtlpriv, FINIT, INIT_TxPower,
+               RTPRINT(rtlpriv, FINIT, INIT_TXPOWER,
                        "RF-A Legacy to Ht40 Diff[%d] = 0x%x\n", i,
                        rtlefuse->txpwr_legacyhtdiff[RF90_PATH_A][i]);
        for (i = 0; i < 14; i++)
-               RTPRINT(rtlpriv, FINIT, INIT_TxPower,
+               RTPRINT(rtlpriv, FINIT, INIT_TXPOWER,
                        "RF-B Ht20 to HT40 Diff[%d] = 0x%x\n", i,
                        rtlefuse->txpwr_ht20diff[RF90_PATH_B][i]);
        for (i = 0; i < 14; i++)
-               RTPRINT(rtlpriv, FINIT, INIT_TxPower,
+               RTPRINT(rtlpriv, FINIT, INIT_TXPOWER,
                        "RF-B Legacy to HT40 Diff[%d] = 0x%x\n", i,
                        rtlefuse->txpwr_legacyhtdiff[RF90_PATH_B][i]);
 
@@ -1483,14 +1519,14 @@ static void _rtl8723ae_read_txpower_info_from_hwpg(struct ieee80211_hw *hw,
                rtlefuse->eeprom_regulatory = (hwinfo[RF_OPTION1] & 0x7);
        else
                rtlefuse->eeprom_regulatory = 0;
-       RTPRINT(rtlpriv, FINIT, INIT_TxPower,
+       RTPRINT(rtlpriv, FINIT, INIT_TXPOWER,
                "eeprom_regulatory = 0x%x\n", rtlefuse->eeprom_regulatory);
 
        if (!autoload_fail)
                rtlefuse->eeprom_tssi[RF90_PATH_A] = hwinfo[EEPROM_TSSI_A];
        else
                rtlefuse->eeprom_tssi[RF90_PATH_A] = EEPROM_DEFAULT_TSSI;
-       RTPRINT(rtlpriv, FINIT, INIT_TxPower,
+       RTPRINT(rtlpriv, FINIT, INIT_TXPOWER,
                "TSSI_A = 0x%x, TSSI_B = 0x%x\n",
                rtlefuse->eeprom_tssi[RF90_PATH_A],
                rtlefuse->eeprom_tssi[RF90_PATH_B]);
@@ -1505,7 +1541,7 @@ static void _rtl8723ae_read_txpower_info_from_hwpg(struct ieee80211_hw *hw,
                rtlefuse->apk_thermalmeterignore = true;
 
        rtlefuse->thermalmeter[0] = rtlefuse->eeprom_thermalmeter;
-       RTPRINT(rtlpriv, FINIT, INIT_TxPower,
+       RTPRINT(rtlpriv, FINIT, INIT_TXPOWER,
                "thermalmeter = 0x%x\n", rtlefuse->eeprom_thermalmeter);
 }
 
@@ -1713,19 +1749,7 @@ static void _rtl8723ae_hal_customized_behavior(struct ieee80211_hw *hw)
        struct rtl_pci_priv *pcipriv = rtl_pcipriv(hw);
        struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
 
-       switch (rtlhal->oem_id) {
-       case RT_CID_819x_HP:
-               pcipriv->ledctl.led_opendrain = true;
-               break;
-       case RT_CID_819x_Lenovo:
-       case RT_CID_DEFAULT:
-       case RT_CID_TOSHIBA:
-       case RT_CID_CCX:
-       case RT_CID_819x_Acer:
-       case RT_CID_WHQL:
-       default:
-               break;
-       }
+       pcipriv->ledctl.led_opendrain = true;
        RT_TRACE(rtlpriv, COMP_INIT, DBG_DMESG,
                 "RT Customized ID: 0x%02X\n", rtlhal->oem_id);
 }