mirror of https://gitee.com/openkylin/linux.git
rtlwifi: Move common routines to core
Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
f3355dd9f7
commit
25b13dbc38
|
@ -72,16 +72,4 @@
|
||||||
#define BIT30 0x40000000
|
#define BIT30 0x40000000
|
||||||
#define BIT31 0x80000000
|
#define BIT31 0x80000000
|
||||||
|
|
||||||
#define MASKBYTE0 0xff
|
|
||||||
#define MASKBYTE1 0xff00
|
|
||||||
#define MASKBYTE2 0xff0000
|
|
||||||
#define MASKBYTE3 0xff000000
|
|
||||||
#define MASKHWORD 0xffff0000
|
|
||||||
#define MASKLWORD 0x0000ffff
|
|
||||||
#define MASKDWORD 0xffffffff
|
|
||||||
#define MASK12BITS 0xfff
|
|
||||||
#define MASKH4BITS 0xf0000000
|
|
||||||
#define MASKOFDM_D 0xffc00000
|
|
||||||
#define MASKCCK 0x3f3f3f3f
|
|
||||||
|
|
||||||
#endif /* __HALBT_PRECOMP_H__ */
|
#endif /* __HALBT_PRECOMP_H__ */
|
||||||
|
|
|
@ -36,6 +36,66 @@
|
||||||
|
|
||||||
#include <linux/export.h>
|
#include <linux/export.h>
|
||||||
|
|
||||||
|
void rtl_addr_delay(u32 addr)
|
||||||
|
{
|
||||||
|
if (addr == 0xfe)
|
||||||
|
mdelay(50);
|
||||||
|
else if (addr == 0xfd)
|
||||||
|
mdelay(5);
|
||||||
|
else if (addr == 0xfc)
|
||||||
|
mdelay(1);
|
||||||
|
else if (addr == 0xfb)
|
||||||
|
udelay(50);
|
||||||
|
else if (addr == 0xfa)
|
||||||
|
udelay(5);
|
||||||
|
else if (addr == 0xf9)
|
||||||
|
udelay(1);
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(rtl_addr_delay);
|
||||||
|
|
||||||
|
void rtl_rfreg_delay(struct ieee80211_hw *hw, enum radio_path rfpath, u32 addr,
|
||||||
|
u32 mask, u32 data)
|
||||||
|
{
|
||||||
|
if (addr == 0xfe) {
|
||||||
|
mdelay(50);
|
||||||
|
} else if (addr == 0xfd) {
|
||||||
|
mdelay(5);
|
||||||
|
} else if (addr == 0xfc) {
|
||||||
|
mdelay(1);
|
||||||
|
} else if (addr == 0xfb) {
|
||||||
|
udelay(50);
|
||||||
|
} else if (addr == 0xfa) {
|
||||||
|
udelay(5);
|
||||||
|
} else if (addr == 0xf9) {
|
||||||
|
udelay(1);
|
||||||
|
} else {
|
||||||
|
rtl_set_rfreg(hw, rfpath, addr, mask, data);
|
||||||
|
udelay(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(rtl_rfreg_delay);
|
||||||
|
|
||||||
|
void rtl_bb_delay(struct ieee80211_hw *hw, u32 addr, u32 data)
|
||||||
|
{
|
||||||
|
if (addr == 0xfe) {
|
||||||
|
mdelay(50);
|
||||||
|
} else if (addr == 0xfd) {
|
||||||
|
mdelay(5);
|
||||||
|
} else if (addr == 0xfc) {
|
||||||
|
mdelay(1);
|
||||||
|
} else if (addr == 0xfb) {
|
||||||
|
udelay(50);
|
||||||
|
} else if (addr == 0xfa) {
|
||||||
|
udelay(5);
|
||||||
|
} else if (addr == 0xf9) {
|
||||||
|
udelay(1);
|
||||||
|
} else {
|
||||||
|
rtl_set_bbreg(hw, addr, MASKDWORD, data);
|
||||||
|
udelay(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(rtl_bb_delay);
|
||||||
|
|
||||||
void rtl_fw_cb(const struct firmware *firmware, void *context)
|
void rtl_fw_cb(const struct firmware *firmware, void *context)
|
||||||
{
|
{
|
||||||
struct ieee80211_hw *hw = context;
|
struct ieee80211_hw *hw = context;
|
||||||
|
|
|
@ -41,5 +41,9 @@
|
||||||
|
|
||||||
extern const struct ieee80211_ops rtl_ops;
|
extern const struct ieee80211_ops rtl_ops;
|
||||||
void rtl_fw_cb(const struct firmware *firmware, void *context);
|
void rtl_fw_cb(const struct firmware *firmware, void *context);
|
||||||
|
void rtl_addr_delay(u32 addr);
|
||||||
|
void rtl_rfreg_delay(struct ieee80211_hw *hw, enum radio_path rfpath, u32 addr,
|
||||||
|
u32 mask, u32 data);
|
||||||
|
void rtl_bb_delay(struct ieee80211_hw *hw, u32 addr, u32 data);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -32,6 +32,106 @@
|
||||||
#include "base.h"
|
#include "base.h"
|
||||||
#include "ps.h"
|
#include "ps.h"
|
||||||
|
|
||||||
|
/* Description:
|
||||||
|
* This routine deals with the Power Configuration CMD
|
||||||
|
* parsing for RTL8723/RTL8188E Series IC.
|
||||||
|
* Assumption:
|
||||||
|
* We should follow specific format that was released from HW SD.
|
||||||
|
*/
|
||||||
|
bool rtl_hal_pwrseqcmdparsing(struct rtl_priv *rtlpriv, u8 cut_version,
|
||||||
|
u8 faversion, u8 interface_type,
|
||||||
|
struct wlan_pwr_cfg pwrcfgcmd[])
|
||||||
|
{
|
||||||
|
struct wlan_pwr_cfg cfg_cmd = {0};
|
||||||
|
bool polling_bit = false;
|
||||||
|
u32 ary_idx = 0;
|
||||||
|
u8 value = 0;
|
||||||
|
u32 offset = 0;
|
||||||
|
u32 polling_count = 0;
|
||||||
|
u32 max_polling_cnt = 5000;
|
||||||
|
|
||||||
|
do {
|
||||||
|
cfg_cmd = pwrcfgcmd[ary_idx];
|
||||||
|
RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE,
|
||||||
|
"rtl_hal_pwrseqcmdparsing(): offset(%#x),cut_msk(%#x), famsk(%#x),"
|
||||||
|
"interface_msk(%#x), base(%#x), cmd(%#x), msk(%#x), value(%#x)\n",
|
||||||
|
GET_PWR_CFG_OFFSET(cfg_cmd),
|
||||||
|
GET_PWR_CFG_CUT_MASK(cfg_cmd),
|
||||||
|
GET_PWR_CFG_FAB_MASK(cfg_cmd),
|
||||||
|
GET_PWR_CFG_INTF_MASK(cfg_cmd),
|
||||||
|
GET_PWR_CFG_BASE(cfg_cmd), GET_PWR_CFG_CMD(cfg_cmd),
|
||||||
|
GET_PWR_CFG_MASK(cfg_cmd), GET_PWR_CFG_VALUE(cfg_cmd));
|
||||||
|
|
||||||
|
if ((GET_PWR_CFG_FAB_MASK(cfg_cmd)&faversion) &&
|
||||||
|
(GET_PWR_CFG_CUT_MASK(cfg_cmd)&cut_version) &&
|
||||||
|
(GET_PWR_CFG_INTF_MASK(cfg_cmd)&interface_type)) {
|
||||||
|
switch (GET_PWR_CFG_CMD(cfg_cmd)) {
|
||||||
|
case PWR_CMD_READ:
|
||||||
|
RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE,
|
||||||
|
"rtl_hal_pwrseqcmdparsing(): PWR_CMD_READ\n");
|
||||||
|
break;
|
||||||
|
case PWR_CMD_WRITE:
|
||||||
|
RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE,
|
||||||
|
"rtl_hal_pwrseqcmdparsing(): PWR_CMD_WRITE\n");
|
||||||
|
offset = GET_PWR_CFG_OFFSET(cfg_cmd);
|
||||||
|
|
||||||
|
/*Read the value from system register*/
|
||||||
|
value = rtl_read_byte(rtlpriv, offset);
|
||||||
|
value &= (~(GET_PWR_CFG_MASK(cfg_cmd)));
|
||||||
|
value |= (GET_PWR_CFG_VALUE(cfg_cmd) &
|
||||||
|
GET_PWR_CFG_MASK(cfg_cmd));
|
||||||
|
|
||||||
|
/*Write the value back to sytem register*/
|
||||||
|
rtl_write_byte(rtlpriv, offset, value);
|
||||||
|
break;
|
||||||
|
case PWR_CMD_POLLING:
|
||||||
|
RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE,
|
||||||
|
"rtl_hal_pwrseqcmdparsing(): PWR_CMD_POLLING\n");
|
||||||
|
polling_bit = false;
|
||||||
|
offset = GET_PWR_CFG_OFFSET(cfg_cmd);
|
||||||
|
|
||||||
|
do {
|
||||||
|
value = rtl_read_byte(rtlpriv, offset);
|
||||||
|
|
||||||
|
value &= GET_PWR_CFG_MASK(cfg_cmd);
|
||||||
|
if (value ==
|
||||||
|
(GET_PWR_CFG_VALUE(cfg_cmd)
|
||||||
|
& GET_PWR_CFG_MASK(cfg_cmd)))
|
||||||
|
polling_bit = true;
|
||||||
|
else
|
||||||
|
udelay(10);
|
||||||
|
|
||||||
|
if (polling_count++ > max_polling_cnt)
|
||||||
|
return false;
|
||||||
|
} while (!polling_bit);
|
||||||
|
break;
|
||||||
|
case PWR_CMD_DELAY:
|
||||||
|
RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE,
|
||||||
|
"rtl_hal_pwrseqcmdparsing(): PWR_CMD_DELAY\n");
|
||||||
|
if (GET_PWR_CFG_VALUE(cfg_cmd) ==
|
||||||
|
PWRSEQ_DELAY_US)
|
||||||
|
udelay(GET_PWR_CFG_OFFSET(cfg_cmd));
|
||||||
|
else
|
||||||
|
mdelay(GET_PWR_CFG_OFFSET(cfg_cmd));
|
||||||
|
break;
|
||||||
|
case PWR_CMD_END:
|
||||||
|
RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE,
|
||||||
|
"rtl_hal_pwrseqcmdparsing(): PWR_CMD_END\n");
|
||||||
|
return true;
|
||||||
|
default:
|
||||||
|
RT_ASSERT(false,
|
||||||
|
"rtl_hal_pwrseqcmdparsing(): Unknown CMD!!\n");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
ary_idx++;
|
||||||
|
} while (1);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(rtl_hal_pwrseqcmdparsing);
|
||||||
|
|
||||||
bool rtl_ps_enable_nic(struct ieee80211_hw *hw)
|
bool rtl_ps_enable_nic(struct ieee80211_hw *hw)
|
||||||
{
|
{
|
||||||
struct rtl_priv *rtlpriv = rtl_priv(hw);
|
struct rtl_priv *rtlpriv = rtl_priv(hw);
|
||||||
|
|
|
@ -32,6 +32,66 @@
|
||||||
|
|
||||||
#define MAX_SW_LPS_SLEEP_INTV 5
|
#define MAX_SW_LPS_SLEEP_INTV 5
|
||||||
|
|
||||||
|
/*---------------------------------------------
|
||||||
|
* 3 The value of cmd: 4 bits
|
||||||
|
*---------------------------------------------
|
||||||
|
*/
|
||||||
|
#define PWR_CMD_READ 0x00
|
||||||
|
#define PWR_CMD_WRITE 0x01
|
||||||
|
#define PWR_CMD_POLLING 0x02
|
||||||
|
#define PWR_CMD_DELAY 0x03
|
||||||
|
#define PWR_CMD_END 0x04
|
||||||
|
|
||||||
|
/* define the base address of each block */
|
||||||
|
#define PWR_BASEADDR_MAC 0x00
|
||||||
|
#define PWR_BASEADDR_USB 0x01
|
||||||
|
#define PWR_BASEADDR_PCIE 0x02
|
||||||
|
#define PWR_BASEADDR_SDIO 0x03
|
||||||
|
|
||||||
|
#define PWR_FAB_ALL_MSK (BIT(0)|BIT(1)|BIT(2)|BIT(3))
|
||||||
|
#define PWR_CUT_TESTCHIP_MSK BIT(0)
|
||||||
|
#define PWR_CUT_A_MSK BIT(1)
|
||||||
|
#define PWR_CUT_B_MSK BIT(2)
|
||||||
|
#define PWR_CUT_C_MSK BIT(3)
|
||||||
|
#define PWR_CUT_D_MSK BIT(4)
|
||||||
|
#define PWR_CUT_E_MSK BIT(5)
|
||||||
|
#define PWR_CUT_F_MSK BIT(6)
|
||||||
|
#define PWR_CUT_G_MSK BIT(7)
|
||||||
|
#define PWR_CUT_ALL_MSK 0xFF
|
||||||
|
#define PWR_INTF_SDIO_MSK BIT(0)
|
||||||
|
#define PWR_INTF_USB_MSK BIT(1)
|
||||||
|
#define PWR_INTF_PCI_MSK BIT(2)
|
||||||
|
#define PWR_INTF_ALL_MSK (BIT(0)|BIT(1)|BIT(2)|BIT(3))
|
||||||
|
|
||||||
|
enum pwrseq_delay_unit {
|
||||||
|
PWRSEQ_DELAY_US,
|
||||||
|
PWRSEQ_DELAY_MS,
|
||||||
|
};
|
||||||
|
|
||||||
|
struct wlan_pwr_cfg {
|
||||||
|
u16 offset;
|
||||||
|
u8 cut_msk;
|
||||||
|
u8 fab_msk:4;
|
||||||
|
u8 interface_msk:4;
|
||||||
|
u8 base:4;
|
||||||
|
u8 cmd:4;
|
||||||
|
u8 msk;
|
||||||
|
u8 value;
|
||||||
|
};
|
||||||
|
|
||||||
|
#define GET_PWR_CFG_OFFSET(__PWR_CMD) (__PWR_CMD.offset)
|
||||||
|
#define GET_PWR_CFG_CUT_MASK(__PWR_CMD) (__PWR_CMD.cut_msk)
|
||||||
|
#define GET_PWR_CFG_FAB_MASK(__PWR_CMD) (__PWR_CMD.fab_msk)
|
||||||
|
#define GET_PWR_CFG_INTF_MASK(__PWR_CMD) (__PWR_CMD.interface_msk)
|
||||||
|
#define GET_PWR_CFG_BASE(__PWR_CMD) (__PWR_CMD.base)
|
||||||
|
#define GET_PWR_CFG_CMD(__PWR_CMD) (__PWR_CMD.cmd)
|
||||||
|
#define GET_PWR_CFG_MASK(__PWR_CMD) (__PWR_CMD.msk)
|
||||||
|
#define GET_PWR_CFG_VALUE(__PWR_CMD) (__PWR_CMD.value)
|
||||||
|
|
||||||
|
bool rtl_hal_pwrseqcmdparsing(struct rtl_priv *rtlpriv, u8 cut_version,
|
||||||
|
u8 fab_version, u8 interface_type,
|
||||||
|
struct wlan_pwr_cfg pwrcfgcmd[]);
|
||||||
|
|
||||||
bool rtl_ps_set_rf_state(struct ieee80211_hw *hw,
|
bool rtl_ps_set_rf_state(struct ieee80211_hw *hw,
|
||||||
enum rf_pwrstate state_toset, u32 changesource);
|
enum rf_pwrstate state_toset, u32 changesource);
|
||||||
bool rtl_ps_enable_nic(struct ieee80211_hw *hw);
|
bool rtl_ps_enable_nic(struct ieee80211_hw *hw);
|
||||||
|
|
|
@ -5,7 +5,6 @@ rtl8188ee-objs := \
|
||||||
led.o \
|
led.o \
|
||||||
phy.o \
|
phy.o \
|
||||||
pwrseq.o \
|
pwrseq.o \
|
||||||
pwrseqcmd.o \
|
|
||||||
rf.o \
|
rf.o \
|
||||||
sw.o \
|
sw.o \
|
||||||
table.o \
|
table.o \
|
||||||
|
|
|
@ -41,7 +41,6 @@
|
||||||
#include "fw.h"
|
#include "fw.h"
|
||||||
#include "led.h"
|
#include "led.h"
|
||||||
#include "hw.h"
|
#include "hw.h"
|
||||||
#include "pwrseqcmd.h"
|
|
||||||
#include "pwrseq.h"
|
#include "pwrseq.h"
|
||||||
|
|
||||||
#define LLT_CONFIG 5
|
#define LLT_CONFIG 5
|
||||||
|
@ -815,11 +814,11 @@ static bool _rtl88ee_init_mac(struct ieee80211_hw *hw)
|
||||||
|
|
||||||
rtl_write_byte(rtlpriv, REG_RSV_CTRL, 0x00);
|
rtl_write_byte(rtlpriv, REG_RSV_CTRL, 0x00);
|
||||||
/* HW Power on sequence */
|
/* HW Power on sequence */
|
||||||
if (!rtl88_hal_pwrseqcmdparsing(rtlpriv, PWR_CUT_ALL_MSK,
|
if (!rtl_hal_pwrseqcmdparsing(rtlpriv, PWR_CUT_ALL_MSK,
|
||||||
PWR_FAB_ALL_MSK, PWR_INTF_PCI_MSK,
|
PWR_FAB_ALL_MSK, PWR_INTF_PCI_MSK,
|
||||||
Rtl8188E_NIC_ENABLE_FLOW)) {
|
Rtl8188E_NIC_ENABLE_FLOW)) {
|
||||||
RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD,
|
RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD,
|
||||||
"init MAC Fail as rtl88_hal_pwrseqcmdparsing\n");
|
"init MAC Fail as rtl_hal_pwrseqcmdparsing\n");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1346,9 +1345,9 @@ static void _rtl88ee_poweroff_adapter(struct ieee80211_hw *hw)
|
||||||
}
|
}
|
||||||
rtl_write_byte(rtlpriv, REG_PCIE_CTRL_REG+1, 0xFF);
|
rtl_write_byte(rtlpriv, REG_PCIE_CTRL_REG+1, 0xFF);
|
||||||
|
|
||||||
rtl88_hal_pwrseqcmdparsing(rtlpriv, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK,
|
rtl_hal_pwrseqcmdparsing(rtlpriv, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK,
|
||||||
PWR_INTF_PCI_MSK,
|
PWR_INTF_PCI_MSK,
|
||||||
Rtl8188E_NIC_LPS_ENTER_FLOW);
|
Rtl8188E_NIC_LPS_ENTER_FLOW);
|
||||||
|
|
||||||
rtl_write_byte(rtlpriv, REG_RF_CTRL, 0x00);
|
rtl_write_byte(rtlpriv, REG_RF_CTRL, 0x00);
|
||||||
|
|
||||||
|
@ -1362,8 +1361,8 @@ static void _rtl88ee_poweroff_adapter(struct ieee80211_hw *hw)
|
||||||
u1b_tmp = rtl_read_byte(rtlpriv, REG_32K_CTRL);
|
u1b_tmp = rtl_read_byte(rtlpriv, REG_32K_CTRL);
|
||||||
rtl_write_byte(rtlpriv, REG_32K_CTRL, (u1b_tmp & (~BIT(0))));
|
rtl_write_byte(rtlpriv, REG_32K_CTRL, (u1b_tmp & (~BIT(0))));
|
||||||
|
|
||||||
rtl88_hal_pwrseqcmdparsing(rtlpriv, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK,
|
rtl_hal_pwrseqcmdparsing(rtlpriv, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK,
|
||||||
PWR_INTF_PCI_MSK, Rtl8188E_NIC_DISABLE_FLOW);
|
PWR_INTF_PCI_MSK, Rtl8188E_NIC_DISABLE_FLOW);
|
||||||
|
|
||||||
u1b_tmp = rtl_read_byte(rtlpriv, REG_RSV_CTRL+1);
|
u1b_tmp = rtl_read_byte(rtlpriv, REG_RSV_CTRL+1);
|
||||||
rtl_write_byte(rtlpriv, REG_RSV_CTRL+1, (u1b_tmp & (~BIT(3))));
|
rtl_write_byte(rtlpriv, REG_RSV_CTRL+1, (u1b_tmp & (~BIT(3))));
|
||||||
|
|
|
@ -29,6 +29,7 @@
|
||||||
|
|
||||||
#include "../wifi.h"
|
#include "../wifi.h"
|
||||||
#include "../pci.h"
|
#include "../pci.h"
|
||||||
|
#include "../core.h"
|
||||||
#include "../ps.h"
|
#include "../ps.h"
|
||||||
#include "reg.h"
|
#include "reg.h"
|
||||||
#include "def.h"
|
#include "def.h"
|
||||||
|
@ -151,18 +152,7 @@ static bool config_bb_with_pgheader(struct ieee80211_hw *hw,
|
||||||
v2 = table_pg[i + 1];
|
v2 = table_pg[i + 1];
|
||||||
|
|
||||||
if (v1 < 0xcdcdcdcd) {
|
if (v1 < 0xcdcdcdcd) {
|
||||||
if (table_pg[i] == 0xfe)
|
rtl_addr_delay(table_pg[i]);
|
||||||
mdelay(50);
|
|
||||||
else if (table_pg[i] == 0xfd)
|
|
||||||
mdelay(5);
|
|
||||||
else if (table_pg[i] == 0xfc)
|
|
||||||
mdelay(1);
|
|
||||||
else if (table_pg[i] == 0xfb)
|
|
||||||
udelay(50);
|
|
||||||
else if (table_pg[i] == 0xfa)
|
|
||||||
udelay(5);
|
|
||||||
else if (table_pg[i] == 0xf9)
|
|
||||||
udelay(1);
|
|
||||||
|
|
||||||
store_pwrindex_offset(hw, table_pg[i],
|
store_pwrindex_offset(hw, table_pg[i],
|
||||||
table_pg[i + 1],
|
table_pg[i + 1],
|
||||||
|
@ -672,24 +662,9 @@ static void _rtl8188e_config_rf_reg(struct ieee80211_hw *hw,
|
||||||
u32 addr, u32 data, enum radio_path rfpath,
|
u32 addr, u32 data, enum radio_path rfpath,
|
||||||
u32 regaddr)
|
u32 regaddr)
|
||||||
{
|
{
|
||||||
if (addr == 0xffe) {
|
rtl_rfreg_delay(hw, rfpath, regaddr,
|
||||||
mdelay(50);
|
RFREG_OFFSET_MASK,
|
||||||
} else if (addr == 0xfd) {
|
data);
|
||||||
mdelay(5);
|
|
||||||
} else if (addr == 0xfc) {
|
|
||||||
mdelay(1);
|
|
||||||
} else if (addr == 0xfb) {
|
|
||||||
udelay(50);
|
|
||||||
} else if (addr == 0xfa) {
|
|
||||||
udelay(5);
|
|
||||||
} else if (addr == 0xf9) {
|
|
||||||
udelay(1);
|
|
||||||
} else {
|
|
||||||
rtl_set_rfreg(hw, rfpath, regaddr,
|
|
||||||
RFREG_OFFSET_MASK,
|
|
||||||
data);
|
|
||||||
udelay(1);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void rtl88_config_s(struct ieee80211_hw *hw,
|
static void rtl88_config_s(struct ieee80211_hw *hw,
|
||||||
|
@ -702,28 +677,6 @@ static void rtl88_config_s(struct ieee80211_hw *hw,
|
||||||
addr | maskforphyset);
|
addr | maskforphyset);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void _rtl8188e_config_bb_reg(struct ieee80211_hw *hw,
|
|
||||||
u32 addr, u32 data)
|
|
||||||
{
|
|
||||||
if (addr == 0xfe) {
|
|
||||||
mdelay(50);
|
|
||||||
} else if (addr == 0xfd) {
|
|
||||||
mdelay(5);
|
|
||||||
} else if (addr == 0xfc) {
|
|
||||||
mdelay(1);
|
|
||||||
} else if (addr == 0xfb) {
|
|
||||||
udelay(50);
|
|
||||||
} else if (addr == 0xfa) {
|
|
||||||
udelay(5);
|
|
||||||
} else if (addr == 0xf9) {
|
|
||||||
udelay(1);
|
|
||||||
} else {
|
|
||||||
rtl_set_bbreg(hw, addr, MASKDWORD, data);
|
|
||||||
udelay(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#define NEXT_PAIR(v1, v2, i) \
|
#define NEXT_PAIR(v1, v2, i) \
|
||||||
do { \
|
do { \
|
||||||
i += 2; v1 = array_table[i]; \
|
i += 2; v1 = array_table[i]; \
|
||||||
|
@ -795,7 +748,7 @@ static void set_baseband_phy_config(struct ieee80211_hw *hw)
|
||||||
v1 = array_table[i];
|
v1 = array_table[i];
|
||||||
v2 = array_table[i + 1];
|
v2 = array_table[i + 1];
|
||||||
if (v1 < 0xcdcdcdcd) {
|
if (v1 < 0xcdcdcdcd) {
|
||||||
_rtl8188e_config_bb_reg(hw, v1, v2);
|
rtl_bb_delay(hw, v1, v2);
|
||||||
} else {/*This line is the start line of branch.*/
|
} else {/*This line is the start line of branch.*/
|
||||||
if (!check_cond(hw, array_table[i])) {
|
if (!check_cond(hw, array_table[i])) {
|
||||||
/*Discard the following (offset, data) pairs*/
|
/*Discard the following (offset, data) pairs*/
|
||||||
|
@ -811,7 +764,7 @@ static void set_baseband_phy_config(struct ieee80211_hw *hw)
|
||||||
while (v2 != 0xDEAD &&
|
while (v2 != 0xDEAD &&
|
||||||
v2 != 0xCDEF &&
|
v2 != 0xCDEF &&
|
||||||
v2 != 0xCDCD && i < arraylen - 2) {
|
v2 != 0xCDCD && i < arraylen - 2) {
|
||||||
_rtl8188e_config_bb_reg(hw, v1, v2);
|
rtl_bb_delay(hw, v1, v2);
|
||||||
NEXT_PAIR(v1, v2, i);
|
NEXT_PAIR(v1, v2, i);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -30,7 +30,6 @@
|
||||||
#ifndef __RTL8723E_PWRSEQ_H__
|
#ifndef __RTL8723E_PWRSEQ_H__
|
||||||
#define __RTL8723E_PWRSEQ_H__
|
#define __RTL8723E_PWRSEQ_H__
|
||||||
|
|
||||||
#include "pwrseqcmd.h"
|
|
||||||
/*
|
/*
|
||||||
Check document WM-20110607-Paul-RTL8188E_Power_Architecture-R02.vsd
|
Check document WM-20110607-Paul-RTL8188E_Power_Architecture-R02.vsd
|
||||||
There are 6 HW Power States:
|
There are 6 HW Power States:
|
||||||
|
|
|
@ -2215,22 +2215,6 @@
|
||||||
#define BWORD1 0xc
|
#define BWORD1 0xc
|
||||||
#define BWORD 0xf
|
#define BWORD 0xf
|
||||||
|
|
||||||
#define MASKBYTE0 0xff
|
|
||||||
#define MASKBYTE1 0xff00
|
|
||||||
#define MASKBYTE2 0xff0000
|
|
||||||
#define MASKBYTE3 0xff000000
|
|
||||||
#define MASKHWORD 0xffff0000
|
|
||||||
#define MASKLWORD 0x0000ffff
|
|
||||||
#define MASKDWORD 0xffffffff
|
|
||||||
#define MASK12BITS 0xfff
|
|
||||||
#define MASKH4BITS 0xf0000000
|
|
||||||
#define MASKOFDM_D 0xffc00000
|
|
||||||
#define MASKCCK 0x3f3f3f3f
|
|
||||||
|
|
||||||
#define MASK4BITS 0x0f
|
|
||||||
#define MASK20BITS 0xfffff
|
|
||||||
#define RFREG_OFFSET_MASK 0xfffff
|
|
||||||
|
|
||||||
#define BENABLE 0x1
|
#define BENABLE 0x1
|
||||||
#define BDISABLE 0x0
|
#define BDISABLE 0x0
|
||||||
|
|
||||||
|
|
|
@ -30,6 +30,7 @@
|
||||||
#include "../wifi.h"
|
#include "../wifi.h"
|
||||||
#include "../pci.h"
|
#include "../pci.h"
|
||||||
#include "../ps.h"
|
#include "../ps.h"
|
||||||
|
#include "../core.h"
|
||||||
#include "reg.h"
|
#include "reg.h"
|
||||||
#include "def.h"
|
#include "def.h"
|
||||||
#include "hw.h"
|
#include "hw.h"
|
||||||
|
@ -198,18 +199,7 @@ bool _rtl92ce_phy_config_bb_with_headerfile(struct ieee80211_hw *hw,
|
||||||
}
|
}
|
||||||
if (configtype == BASEBAND_CONFIG_PHY_REG) {
|
if (configtype == BASEBAND_CONFIG_PHY_REG) {
|
||||||
for (i = 0; i < phy_reg_arraylen; i = i + 2) {
|
for (i = 0; i < phy_reg_arraylen; i = i + 2) {
|
||||||
if (phy_regarray_table[i] == 0xfe)
|
rtl_addr_delay(phy_regarray_table[i]);
|
||||||
mdelay(50);
|
|
||||||
else if (phy_regarray_table[i] == 0xfd)
|
|
||||||
mdelay(5);
|
|
||||||
else if (phy_regarray_table[i] == 0xfc)
|
|
||||||
mdelay(1);
|
|
||||||
else if (phy_regarray_table[i] == 0xfb)
|
|
||||||
udelay(50);
|
|
||||||
else if (phy_regarray_table[i] == 0xfa)
|
|
||||||
udelay(5);
|
|
||||||
else if (phy_regarray_table[i] == 0xf9)
|
|
||||||
udelay(1);
|
|
||||||
rtl_set_bbreg(hw, phy_regarray_table[i], MASKDWORD,
|
rtl_set_bbreg(hw, phy_regarray_table[i], MASKDWORD,
|
||||||
phy_regarray_table[i + 1]);
|
phy_regarray_table[i + 1]);
|
||||||
udelay(1);
|
udelay(1);
|
||||||
|
@ -245,18 +235,7 @@ bool _rtl92ce_phy_config_bb_with_pgheaderfile(struct ieee80211_hw *hw,
|
||||||
|
|
||||||
if (configtype == BASEBAND_CONFIG_PHY_REG) {
|
if (configtype == BASEBAND_CONFIG_PHY_REG) {
|
||||||
for (i = 0; i < phy_regarray_pg_len; i = i + 3) {
|
for (i = 0; i < phy_regarray_pg_len; i = i + 3) {
|
||||||
if (phy_regarray_table_pg[i] == 0xfe)
|
rtl_addr_delay(phy_regarray_table_pg[i]);
|
||||||
mdelay(50);
|
|
||||||
else if (phy_regarray_table_pg[i] == 0xfd)
|
|
||||||
mdelay(5);
|
|
||||||
else if (phy_regarray_table_pg[i] == 0xfc)
|
|
||||||
mdelay(1);
|
|
||||||
else if (phy_regarray_table_pg[i] == 0xfb)
|
|
||||||
udelay(50);
|
|
||||||
else if (phy_regarray_table_pg[i] == 0xfa)
|
|
||||||
udelay(5);
|
|
||||||
else if (phy_regarray_table_pg[i] == 0xf9)
|
|
||||||
udelay(1);
|
|
||||||
|
|
||||||
_rtl92c_store_pwrIndex_diffrate_offset(hw,
|
_rtl92c_store_pwrIndex_diffrate_offset(hw,
|
||||||
phy_regarray_table_pg[i],
|
phy_regarray_table_pg[i],
|
||||||
|
@ -305,46 +284,16 @@ bool rtl92c_phy_config_rf_with_headerfile(struct ieee80211_hw *hw,
|
||||||
switch (rfpath) {
|
switch (rfpath) {
|
||||||
case RF90_PATH_A:
|
case RF90_PATH_A:
|
||||||
for (i = 0; i < radioa_arraylen; i = i + 2) {
|
for (i = 0; i < radioa_arraylen; i = i + 2) {
|
||||||
if (radioa_array_table[i] == 0xfe)
|
rtl_rfreg_delay(hw, rfpath, radioa_array_table[i],
|
||||||
mdelay(50);
|
RFREG_OFFSET_MASK,
|
||||||
else if (radioa_array_table[i] == 0xfd)
|
radioa_array_table[i + 1]);
|
||||||
mdelay(5);
|
|
||||||
else if (radioa_array_table[i] == 0xfc)
|
|
||||||
mdelay(1);
|
|
||||||
else if (radioa_array_table[i] == 0xfb)
|
|
||||||
udelay(50);
|
|
||||||
else if (radioa_array_table[i] == 0xfa)
|
|
||||||
udelay(5);
|
|
||||||
else if (radioa_array_table[i] == 0xf9)
|
|
||||||
udelay(1);
|
|
||||||
else {
|
|
||||||
rtl_set_rfreg(hw, rfpath, radioa_array_table[i],
|
|
||||||
RFREG_OFFSET_MASK,
|
|
||||||
radioa_array_table[i + 1]);
|
|
||||||
udelay(1);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case RF90_PATH_B:
|
case RF90_PATH_B:
|
||||||
for (i = 0; i < radiob_arraylen; i = i + 2) {
|
for (i = 0; i < radiob_arraylen; i = i + 2) {
|
||||||
if (radiob_array_table[i] == 0xfe) {
|
rtl_rfreg_delay(hw, rfpath, radiob_array_table[i],
|
||||||
mdelay(50);
|
RFREG_OFFSET_MASK,
|
||||||
} else if (radiob_array_table[i] == 0xfd)
|
radiob_array_table[i + 1]);
|
||||||
mdelay(5);
|
|
||||||
else if (radiob_array_table[i] == 0xfc)
|
|
||||||
mdelay(1);
|
|
||||||
else if (radiob_array_table[i] == 0xfb)
|
|
||||||
udelay(50);
|
|
||||||
else if (radiob_array_table[i] == 0xfa)
|
|
||||||
udelay(5);
|
|
||||||
else if (radiob_array_table[i] == 0xf9)
|
|
||||||
udelay(1);
|
|
||||||
else {
|
|
||||||
rtl_set_rfreg(hw, rfpath, radiob_array_table[i],
|
|
||||||
RFREG_OFFSET_MASK,
|
|
||||||
radiob_array_table[i + 1]);
|
|
||||||
udelay(1);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case RF90_PATH_C:
|
case RF90_PATH_C:
|
||||||
|
@ -355,6 +304,8 @@ bool rtl92c_phy_config_rf_with_headerfile(struct ieee80211_hw *hw,
|
||||||
RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG,
|
RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG,
|
||||||
"switch case not processed\n");
|
"switch case not processed\n");
|
||||||
break;
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -2044,22 +2044,6 @@
|
||||||
#define BWORD1 0xc
|
#define BWORD1 0xc
|
||||||
#define BWORD 0xf
|
#define BWORD 0xf
|
||||||
|
|
||||||
#define MASKBYTE0 0xff
|
|
||||||
#define MASKBYTE1 0xff00
|
|
||||||
#define MASKBYTE2 0xff0000
|
|
||||||
#define MASKBYTE3 0xff000000
|
|
||||||
#define MASKHWORD 0xffff0000
|
|
||||||
#define MASKLWORD 0x0000ffff
|
|
||||||
#define MASKDWORD 0xffffffff
|
|
||||||
#define MASK12BITS 0xfff
|
|
||||||
#define MASKH4BITS 0xf0000000
|
|
||||||
#define MASKOFDM_D 0xffc00000
|
|
||||||
#define MASKCCK 0x3f3f3f3f
|
|
||||||
|
|
||||||
#define MASK4BITS 0x0f
|
|
||||||
#define MASK20BITS 0xfffff
|
|
||||||
#define RFREG_OFFSET_MASK 0xfffff
|
|
||||||
|
|
||||||
#define BENABLE 0x1
|
#define BENABLE 0x1
|
||||||
#define BDISABLE 0x0
|
#define BDISABLE 0x0
|
||||||
|
|
||||||
|
|
|
@ -30,6 +30,7 @@
|
||||||
#include "../wifi.h"
|
#include "../wifi.h"
|
||||||
#include "../pci.h"
|
#include "../pci.h"
|
||||||
#include "../ps.h"
|
#include "../ps.h"
|
||||||
|
#include "../core.h"
|
||||||
#include "reg.h"
|
#include "reg.h"
|
||||||
#include "def.h"
|
#include "def.h"
|
||||||
#include "phy.h"
|
#include "phy.h"
|
||||||
|
@ -188,18 +189,7 @@ bool _rtl92cu_phy_config_bb_with_headerfile(struct ieee80211_hw *hw,
|
||||||
}
|
}
|
||||||
if (configtype == BASEBAND_CONFIG_PHY_REG) {
|
if (configtype == BASEBAND_CONFIG_PHY_REG) {
|
||||||
for (i = 0; i < phy_reg_arraylen; i = i + 2) {
|
for (i = 0; i < phy_reg_arraylen; i = i + 2) {
|
||||||
if (phy_regarray_table[i] == 0xfe)
|
rtl_addr_delay(phy_regarray_table[i]);
|
||||||
mdelay(50);
|
|
||||||
else if (phy_regarray_table[i] == 0xfd)
|
|
||||||
mdelay(5);
|
|
||||||
else if (phy_regarray_table[i] == 0xfc)
|
|
||||||
mdelay(1);
|
|
||||||
else if (phy_regarray_table[i] == 0xfb)
|
|
||||||
udelay(50);
|
|
||||||
else if (phy_regarray_table[i] == 0xfa)
|
|
||||||
udelay(5);
|
|
||||||
else if (phy_regarray_table[i] == 0xf9)
|
|
||||||
udelay(1);
|
|
||||||
rtl_set_bbreg(hw, phy_regarray_table[i], MASKDWORD,
|
rtl_set_bbreg(hw, phy_regarray_table[i], MASKDWORD,
|
||||||
phy_regarray_table[i + 1]);
|
phy_regarray_table[i + 1]);
|
||||||
udelay(1);
|
udelay(1);
|
||||||
|
@ -236,18 +226,7 @@ bool _rtl92cu_phy_config_bb_with_pgheaderfile(struct ieee80211_hw *hw,
|
||||||
phy_regarray_table_pg = rtlphy->hwparam_tables[PHY_REG_PG].pdata;
|
phy_regarray_table_pg = rtlphy->hwparam_tables[PHY_REG_PG].pdata;
|
||||||
if (configtype == BASEBAND_CONFIG_PHY_REG) {
|
if (configtype == BASEBAND_CONFIG_PHY_REG) {
|
||||||
for (i = 0; i < phy_regarray_pg_len; i = i + 3) {
|
for (i = 0; i < phy_regarray_pg_len; i = i + 3) {
|
||||||
if (phy_regarray_table_pg[i] == 0xfe)
|
rtl_addr_delay(phy_regarray_table_pg[i]);
|
||||||
mdelay(50);
|
|
||||||
else if (phy_regarray_table_pg[i] == 0xfd)
|
|
||||||
mdelay(5);
|
|
||||||
else if (phy_regarray_table_pg[i] == 0xfc)
|
|
||||||
mdelay(1);
|
|
||||||
else if (phy_regarray_table_pg[i] == 0xfb)
|
|
||||||
udelay(50);
|
|
||||||
else if (phy_regarray_table_pg[i] == 0xfa)
|
|
||||||
udelay(5);
|
|
||||||
else if (phy_regarray_table_pg[i] == 0xf9)
|
|
||||||
udelay(1);
|
|
||||||
_rtl92c_store_pwrIndex_diffrate_offset(hw,
|
_rtl92c_store_pwrIndex_diffrate_offset(hw,
|
||||||
phy_regarray_table_pg[i],
|
phy_regarray_table_pg[i],
|
||||||
phy_regarray_table_pg[i + 1],
|
phy_regarray_table_pg[i + 1],
|
||||||
|
@ -294,46 +273,16 @@ bool rtl92cu_phy_config_rf_with_headerfile(struct ieee80211_hw *hw,
|
||||||
switch (rfpath) {
|
switch (rfpath) {
|
||||||
case RF90_PATH_A:
|
case RF90_PATH_A:
|
||||||
for (i = 0; i < radioa_arraylen; i = i + 2) {
|
for (i = 0; i < radioa_arraylen; i = i + 2) {
|
||||||
if (radioa_array_table[i] == 0xfe)
|
rtl_rfreg_delay(hw, rfpath, radioa_array_table[i],
|
||||||
mdelay(50);
|
RFREG_OFFSET_MASK,
|
||||||
else if (radioa_array_table[i] == 0xfd)
|
radioa_array_table[i + 1]);
|
||||||
mdelay(5);
|
|
||||||
else if (radioa_array_table[i] == 0xfc)
|
|
||||||
mdelay(1);
|
|
||||||
else if (radioa_array_table[i] == 0xfb)
|
|
||||||
udelay(50);
|
|
||||||
else if (radioa_array_table[i] == 0xfa)
|
|
||||||
udelay(5);
|
|
||||||
else if (radioa_array_table[i] == 0xf9)
|
|
||||||
udelay(1);
|
|
||||||
else {
|
|
||||||
rtl_set_rfreg(hw, rfpath, radioa_array_table[i],
|
|
||||||
RFREG_OFFSET_MASK,
|
|
||||||
radioa_array_table[i + 1]);
|
|
||||||
udelay(1);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case RF90_PATH_B:
|
case RF90_PATH_B:
|
||||||
for (i = 0; i < radiob_arraylen; i = i + 2) {
|
for (i = 0; i < radiob_arraylen; i = i + 2) {
|
||||||
if (radiob_array_table[i] == 0xfe) {
|
rtl_rfreg_delay(hw, rfpath, radiob_array_table[i],
|
||||||
mdelay(50);
|
RFREG_OFFSET_MASK,
|
||||||
} else if (radiob_array_table[i] == 0xfd)
|
radiob_array_table[i + 1]);
|
||||||
mdelay(5);
|
|
||||||
else if (radiob_array_table[i] == 0xfc)
|
|
||||||
mdelay(1);
|
|
||||||
else if (radiob_array_table[i] == 0xfb)
|
|
||||||
udelay(50);
|
|
||||||
else if (radiob_array_table[i] == 0xfa)
|
|
||||||
udelay(5);
|
|
||||||
else if (radiob_array_table[i] == 0xf9)
|
|
||||||
udelay(1);
|
|
||||||
else {
|
|
||||||
rtl_set_rfreg(hw, rfpath, radiob_array_table[i],
|
|
||||||
RFREG_OFFSET_MASK,
|
|
||||||
radiob_array_table[i + 1]);
|
|
||||||
udelay(1);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case RF90_PATH_C:
|
case RF90_PATH_C:
|
||||||
|
@ -344,6 +293,8 @@ bool rtl92cu_phy_config_rf_with_headerfile(struct ieee80211_hw *hw,
|
||||||
RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG,
|
RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG,
|
||||||
"switch case not processed\n");
|
"switch case not processed\n");
|
||||||
break;
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -194,15 +194,15 @@ static void rtl92d_dm_false_alarm_counter_statistics(struct ieee80211_hw *hw)
|
||||||
rtl_set_bbreg(hw, ROFDM0_LSTF, BIT(31), 1); /* hold page C counter */
|
rtl_set_bbreg(hw, ROFDM0_LSTF, BIT(31), 1); /* hold page C counter */
|
||||||
rtl_set_bbreg(hw, ROFDM1_LSTF, BIT(31), 1); /*hold page D counter */
|
rtl_set_bbreg(hw, ROFDM1_LSTF, BIT(31), 1); /*hold page D counter */
|
||||||
|
|
||||||
ret_value = rtl_get_bbreg(hw, ROFDM0_FRAMESYNC, BMASKDWORD);
|
ret_value = rtl_get_bbreg(hw, ROFDM0_FRAMESYNC, MASKDWORD);
|
||||||
falsealm_cnt->cnt_fast_fsync_fail = (ret_value & 0xffff);
|
falsealm_cnt->cnt_fast_fsync_fail = (ret_value & 0xffff);
|
||||||
falsealm_cnt->cnt_sb_search_fail = ((ret_value & 0xffff0000) >> 16);
|
falsealm_cnt->cnt_sb_search_fail = ((ret_value & 0xffff0000) >> 16);
|
||||||
ret_value = rtl_get_bbreg(hw, ROFDM_PHYCOUNTER1, BMASKDWORD);
|
ret_value = rtl_get_bbreg(hw, ROFDM_PHYCOUNTER1, MASKDWORD);
|
||||||
falsealm_cnt->cnt_parity_fail = ((ret_value & 0xffff0000) >> 16);
|
falsealm_cnt->cnt_parity_fail = ((ret_value & 0xffff0000) >> 16);
|
||||||
ret_value = rtl_get_bbreg(hw, ROFDM_PHYCOUNTER2, BMASKDWORD);
|
ret_value = rtl_get_bbreg(hw, ROFDM_PHYCOUNTER2, MASKDWORD);
|
||||||
falsealm_cnt->cnt_rate_illegal = (ret_value & 0xffff);
|
falsealm_cnt->cnt_rate_illegal = (ret_value & 0xffff);
|
||||||
falsealm_cnt->cnt_crc8_fail = ((ret_value & 0xffff0000) >> 16);
|
falsealm_cnt->cnt_crc8_fail = ((ret_value & 0xffff0000) >> 16);
|
||||||
ret_value = rtl_get_bbreg(hw, ROFDM_PHYCOUNTER3, BMASKDWORD);
|
ret_value = rtl_get_bbreg(hw, ROFDM_PHYCOUNTER3, MASKDWORD);
|
||||||
falsealm_cnt->cnt_mcs_fail = (ret_value & 0xffff);
|
falsealm_cnt->cnt_mcs_fail = (ret_value & 0xffff);
|
||||||
falsealm_cnt->cnt_ofdm_fail = falsealm_cnt->cnt_parity_fail +
|
falsealm_cnt->cnt_ofdm_fail = falsealm_cnt->cnt_parity_fail +
|
||||||
falsealm_cnt->cnt_rate_illegal +
|
falsealm_cnt->cnt_rate_illegal +
|
||||||
|
@ -214,9 +214,9 @@ static void rtl92d_dm_false_alarm_counter_statistics(struct ieee80211_hw *hw)
|
||||||
if (rtlpriv->rtlhal.current_bandtype != BAND_ON_5G) {
|
if (rtlpriv->rtlhal.current_bandtype != BAND_ON_5G) {
|
||||||
/* hold cck counter */
|
/* hold cck counter */
|
||||||
rtl92d_acquire_cckandrw_pagea_ctl(hw, &flag);
|
rtl92d_acquire_cckandrw_pagea_ctl(hw, &flag);
|
||||||
ret_value = rtl_get_bbreg(hw, RCCK0_FACOUNTERLOWER, BMASKBYTE0);
|
ret_value = rtl_get_bbreg(hw, RCCK0_FACOUNTERLOWER, MASKBYTE0);
|
||||||
falsealm_cnt->cnt_cck_fail = ret_value;
|
falsealm_cnt->cnt_cck_fail = ret_value;
|
||||||
ret_value = rtl_get_bbreg(hw, RCCK0_FACOUNTERUPPER, BMASKBYTE3);
|
ret_value = rtl_get_bbreg(hw, RCCK0_FACOUNTERUPPER, MASKBYTE3);
|
||||||
falsealm_cnt->cnt_cck_fail += (ret_value & 0xff) << 8;
|
falsealm_cnt->cnt_cck_fail += (ret_value & 0xff) << 8;
|
||||||
rtl92d_release_cckandrw_pagea_ctl(hw, &flag);
|
rtl92d_release_cckandrw_pagea_ctl(hw, &flag);
|
||||||
} else {
|
} else {
|
||||||
|
@ -331,11 +331,11 @@ static void rtl92d_dm_cck_packet_detection_thresh(struct ieee80211_hw *hw)
|
||||||
if (de_digtable->pre_cck_pd_state != de_digtable->cur_cck_pd_state) {
|
if (de_digtable->pre_cck_pd_state != de_digtable->cur_cck_pd_state) {
|
||||||
if (de_digtable->cur_cck_pd_state == CCK_PD_STAGE_LOWRSSI) {
|
if (de_digtable->cur_cck_pd_state == CCK_PD_STAGE_LOWRSSI) {
|
||||||
rtl92d_acquire_cckandrw_pagea_ctl(hw, &flag);
|
rtl92d_acquire_cckandrw_pagea_ctl(hw, &flag);
|
||||||
rtl_set_bbreg(hw, RCCK0_CCA, BMASKBYTE2, 0x83);
|
rtl_set_bbreg(hw, RCCK0_CCA, MASKBYTE2, 0x83);
|
||||||
rtl92d_release_cckandrw_pagea_ctl(hw, &flag);
|
rtl92d_release_cckandrw_pagea_ctl(hw, &flag);
|
||||||
} else {
|
} else {
|
||||||
rtl92d_acquire_cckandrw_pagea_ctl(hw, &flag);
|
rtl92d_acquire_cckandrw_pagea_ctl(hw, &flag);
|
||||||
rtl_set_bbreg(hw, RCCK0_CCA, BMASKBYTE2, 0xcd);
|
rtl_set_bbreg(hw, RCCK0_CCA, MASKBYTE2, 0xcd);
|
||||||
rtl92d_release_cckandrw_pagea_ctl(hw, &flag);
|
rtl92d_release_cckandrw_pagea_ctl(hw, &flag);
|
||||||
}
|
}
|
||||||
de_digtable->pre_cck_pd_state = de_digtable->cur_cck_pd_state;
|
de_digtable->pre_cck_pd_state = de_digtable->cur_cck_pd_state;
|
||||||
|
@ -722,7 +722,7 @@ static void rtl92d_dm_rxgain_tracking_thermalmeter(struct ieee80211_hw *hw)
|
||||||
RT_TRACE(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD,
|
RT_TRACE(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD,
|
||||||
"===> Rx Gain %x\n", u4tmp);
|
"===> Rx Gain %x\n", u4tmp);
|
||||||
for (i = RF90_PATH_A; i < rtlpriv->phy.num_total_rfpath; i++)
|
for (i = RF90_PATH_A; i < rtlpriv->phy.num_total_rfpath; i++)
|
||||||
rtl_set_rfreg(hw, i, 0x3C, BRFREGOFFSETMASK,
|
rtl_set_rfreg(hw, i, 0x3C, RFREG_OFFSET_MASK,
|
||||||
(rtlpriv->phy.reg_rf3c[i] & (~(0xF000))) | u4tmp);
|
(rtlpriv->phy.reg_rf3c[i] & (~(0xF000))) | u4tmp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -737,7 +737,7 @@ static void rtl92d_bandtype_2_4G(struct ieee80211_hw *hw, long *temp_cckg,
|
||||||
/* Query CCK default setting From 0xa24 */
|
/* Query CCK default setting From 0xa24 */
|
||||||
rtl92d_acquire_cckandrw_pagea_ctl(hw, &flag);
|
rtl92d_acquire_cckandrw_pagea_ctl(hw, &flag);
|
||||||
temp_cck = rtl_get_bbreg(hw, RCCK0_TXFILTER2,
|
temp_cck = rtl_get_bbreg(hw, RCCK0_TXFILTER2,
|
||||||
BMASKDWORD) & BMASKCCK;
|
MASKDWORD) & MASKCCK;
|
||||||
rtl92d_release_cckandrw_pagea_ctl(hw, &flag);
|
rtl92d_release_cckandrw_pagea_ctl(hw, &flag);
|
||||||
for (i = 0; i < CCK_TABLE_LENGTH; i++) {
|
for (i = 0; i < CCK_TABLE_LENGTH; i++) {
|
||||||
if (rtlpriv->dm.cck_inch14) {
|
if (rtlpriv->dm.cck_inch14) {
|
||||||
|
@ -896,9 +896,9 @@ static void rtl92d_dm_txpower_tracking_callback_thermalmeter(
|
||||||
rf = 1;
|
rf = 1;
|
||||||
if (thermalvalue) {
|
if (thermalvalue) {
|
||||||
ele_d = rtl_get_bbreg(hw, ROFDM0_XATxIQIMBALANCE,
|
ele_d = rtl_get_bbreg(hw, ROFDM0_XATxIQIMBALANCE,
|
||||||
BMASKDWORD) & BMASKOFDM_D;
|
MASKDWORD) & MASKOFDM_D;
|
||||||
for (i = 0; i < OFDM_TABLE_SIZE_92D; i++) {
|
for (i = 0; i < OFDM_TABLE_SIZE_92D; i++) {
|
||||||
if (ele_d == (ofdmswing_table[i] & BMASKOFDM_D)) {
|
if (ele_d == (ofdmswing_table[i] & MASKOFDM_D)) {
|
||||||
ofdm_index_old[0] = (u8) i;
|
ofdm_index_old[0] = (u8) i;
|
||||||
|
|
||||||
RT_TRACE(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD,
|
RT_TRACE(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD,
|
||||||
|
@ -910,10 +910,10 @@ static void rtl92d_dm_txpower_tracking_callback_thermalmeter(
|
||||||
}
|
}
|
||||||
if (is2t) {
|
if (is2t) {
|
||||||
ele_d = rtl_get_bbreg(hw, ROFDM0_XBTxIQIMBALANCE,
|
ele_d = rtl_get_bbreg(hw, ROFDM0_XBTxIQIMBALANCE,
|
||||||
BMASKDWORD) & BMASKOFDM_D;
|
MASKDWORD) & MASKOFDM_D;
|
||||||
for (i = 0; i < OFDM_TABLE_SIZE_92D; i++) {
|
for (i = 0; i < OFDM_TABLE_SIZE_92D; i++) {
|
||||||
if (ele_d ==
|
if (ele_d ==
|
||||||
(ofdmswing_table[i] & BMASKOFDM_D)) {
|
(ofdmswing_table[i] & MASKOFDM_D)) {
|
||||||
ofdm_index_old[1] = (u8) i;
|
ofdm_index_old[1] = (u8) i;
|
||||||
RT_TRACE(rtlpriv, COMP_POWER_TRACKING,
|
RT_TRACE(rtlpriv, COMP_POWER_TRACKING,
|
||||||
DBG_LOUD,
|
DBG_LOUD,
|
||||||
|
@ -1091,10 +1091,10 @@ static void rtl92d_dm_txpower_tracking_callback_thermalmeter(
|
||||||
value32 = (ele_d << 22) | ((ele_c & 0x3F) <<
|
value32 = (ele_d << 22) | ((ele_c & 0x3F) <<
|
||||||
16) | ele_a;
|
16) | ele_a;
|
||||||
rtl_set_bbreg(hw, ROFDM0_XATxIQIMBALANCE,
|
rtl_set_bbreg(hw, ROFDM0_XATxIQIMBALANCE,
|
||||||
BMASKDWORD, value32);
|
MASKDWORD, value32);
|
||||||
|
|
||||||
value32 = (ele_c & 0x000003C0) >> 6;
|
value32 = (ele_c & 0x000003C0) >> 6;
|
||||||
rtl_set_bbreg(hw, ROFDM0_XCTxAFE, BMASKH4BITS,
|
rtl_set_bbreg(hw, ROFDM0_XCTxAFE, MASKH4BITS,
|
||||||
value32);
|
value32);
|
||||||
|
|
||||||
value32 = ((val_x * ele_d) >> 7) & 0x01;
|
value32 = ((val_x * ele_d) >> 7) & 0x01;
|
||||||
|
@ -1103,10 +1103,10 @@ static void rtl92d_dm_txpower_tracking_callback_thermalmeter(
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
rtl_set_bbreg(hw, ROFDM0_XATxIQIMBALANCE,
|
rtl_set_bbreg(hw, ROFDM0_XATxIQIMBALANCE,
|
||||||
BMASKDWORD,
|
MASKDWORD,
|
||||||
ofdmswing_table
|
ofdmswing_table
|
||||||
[(u8)ofdm_index[0]]);
|
[(u8)ofdm_index[0]]);
|
||||||
rtl_set_bbreg(hw, ROFDM0_XCTxAFE, BMASKH4BITS,
|
rtl_set_bbreg(hw, ROFDM0_XCTxAFE, MASKH4BITS,
|
||||||
0x00);
|
0x00);
|
||||||
rtl_set_bbreg(hw, ROFDM0_ECCATHRESHOLD,
|
rtl_set_bbreg(hw, ROFDM0_ECCATHRESHOLD,
|
||||||
BIT(24), 0x00);
|
BIT(24), 0x00);
|
||||||
|
@ -1204,21 +1204,21 @@ static void rtl92d_dm_txpower_tracking_callback_thermalmeter(
|
||||||
ele_a;
|
ele_a;
|
||||||
rtl_set_bbreg(hw,
|
rtl_set_bbreg(hw,
|
||||||
ROFDM0_XBTxIQIMBALANCE,
|
ROFDM0_XBTxIQIMBALANCE,
|
||||||
BMASKDWORD, value32);
|
MASKDWORD, value32);
|
||||||
value32 = (ele_c & 0x000003C0) >> 6;
|
value32 = (ele_c & 0x000003C0) >> 6;
|
||||||
rtl_set_bbreg(hw, ROFDM0_XDTxAFE,
|
rtl_set_bbreg(hw, ROFDM0_XDTxAFE,
|
||||||
BMASKH4BITS, value32);
|
MASKH4BITS, value32);
|
||||||
value32 = ((val_x * ele_d) >> 7) & 0x01;
|
value32 = ((val_x * ele_d) >> 7) & 0x01;
|
||||||
rtl_set_bbreg(hw, ROFDM0_ECCATHRESHOLD,
|
rtl_set_bbreg(hw, ROFDM0_ECCATHRESHOLD,
|
||||||
BIT(28), value32);
|
BIT(28), value32);
|
||||||
} else {
|
} else {
|
||||||
rtl_set_bbreg(hw,
|
rtl_set_bbreg(hw,
|
||||||
ROFDM0_XBTxIQIMBALANCE,
|
ROFDM0_XBTxIQIMBALANCE,
|
||||||
BMASKDWORD,
|
MASKDWORD,
|
||||||
ofdmswing_table
|
ofdmswing_table
|
||||||
[(u8) ofdm_index[1]]);
|
[(u8) ofdm_index[1]]);
|
||||||
rtl_set_bbreg(hw, ROFDM0_XDTxAFE,
|
rtl_set_bbreg(hw, ROFDM0_XDTxAFE,
|
||||||
BMASKH4BITS, 0x00);
|
MASKH4BITS, 0x00);
|
||||||
rtl_set_bbreg(hw, ROFDM0_ECCATHRESHOLD,
|
rtl_set_bbreg(hw, ROFDM0_ECCATHRESHOLD,
|
||||||
BIT(28), 0x00);
|
BIT(28), 0x00);
|
||||||
}
|
}
|
||||||
|
@ -1229,10 +1229,10 @@ static void rtl92d_dm_txpower_tracking_callback_thermalmeter(
|
||||||
}
|
}
|
||||||
RT_TRACE(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD,
|
RT_TRACE(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD,
|
||||||
"TxPwrTracking 0xc80 = 0x%x, 0xc94 = 0x%x RF 0x24 = 0x%x\n",
|
"TxPwrTracking 0xc80 = 0x%x, 0xc94 = 0x%x RF 0x24 = 0x%x\n",
|
||||||
rtl_get_bbreg(hw, 0xc80, BMASKDWORD),
|
rtl_get_bbreg(hw, 0xc80, MASKDWORD),
|
||||||
rtl_get_bbreg(hw, 0xc94, BMASKDWORD),
|
rtl_get_bbreg(hw, 0xc94, MASKDWORD),
|
||||||
rtl_get_rfreg(hw, RF90_PATH_A, 0x24,
|
rtl_get_rfreg(hw, RF90_PATH_A, 0x24,
|
||||||
BRFREGOFFSETMASK));
|
RFREG_OFFSET_MASK));
|
||||||
}
|
}
|
||||||
if ((delta_iqk > rtlefuse->delta_iqk) &&
|
if ((delta_iqk > rtlefuse->delta_iqk) &&
|
||||||
(rtlefuse->delta_iqk != 0)) {
|
(rtlefuse->delta_iqk != 0)) {
|
||||||
|
|
|
@ -985,9 +985,9 @@ int rtl92de_hw_init(struct ieee80211_hw *hw)
|
||||||
/* set default value after initialize RF, */
|
/* set default value after initialize RF, */
|
||||||
rtl_set_bbreg(hw, RFPGA0_ANALOGPARAMETER4, 0x00f00000, 0);
|
rtl_set_bbreg(hw, RFPGA0_ANALOGPARAMETER4, 0x00f00000, 0);
|
||||||
rtlphy->rfreg_chnlval[0] = rtl_get_rfreg(hw, (enum radio_path)0,
|
rtlphy->rfreg_chnlval[0] = rtl_get_rfreg(hw, (enum radio_path)0,
|
||||||
RF_CHNLBW, BRFREGOFFSETMASK);
|
RF_CHNLBW, RFREG_OFFSET_MASK);
|
||||||
rtlphy->rfreg_chnlval[1] = rtl_get_rfreg(hw, (enum radio_path)1,
|
rtlphy->rfreg_chnlval[1] = rtl_get_rfreg(hw, (enum radio_path)1,
|
||||||
RF_CHNLBW, BRFREGOFFSETMASK);
|
RF_CHNLBW, RFREG_OFFSET_MASK);
|
||||||
|
|
||||||
/*---- Set CCK and OFDM Block "ON"----*/
|
/*---- Set CCK and OFDM Block "ON"----*/
|
||||||
if (rtlhal->current_bandtype == BAND_ON_2_4G)
|
if (rtlhal->current_bandtype == BAND_ON_2_4G)
|
||||||
|
@ -1035,7 +1035,7 @@ int rtl92de_hw_init(struct ieee80211_hw *hw)
|
||||||
|
|
||||||
tmp_rega = rtl_get_rfreg(hw,
|
tmp_rega = rtl_get_rfreg(hw,
|
||||||
(enum radio_path)RF90_PATH_A,
|
(enum radio_path)RF90_PATH_A,
|
||||||
0x2a, BMASKDWORD);
|
0x2a, MASKDWORD);
|
||||||
|
|
||||||
if (((tmp_rega & BIT(11)) == BIT(11)))
|
if (((tmp_rega & BIT(11)) == BIT(11)))
|
||||||
break;
|
break;
|
||||||
|
@ -1334,13 +1334,13 @@ void rtl92de_card_disable(struct ieee80211_hw *hw)
|
||||||
/* c. ========RF OFF sequence========== */
|
/* c. ========RF OFF sequence========== */
|
||||||
/* 0x88c[23:20] = 0xf. */
|
/* 0x88c[23:20] = 0xf. */
|
||||||
rtl_set_bbreg(hw, RFPGA0_ANALOGPARAMETER4, 0x00f00000, 0xf);
|
rtl_set_bbreg(hw, RFPGA0_ANALOGPARAMETER4, 0x00f00000, 0xf);
|
||||||
rtl_set_rfreg(hw, RF90_PATH_A, 0x00, BRFREGOFFSETMASK, 0x00);
|
rtl_set_rfreg(hw, RF90_PATH_A, 0x00, RFREG_OFFSET_MASK, 0x00);
|
||||||
|
|
||||||
/* APSD_CTRL 0x600[7:0] = 0x40 */
|
/* APSD_CTRL 0x600[7:0] = 0x40 */
|
||||||
rtl_write_byte(rtlpriv, REG_APSD_CTRL, 0x40);
|
rtl_write_byte(rtlpriv, REG_APSD_CTRL, 0x40);
|
||||||
|
|
||||||
/* Close antenna 0,0xc04,0xd04 */
|
/* Close antenna 0,0xc04,0xd04 */
|
||||||
rtl_set_bbreg(hw, ROFDM0_TRXPATHENABLE, BMASKBYTE0, 0);
|
rtl_set_bbreg(hw, ROFDM0_TRXPATHENABLE, MASKBYTE0, 0);
|
||||||
rtl_set_bbreg(hw, ROFDM1_TRXPATHENABLE, BDWORD, 0);
|
rtl_set_bbreg(hw, ROFDM1_TRXPATHENABLE, BDWORD, 0);
|
||||||
|
|
||||||
/* SYS_FUNC_EN 0x02[7:0] = 0xE2 reset BB state machine */
|
/* SYS_FUNC_EN 0x02[7:0] = 0xE2 reset BB state machine */
|
||||||
|
|
|
@ -30,6 +30,7 @@
|
||||||
#include "../wifi.h"
|
#include "../wifi.h"
|
||||||
#include "../pci.h"
|
#include "../pci.h"
|
||||||
#include "../ps.h"
|
#include "../ps.h"
|
||||||
|
#include "../core.h"
|
||||||
#include "reg.h"
|
#include "reg.h"
|
||||||
#include "def.h"
|
#include "def.h"
|
||||||
#include "phy.h"
|
#include "phy.h"
|
||||||
|
@ -242,7 +243,7 @@ void rtl92d_phy_set_bb_reg(struct ieee80211_hw *hw,
|
||||||
else if (rtlhal->during_mac0init_radiob)
|
else if (rtlhal->during_mac0init_radiob)
|
||||||
/* mac0 use phy1 write radio_b. */
|
/* mac0 use phy1 write radio_b. */
|
||||||
dbi_direct = BIT(3) | BIT(2);
|
dbi_direct = BIT(3) | BIT(2);
|
||||||
if (bitmask != BMASKDWORD) {
|
if (bitmask != MASKDWORD) {
|
||||||
if (rtlhal->during_mac1init_radioa ||
|
if (rtlhal->during_mac1init_radioa ||
|
||||||
rtlhal->during_mac0init_radiob)
|
rtlhal->during_mac0init_radiob)
|
||||||
originalvalue = rtl92de_read_dword_dbi(hw,
|
originalvalue = rtl92de_read_dword_dbi(hw,
|
||||||
|
@ -275,20 +276,20 @@ static u32 _rtl92d_phy_rf_serial_read(struct ieee80211_hw *hw,
|
||||||
u32 retvalue;
|
u32 retvalue;
|
||||||
|
|
||||||
newoffset = offset;
|
newoffset = offset;
|
||||||
tmplong = rtl_get_bbreg(hw, RFPGA0_XA_HSSIPARAMETER2, BMASKDWORD);
|
tmplong = rtl_get_bbreg(hw, RFPGA0_XA_HSSIPARAMETER2, MASKDWORD);
|
||||||
if (rfpath == RF90_PATH_A)
|
if (rfpath == RF90_PATH_A)
|
||||||
tmplong2 = tmplong;
|
tmplong2 = tmplong;
|
||||||
else
|
else
|
||||||
tmplong2 = rtl_get_bbreg(hw, pphyreg->rfhssi_para2, BMASKDWORD);
|
tmplong2 = rtl_get_bbreg(hw, pphyreg->rfhssi_para2, MASKDWORD);
|
||||||
tmplong2 = (tmplong2 & (~BLSSIREADADDRESS)) |
|
tmplong2 = (tmplong2 & (~BLSSIREADADDRESS)) |
|
||||||
(newoffset << 23) | BLSSIREADEDGE;
|
(newoffset << 23) | BLSSIREADEDGE;
|
||||||
rtl_set_bbreg(hw, RFPGA0_XA_HSSIPARAMETER2, BMASKDWORD,
|
rtl_set_bbreg(hw, RFPGA0_XA_HSSIPARAMETER2, MASKDWORD,
|
||||||
tmplong & (~BLSSIREADEDGE));
|
tmplong & (~BLSSIREADEDGE));
|
||||||
udelay(10);
|
udelay(10);
|
||||||
rtl_set_bbreg(hw, pphyreg->rfhssi_para2, BMASKDWORD, tmplong2);
|
rtl_set_bbreg(hw, pphyreg->rfhssi_para2, MASKDWORD, tmplong2);
|
||||||
udelay(50);
|
udelay(50);
|
||||||
udelay(50);
|
udelay(50);
|
||||||
rtl_set_bbreg(hw, RFPGA0_XA_HSSIPARAMETER2, BMASKDWORD,
|
rtl_set_bbreg(hw, RFPGA0_XA_HSSIPARAMETER2, MASKDWORD,
|
||||||
tmplong | BLSSIREADEDGE);
|
tmplong | BLSSIREADEDGE);
|
||||||
udelay(10);
|
udelay(10);
|
||||||
if (rfpath == RF90_PATH_A)
|
if (rfpath == RF90_PATH_A)
|
||||||
|
@ -321,7 +322,7 @@ static void _rtl92d_phy_rf_serial_write(struct ieee80211_hw *hw,
|
||||||
newoffset = offset;
|
newoffset = offset;
|
||||||
/* T65 RF */
|
/* T65 RF */
|
||||||
data_and_addr = ((newoffset << 20) | (data & 0x000fffff)) & 0x0fffffff;
|
data_and_addr = ((newoffset << 20) | (data & 0x000fffff)) & 0x0fffffff;
|
||||||
rtl_set_bbreg(hw, pphyreg->rf3wire_offset, BMASKDWORD, data_and_addr);
|
rtl_set_bbreg(hw, pphyreg->rf3wire_offset, MASKDWORD, data_and_addr);
|
||||||
RT_TRACE(rtlpriv, COMP_RF, DBG_TRACE, "RFW-%d Addr[0x%x]=0x%x\n",
|
RT_TRACE(rtlpriv, COMP_RF, DBG_TRACE, "RFW-%d Addr[0x%x]=0x%x\n",
|
||||||
rfpath, pphyreg->rf3wire_offset, data_and_addr);
|
rfpath, pphyreg->rf3wire_offset, data_and_addr);
|
||||||
}
|
}
|
||||||
|
@ -362,7 +363,7 @@ void rtl92d_phy_set_rf_reg(struct ieee80211_hw *hw, enum radio_path rfpath,
|
||||||
return;
|
return;
|
||||||
spin_lock_irqsave(&rtlpriv->locks.rf_lock, flags);
|
spin_lock_irqsave(&rtlpriv->locks.rf_lock, flags);
|
||||||
if (rtlphy->rf_mode != RF_OP_BY_FW) {
|
if (rtlphy->rf_mode != RF_OP_BY_FW) {
|
||||||
if (bitmask != BRFREGOFFSETMASK) {
|
if (bitmask != RFREG_OFFSET_MASK) {
|
||||||
original_value = _rtl92d_phy_rf_serial_read(hw,
|
original_value = _rtl92d_phy_rf_serial_read(hw,
|
||||||
rfpath, regaddr);
|
rfpath, regaddr);
|
||||||
bitshift = _rtl92d_phy_calculate_bit_shift(bitmask);
|
bitshift = _rtl92d_phy_calculate_bit_shift(bitmask);
|
||||||
|
@ -567,19 +568,8 @@ static bool _rtl92d_phy_config_bb_with_headerfile(struct ieee80211_hw *hw,
|
||||||
" ===> phy:Rtl819XPHY_REG_Array_PG\n");
|
" ===> phy:Rtl819XPHY_REG_Array_PG\n");
|
||||||
if (configtype == BASEBAND_CONFIG_PHY_REG) {
|
if (configtype == BASEBAND_CONFIG_PHY_REG) {
|
||||||
for (i = 0; i < phy_reg_arraylen; i = i + 2) {
|
for (i = 0; i < phy_reg_arraylen; i = i + 2) {
|
||||||
if (phy_regarray_table[i] == 0xfe)
|
rtl_addr_delay(phy_regarray_table[i]);
|
||||||
mdelay(50);
|
rtl_set_bbreg(hw, phy_regarray_table[i], MASKDWORD,
|
||||||
else if (phy_regarray_table[i] == 0xfd)
|
|
||||||
mdelay(5);
|
|
||||||
else if (phy_regarray_table[i] == 0xfc)
|
|
||||||
mdelay(1);
|
|
||||||
else if (phy_regarray_table[i] == 0xfb)
|
|
||||||
udelay(50);
|
|
||||||
else if (phy_regarray_table[i] == 0xfa)
|
|
||||||
udelay(5);
|
|
||||||
else if (phy_regarray_table[i] == 0xf9)
|
|
||||||
udelay(1);
|
|
||||||
rtl_set_bbreg(hw, phy_regarray_table[i], BMASKDWORD,
|
|
||||||
phy_regarray_table[i + 1]);
|
phy_regarray_table[i + 1]);
|
||||||
udelay(1);
|
udelay(1);
|
||||||
RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE,
|
RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE,
|
||||||
|
@ -591,7 +581,7 @@ static bool _rtl92d_phy_config_bb_with_headerfile(struct ieee80211_hw *hw,
|
||||||
if (rtlhal->interfaceindex == 0) {
|
if (rtlhal->interfaceindex == 0) {
|
||||||
for (i = 0; i < agctab_arraylen; i = i + 2) {
|
for (i = 0; i < agctab_arraylen; i = i + 2) {
|
||||||
rtl_set_bbreg(hw, agctab_array_table[i],
|
rtl_set_bbreg(hw, agctab_array_table[i],
|
||||||
BMASKDWORD,
|
MASKDWORD,
|
||||||
agctab_array_table[i + 1]);
|
agctab_array_table[i + 1]);
|
||||||
/* Add 1us delay between BB/RF register
|
/* Add 1us delay between BB/RF register
|
||||||
* setting. */
|
* setting. */
|
||||||
|
@ -607,7 +597,7 @@ static bool _rtl92d_phy_config_bb_with_headerfile(struct ieee80211_hw *hw,
|
||||||
if (rtlhal->current_bandtype == BAND_ON_2_4G) {
|
if (rtlhal->current_bandtype == BAND_ON_2_4G) {
|
||||||
for (i = 0; i < agctab_arraylen; i = i + 2) {
|
for (i = 0; i < agctab_arraylen; i = i + 2) {
|
||||||
rtl_set_bbreg(hw, agctab_array_table[i],
|
rtl_set_bbreg(hw, agctab_array_table[i],
|
||||||
BMASKDWORD,
|
MASKDWORD,
|
||||||
agctab_array_table[i + 1]);
|
agctab_array_table[i + 1]);
|
||||||
/* Add 1us delay between BB/RF register
|
/* Add 1us delay between BB/RF register
|
||||||
* setting. */
|
* setting. */
|
||||||
|
@ -623,7 +613,7 @@ static bool _rtl92d_phy_config_bb_with_headerfile(struct ieee80211_hw *hw,
|
||||||
for (i = 0; i < agctab_5garraylen; i = i + 2) {
|
for (i = 0; i < agctab_5garraylen; i = i + 2) {
|
||||||
rtl_set_bbreg(hw,
|
rtl_set_bbreg(hw,
|
||||||
agctab_5garray_table[i],
|
agctab_5garray_table[i],
|
||||||
BMASKDWORD,
|
MASKDWORD,
|
||||||
agctab_5garray_table[i + 1]);
|
agctab_5garray_table[i + 1]);
|
||||||
/* Add 1us delay between BB/RF registeri
|
/* Add 1us delay between BB/RF registeri
|
||||||
* setting. */
|
* setting. */
|
||||||
|
@ -705,18 +695,7 @@ static bool _rtl92d_phy_config_bb_with_pgheaderfile(struct ieee80211_hw *hw,
|
||||||
phy_regarray_table_pg = rtl8192de_phy_reg_array_pg;
|
phy_regarray_table_pg = rtl8192de_phy_reg_array_pg;
|
||||||
if (configtype == BASEBAND_CONFIG_PHY_REG) {
|
if (configtype == BASEBAND_CONFIG_PHY_REG) {
|
||||||
for (i = 0; i < phy_regarray_pg_len; i = i + 3) {
|
for (i = 0; i < phy_regarray_pg_len; i = i + 3) {
|
||||||
if (phy_regarray_table_pg[i] == 0xfe)
|
rtl_addr_delay(phy_regarray_table_pg[i]);
|
||||||
mdelay(50);
|
|
||||||
else if (phy_regarray_table_pg[i] == 0xfd)
|
|
||||||
mdelay(5);
|
|
||||||
else if (phy_regarray_table_pg[i] == 0xfc)
|
|
||||||
mdelay(1);
|
|
||||||
else if (phy_regarray_table_pg[i] == 0xfb)
|
|
||||||
udelay(50);
|
|
||||||
else if (phy_regarray_table_pg[i] == 0xfa)
|
|
||||||
udelay(5);
|
|
||||||
else if (phy_regarray_table_pg[i] == 0xf9)
|
|
||||||
udelay(1);
|
|
||||||
_rtl92d_store_pwrindex_diffrate_offset(hw,
|
_rtl92d_store_pwrindex_diffrate_offset(hw,
|
||||||
phy_regarray_table_pg[i],
|
phy_regarray_table_pg[i],
|
||||||
phy_regarray_table_pg[i + 1],
|
phy_regarray_table_pg[i + 1],
|
||||||
|
@ -843,54 +822,16 @@ bool rtl92d_phy_config_rf_with_headerfile(struct ieee80211_hw *hw,
|
||||||
switch (rfpath) {
|
switch (rfpath) {
|
||||||
case RF90_PATH_A:
|
case RF90_PATH_A:
|
||||||
for (i = 0; i < radioa_arraylen; i = i + 2) {
|
for (i = 0; i < radioa_arraylen; i = i + 2) {
|
||||||
if (radioa_array_table[i] == 0xfe) {
|
rtl_rfreg_delay(hw, rfpath, radioa_array_table[i],
|
||||||
mdelay(50);
|
RFREG_OFFSET_MASK,
|
||||||
} else if (radioa_array_table[i] == 0xfd) {
|
radioa_array_table[i + 1]);
|
||||||
/* delay_ms(5); */
|
|
||||||
mdelay(5);
|
|
||||||
} else if (radioa_array_table[i] == 0xfc) {
|
|
||||||
/* delay_ms(1); */
|
|
||||||
mdelay(1);
|
|
||||||
} else if (radioa_array_table[i] == 0xfb) {
|
|
||||||
udelay(50);
|
|
||||||
} else if (radioa_array_table[i] == 0xfa) {
|
|
||||||
udelay(5);
|
|
||||||
} else if (radioa_array_table[i] == 0xf9) {
|
|
||||||
udelay(1);
|
|
||||||
} else {
|
|
||||||
rtl_set_rfreg(hw, rfpath, radioa_array_table[i],
|
|
||||||
BRFREGOFFSETMASK,
|
|
||||||
radioa_array_table[i + 1]);
|
|
||||||
/* Add 1us delay between BB/RF register set. */
|
|
||||||
udelay(1);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case RF90_PATH_B:
|
case RF90_PATH_B:
|
||||||
for (i = 0; i < radiob_arraylen; i = i + 2) {
|
for (i = 0; i < radiob_arraylen; i = i + 2) {
|
||||||
if (radiob_array_table[i] == 0xfe) {
|
rtl_rfreg_delay(hw, rfpath, radiob_array_table[i],
|
||||||
/* Delay specific ms. Only RF configuration
|
RFREG_OFFSET_MASK,
|
||||||
* requires delay. */
|
radiob_array_table[i + 1]);
|
||||||
mdelay(50);
|
|
||||||
} else if (radiob_array_table[i] == 0xfd) {
|
|
||||||
/* delay_ms(5); */
|
|
||||||
mdelay(5);
|
|
||||||
} else if (radiob_array_table[i] == 0xfc) {
|
|
||||||
/* delay_ms(1); */
|
|
||||||
mdelay(1);
|
|
||||||
} else if (radiob_array_table[i] == 0xfb) {
|
|
||||||
udelay(50);
|
|
||||||
} else if (radiob_array_table[i] == 0xfa) {
|
|
||||||
udelay(5);
|
|
||||||
} else if (radiob_array_table[i] == 0xf9) {
|
|
||||||
udelay(1);
|
|
||||||
} else {
|
|
||||||
rtl_set_rfreg(hw, rfpath, radiob_array_table[i],
|
|
||||||
BRFREGOFFSETMASK,
|
|
||||||
radiob_array_table[i + 1]);
|
|
||||||
/* Add 1us delay between BB/RF register set. */
|
|
||||||
udelay(1);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case RF90_PATH_C:
|
case RF90_PATH_C:
|
||||||
|
@ -911,13 +852,13 @@ void rtl92d_phy_get_hw_reg_originalvalue(struct ieee80211_hw *hw)
|
||||||
struct rtl_phy *rtlphy = &(rtlpriv->phy);
|
struct rtl_phy *rtlphy = &(rtlpriv->phy);
|
||||||
|
|
||||||
rtlphy->default_initialgain[0] =
|
rtlphy->default_initialgain[0] =
|
||||||
(u8) rtl_get_bbreg(hw, ROFDM0_XAAGCCORE1, BMASKBYTE0);
|
(u8) rtl_get_bbreg(hw, ROFDM0_XAAGCCORE1, MASKBYTE0);
|
||||||
rtlphy->default_initialgain[1] =
|
rtlphy->default_initialgain[1] =
|
||||||
(u8) rtl_get_bbreg(hw, ROFDM0_XBAGCCORE1, BMASKBYTE0);
|
(u8) rtl_get_bbreg(hw, ROFDM0_XBAGCCORE1, MASKBYTE0);
|
||||||
rtlphy->default_initialgain[2] =
|
rtlphy->default_initialgain[2] =
|
||||||
(u8) rtl_get_bbreg(hw, ROFDM0_XCAGCCORE1, BMASKBYTE0);
|
(u8) rtl_get_bbreg(hw, ROFDM0_XCAGCCORE1, MASKBYTE0);
|
||||||
rtlphy->default_initialgain[3] =
|
rtlphy->default_initialgain[3] =
|
||||||
(u8) rtl_get_bbreg(hw, ROFDM0_XDAGCCORE1, BMASKBYTE0);
|
(u8) rtl_get_bbreg(hw, ROFDM0_XDAGCCORE1, MASKBYTE0);
|
||||||
RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE,
|
RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE,
|
||||||
"Default initial gain (c50=0x%x, c58=0x%x, c60=0x%x, c68=0x%x\n",
|
"Default initial gain (c50=0x%x, c58=0x%x, c60=0x%x, c68=0x%x\n",
|
||||||
rtlphy->default_initialgain[0],
|
rtlphy->default_initialgain[0],
|
||||||
|
@ -925,9 +866,9 @@ void rtl92d_phy_get_hw_reg_originalvalue(struct ieee80211_hw *hw)
|
||||||
rtlphy->default_initialgain[2],
|
rtlphy->default_initialgain[2],
|
||||||
rtlphy->default_initialgain[3]);
|
rtlphy->default_initialgain[3]);
|
||||||
rtlphy->framesync = (u8)rtl_get_bbreg(hw, ROFDM0_RXDETECTOR3,
|
rtlphy->framesync = (u8)rtl_get_bbreg(hw, ROFDM0_RXDETECTOR3,
|
||||||
BMASKBYTE0);
|
MASKBYTE0);
|
||||||
rtlphy->framesync_c34 = rtl_get_bbreg(hw, ROFDM0_RXDETECTOR2,
|
rtlphy->framesync_c34 = rtl_get_bbreg(hw, ROFDM0_RXDETECTOR2,
|
||||||
BMASKDWORD);
|
MASKDWORD);
|
||||||
RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE,
|
RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE,
|
||||||
"Default framesync (0x%x) = 0x%x\n",
|
"Default framesync (0x%x) = 0x%x\n",
|
||||||
ROFDM0_RXDETECTOR3, rtlphy->framesync);
|
ROFDM0_RXDETECTOR3, rtlphy->framesync);
|
||||||
|
@ -1106,7 +1047,7 @@ static void _rtl92d_phy_stop_trx_before_changeband(struct ieee80211_hw *hw)
|
||||||
{
|
{
|
||||||
rtl_set_bbreg(hw, RFPGA0_RFMOD, BCCKEN, 0);
|
rtl_set_bbreg(hw, RFPGA0_RFMOD, BCCKEN, 0);
|
||||||
rtl_set_bbreg(hw, RFPGA0_RFMOD, BOFDMEN, 0);
|
rtl_set_bbreg(hw, RFPGA0_RFMOD, BOFDMEN, 0);
|
||||||
rtl_set_bbreg(hw, ROFDM0_TRXPATHENABLE, BMASKBYTE0, 0x00);
|
rtl_set_bbreg(hw, ROFDM0_TRXPATHENABLE, MASKBYTE0, 0x00);
|
||||||
rtl_set_bbreg(hw, ROFDM1_TRXPATHENABLE, BDWORD, 0x0);
|
rtl_set_bbreg(hw, ROFDM1_TRXPATHENABLE, BDWORD, 0x0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1168,7 +1109,7 @@ static void _rtl92d_phy_reload_imr_setting(struct ieee80211_hw *hw,
|
||||||
{
|
{
|
||||||
struct rtl_priv *rtlpriv = rtl_priv(hw);
|
struct rtl_priv *rtlpriv = rtl_priv(hw);
|
||||||
u32 imr_num = MAX_RF_IMR_INDEX;
|
u32 imr_num = MAX_RF_IMR_INDEX;
|
||||||
u32 rfmask = BRFREGOFFSETMASK;
|
u32 rfmask = RFREG_OFFSET_MASK;
|
||||||
u8 group, i;
|
u8 group, i;
|
||||||
unsigned long flag = 0;
|
unsigned long flag = 0;
|
||||||
|
|
||||||
|
@ -1211,7 +1152,7 @@ static void _rtl92d_phy_reload_imr_setting(struct ieee80211_hw *hw,
|
||||||
for (i = 0; i < imr_num; i++) {
|
for (i = 0; i < imr_num; i++) {
|
||||||
rtl_set_rfreg(hw, (enum radio_path)rfpath,
|
rtl_set_rfreg(hw, (enum radio_path)rfpath,
|
||||||
rf_reg_for_5g_swchnl_normal[i],
|
rf_reg_for_5g_swchnl_normal[i],
|
||||||
BRFREGOFFSETMASK,
|
RFREG_OFFSET_MASK,
|
||||||
rf_imr_param_normal[0][0][i]);
|
rf_imr_param_normal[0][0][i]);
|
||||||
}
|
}
|
||||||
rtl_set_bbreg(hw, RFPGA0_ANALOGPARAMETER4,
|
rtl_set_bbreg(hw, RFPGA0_ANALOGPARAMETER4,
|
||||||
|
@ -1329,7 +1270,7 @@ static void _rtl92d_phy_switch_rf_setting(struct ieee80211_hw *hw, u8 channel)
|
||||||
if (i == 0 && (rtlhal->macphymode == DUALMAC_DUALPHY)) {
|
if (i == 0 && (rtlhal->macphymode == DUALMAC_DUALPHY)) {
|
||||||
rtl_set_rfreg(hw, (enum radio_path)path,
|
rtl_set_rfreg(hw, (enum radio_path)path,
|
||||||
rf_reg_for_c_cut_5g[i],
|
rf_reg_for_c_cut_5g[i],
|
||||||
BRFREGOFFSETMASK, 0xE439D);
|
RFREG_OFFSET_MASK, 0xE439D);
|
||||||
} else if (rf_reg_for_c_cut_5g[i] == RF_SYN_G4) {
|
} else if (rf_reg_for_c_cut_5g[i] == RF_SYN_G4) {
|
||||||
u4tmp2 = (rf_reg_pram_c_5g[index][i] &
|
u4tmp2 = (rf_reg_pram_c_5g[index][i] &
|
||||||
0x7FF) | (u4tmp << 11);
|
0x7FF) | (u4tmp << 11);
|
||||||
|
@ -1337,11 +1278,11 @@ static void _rtl92d_phy_switch_rf_setting(struct ieee80211_hw *hw, u8 channel)
|
||||||
u4tmp2 &= ~(BIT(7) | BIT(6));
|
u4tmp2 &= ~(BIT(7) | BIT(6));
|
||||||
rtl_set_rfreg(hw, (enum radio_path)path,
|
rtl_set_rfreg(hw, (enum radio_path)path,
|
||||||
rf_reg_for_c_cut_5g[i],
|
rf_reg_for_c_cut_5g[i],
|
||||||
BRFREGOFFSETMASK, u4tmp2);
|
RFREG_OFFSET_MASK, u4tmp2);
|
||||||
} else {
|
} else {
|
||||||
rtl_set_rfreg(hw, (enum radio_path)path,
|
rtl_set_rfreg(hw, (enum radio_path)path,
|
||||||
rf_reg_for_c_cut_5g[i],
|
rf_reg_for_c_cut_5g[i],
|
||||||
BRFREGOFFSETMASK,
|
RFREG_OFFSET_MASK,
|
||||||
rf_reg_pram_c_5g[index][i]);
|
rf_reg_pram_c_5g[index][i]);
|
||||||
}
|
}
|
||||||
RT_TRACE(rtlpriv, COMP_RF, DBG_TRACE,
|
RT_TRACE(rtlpriv, COMP_RF, DBG_TRACE,
|
||||||
|
@ -1351,7 +1292,7 @@ static void _rtl92d_phy_switch_rf_setting(struct ieee80211_hw *hw, u8 channel)
|
||||||
path, index,
|
path, index,
|
||||||
rtl_get_rfreg(hw, (enum radio_path)path,
|
rtl_get_rfreg(hw, (enum radio_path)path,
|
||||||
rf_reg_for_c_cut_5g[i],
|
rf_reg_for_c_cut_5g[i],
|
||||||
BRFREGOFFSETMASK));
|
RFREG_OFFSET_MASK));
|
||||||
}
|
}
|
||||||
if (need_pwr_down)
|
if (need_pwr_down)
|
||||||
_rtl92d_phy_restore_rf_env(hw, path, &u4regvalue);
|
_rtl92d_phy_restore_rf_env(hw, path, &u4regvalue);
|
||||||
|
@ -1381,7 +1322,7 @@ static void _rtl92d_phy_switch_rf_setting(struct ieee80211_hw *hw, u8 channel)
|
||||||
i++) {
|
i++) {
|
||||||
rtl_set_rfreg(hw, rfpath,
|
rtl_set_rfreg(hw, rfpath,
|
||||||
rf_for_c_cut_5g_internal_pa[i],
|
rf_for_c_cut_5g_internal_pa[i],
|
||||||
BRFREGOFFSETMASK,
|
RFREG_OFFSET_MASK,
|
||||||
rf_pram_c_5g_int_pa[index][i]);
|
rf_pram_c_5g_int_pa[index][i]);
|
||||||
RT_TRACE(rtlpriv, COMP_RF, DBG_LOUD,
|
RT_TRACE(rtlpriv, COMP_RF, DBG_LOUD,
|
||||||
"offset 0x%x value 0x%x path %d index %d\n",
|
"offset 0x%x value 0x%x path %d index %d\n",
|
||||||
|
@ -1422,13 +1363,13 @@ static void _rtl92d_phy_switch_rf_setting(struct ieee80211_hw *hw, u8 channel)
|
||||||
if (rf_reg_for_c_cut_2g[i] == RF_SYN_G7)
|
if (rf_reg_for_c_cut_2g[i] == RF_SYN_G7)
|
||||||
rtl_set_rfreg(hw, (enum radio_path)path,
|
rtl_set_rfreg(hw, (enum radio_path)path,
|
||||||
rf_reg_for_c_cut_2g[i],
|
rf_reg_for_c_cut_2g[i],
|
||||||
BRFREGOFFSETMASK,
|
RFREG_OFFSET_MASK,
|
||||||
(rf_reg_param_for_c_cut_2g[index][i] |
|
(rf_reg_param_for_c_cut_2g[index][i] |
|
||||||
BIT(17)));
|
BIT(17)));
|
||||||
else
|
else
|
||||||
rtl_set_rfreg(hw, (enum radio_path)path,
|
rtl_set_rfreg(hw, (enum radio_path)path,
|
||||||
rf_reg_for_c_cut_2g[i],
|
rf_reg_for_c_cut_2g[i],
|
||||||
BRFREGOFFSETMASK,
|
RFREG_OFFSET_MASK,
|
||||||
rf_reg_param_for_c_cut_2g
|
rf_reg_param_for_c_cut_2g
|
||||||
[index][i]);
|
[index][i]);
|
||||||
RT_TRACE(rtlpriv, COMP_RF, DBG_TRACE,
|
RT_TRACE(rtlpriv, COMP_RF, DBG_TRACE,
|
||||||
|
@ -1438,14 +1379,14 @@ static void _rtl92d_phy_switch_rf_setting(struct ieee80211_hw *hw, u8 channel)
|
||||||
rf_reg_mask_for_c_cut_2g[i], path, index,
|
rf_reg_mask_for_c_cut_2g[i], path, index,
|
||||||
rtl_get_rfreg(hw, (enum radio_path)path,
|
rtl_get_rfreg(hw, (enum radio_path)path,
|
||||||
rf_reg_for_c_cut_2g[i],
|
rf_reg_for_c_cut_2g[i],
|
||||||
BRFREGOFFSETMASK));
|
RFREG_OFFSET_MASK));
|
||||||
}
|
}
|
||||||
RTPRINT(rtlpriv, FINIT, INIT_IQK,
|
RTPRINT(rtlpriv, FINIT, INIT_IQK,
|
||||||
"cosa ver 3 set RF-B, 2G, 0x28 = 0x%x !!\n",
|
"cosa ver 3 set RF-B, 2G, 0x28 = 0x%x !!\n",
|
||||||
rf_syn_g4_for_c_cut_2g | (u4tmp << 11));
|
rf_syn_g4_for_c_cut_2g | (u4tmp << 11));
|
||||||
|
|
||||||
rtl_set_rfreg(hw, (enum radio_path)path, RF_SYN_G4,
|
rtl_set_rfreg(hw, (enum radio_path)path, RF_SYN_G4,
|
||||||
BRFREGOFFSETMASK,
|
RFREG_OFFSET_MASK,
|
||||||
rf_syn_g4_for_c_cut_2g | (u4tmp << 11));
|
rf_syn_g4_for_c_cut_2g | (u4tmp << 11));
|
||||||
if (need_pwr_down)
|
if (need_pwr_down)
|
||||||
_rtl92d_phy_restore_rf_env(hw, path, &u4regvalue);
|
_rtl92d_phy_restore_rf_env(hw, path, &u4regvalue);
|
||||||
|
@ -1493,41 +1434,41 @@ static u8 _rtl92d_phy_patha_iqk(struct ieee80211_hw *hw, bool configpathb)
|
||||||
/* path-A IQK setting */
|
/* path-A IQK setting */
|
||||||
RTPRINT(rtlpriv, FINIT, INIT_IQK, "Path-A IQK setting!\n");
|
RTPRINT(rtlpriv, FINIT, INIT_IQK, "Path-A IQK setting!\n");
|
||||||
if (rtlhal->interfaceindex == 0) {
|
if (rtlhal->interfaceindex == 0) {
|
||||||
rtl_set_bbreg(hw, 0xe30, BMASKDWORD, 0x10008c1f);
|
rtl_set_bbreg(hw, 0xe30, MASKDWORD, 0x10008c1f);
|
||||||
rtl_set_bbreg(hw, 0xe34, BMASKDWORD, 0x10008c1f);
|
rtl_set_bbreg(hw, 0xe34, MASKDWORD, 0x10008c1f);
|
||||||
} else {
|
} else {
|
||||||
rtl_set_bbreg(hw, 0xe30, BMASKDWORD, 0x10008c22);
|
rtl_set_bbreg(hw, 0xe30, MASKDWORD, 0x10008c22);
|
||||||
rtl_set_bbreg(hw, 0xe34, BMASKDWORD, 0x10008c22);
|
rtl_set_bbreg(hw, 0xe34, MASKDWORD, 0x10008c22);
|
||||||
}
|
}
|
||||||
rtl_set_bbreg(hw, 0xe38, BMASKDWORD, 0x82140102);
|
rtl_set_bbreg(hw, 0xe38, MASKDWORD, 0x82140102);
|
||||||
rtl_set_bbreg(hw, 0xe3c, BMASKDWORD, 0x28160206);
|
rtl_set_bbreg(hw, 0xe3c, MASKDWORD, 0x28160206);
|
||||||
/* path-B IQK setting */
|
/* path-B IQK setting */
|
||||||
if (configpathb) {
|
if (configpathb) {
|
||||||
rtl_set_bbreg(hw, 0xe50, BMASKDWORD, 0x10008c22);
|
rtl_set_bbreg(hw, 0xe50, MASKDWORD, 0x10008c22);
|
||||||
rtl_set_bbreg(hw, 0xe54, BMASKDWORD, 0x10008c22);
|
rtl_set_bbreg(hw, 0xe54, MASKDWORD, 0x10008c22);
|
||||||
rtl_set_bbreg(hw, 0xe58, BMASKDWORD, 0x82140102);
|
rtl_set_bbreg(hw, 0xe58, MASKDWORD, 0x82140102);
|
||||||
rtl_set_bbreg(hw, 0xe5c, BMASKDWORD, 0x28160206);
|
rtl_set_bbreg(hw, 0xe5c, MASKDWORD, 0x28160206);
|
||||||
}
|
}
|
||||||
/* LO calibration setting */
|
/* LO calibration setting */
|
||||||
RTPRINT(rtlpriv, FINIT, INIT_IQK, "LO calibration setting!\n");
|
RTPRINT(rtlpriv, FINIT, INIT_IQK, "LO calibration setting!\n");
|
||||||
rtl_set_bbreg(hw, 0xe4c, BMASKDWORD, 0x00462911);
|
rtl_set_bbreg(hw, 0xe4c, MASKDWORD, 0x00462911);
|
||||||
/* One shot, path A LOK & IQK */
|
/* One shot, path A LOK & IQK */
|
||||||
RTPRINT(rtlpriv, FINIT, INIT_IQK, "One shot, path A LOK & IQK!\n");
|
RTPRINT(rtlpriv, FINIT, INIT_IQK, "One shot, path A LOK & IQK!\n");
|
||||||
rtl_set_bbreg(hw, 0xe48, BMASKDWORD, 0xf9000000);
|
rtl_set_bbreg(hw, 0xe48, MASKDWORD, 0xf9000000);
|
||||||
rtl_set_bbreg(hw, 0xe48, BMASKDWORD, 0xf8000000);
|
rtl_set_bbreg(hw, 0xe48, MASKDWORD, 0xf8000000);
|
||||||
/* delay x ms */
|
/* delay x ms */
|
||||||
RTPRINT(rtlpriv, FINIT, INIT_IQK,
|
RTPRINT(rtlpriv, FINIT, INIT_IQK,
|
||||||
"Delay %d ms for One shot, path A LOK & IQK\n",
|
"Delay %d ms for One shot, path A LOK & IQK\n",
|
||||||
IQK_DELAY_TIME);
|
IQK_DELAY_TIME);
|
||||||
mdelay(IQK_DELAY_TIME);
|
mdelay(IQK_DELAY_TIME);
|
||||||
/* Check failed */
|
/* Check failed */
|
||||||
regeac = rtl_get_bbreg(hw, 0xeac, BMASKDWORD);
|
regeac = rtl_get_bbreg(hw, 0xeac, MASKDWORD);
|
||||||
RTPRINT(rtlpriv, FINIT, INIT_IQK, "0xeac = 0x%x\n", regeac);
|
RTPRINT(rtlpriv, FINIT, INIT_IQK, "0xeac = 0x%x\n", regeac);
|
||||||
rege94 = rtl_get_bbreg(hw, 0xe94, BMASKDWORD);
|
rege94 = rtl_get_bbreg(hw, 0xe94, MASKDWORD);
|
||||||
RTPRINT(rtlpriv, FINIT, INIT_IQK, "0xe94 = 0x%x\n", rege94);
|
RTPRINT(rtlpriv, FINIT, INIT_IQK, "0xe94 = 0x%x\n", rege94);
|
||||||
rege9c = rtl_get_bbreg(hw, 0xe9c, BMASKDWORD);
|
rege9c = rtl_get_bbreg(hw, 0xe9c, MASKDWORD);
|
||||||
RTPRINT(rtlpriv, FINIT, INIT_IQK, "0xe9c = 0x%x\n", rege9c);
|
RTPRINT(rtlpriv, FINIT, INIT_IQK, "0xe9c = 0x%x\n", rege9c);
|
||||||
regea4 = rtl_get_bbreg(hw, 0xea4, BMASKDWORD);
|
regea4 = rtl_get_bbreg(hw, 0xea4, MASKDWORD);
|
||||||
RTPRINT(rtlpriv, FINIT, INIT_IQK, "0xea4 = 0x%x\n", regea4);
|
RTPRINT(rtlpriv, FINIT, INIT_IQK, "0xea4 = 0x%x\n", regea4);
|
||||||
if (!(regeac & BIT(28)) && (((rege94 & 0x03FF0000) >> 16) != 0x142) &&
|
if (!(regeac & BIT(28)) && (((rege94 & 0x03FF0000) >> 16) != 0x142) &&
|
||||||
(((rege9c & 0x03FF0000) >> 16) != 0x42))
|
(((rege9c & 0x03FF0000) >> 16) != 0x42))
|
||||||
|
@ -1563,42 +1504,42 @@ static u8 _rtl92d_phy_patha_iqk_5g_normal(struct ieee80211_hw *hw,
|
||||||
RTPRINT(rtlpriv, FINIT, INIT_IQK, "Path A IQK!\n");
|
RTPRINT(rtlpriv, FINIT, INIT_IQK, "Path A IQK!\n");
|
||||||
/* path-A IQK setting */
|
/* path-A IQK setting */
|
||||||
RTPRINT(rtlpriv, FINIT, INIT_IQK, "Path-A IQK setting!\n");
|
RTPRINT(rtlpriv, FINIT, INIT_IQK, "Path-A IQK setting!\n");
|
||||||
rtl_set_bbreg(hw, 0xe30, BMASKDWORD, 0x18008c1f);
|
rtl_set_bbreg(hw, 0xe30, MASKDWORD, 0x18008c1f);
|
||||||
rtl_set_bbreg(hw, 0xe34, BMASKDWORD, 0x18008c1f);
|
rtl_set_bbreg(hw, 0xe34, MASKDWORD, 0x18008c1f);
|
||||||
rtl_set_bbreg(hw, 0xe38, BMASKDWORD, 0x82140307);
|
rtl_set_bbreg(hw, 0xe38, MASKDWORD, 0x82140307);
|
||||||
rtl_set_bbreg(hw, 0xe3c, BMASKDWORD, 0x68160960);
|
rtl_set_bbreg(hw, 0xe3c, MASKDWORD, 0x68160960);
|
||||||
/* path-B IQK setting */
|
/* path-B IQK setting */
|
||||||
if (configpathb) {
|
if (configpathb) {
|
||||||
rtl_set_bbreg(hw, 0xe50, BMASKDWORD, 0x18008c2f);
|
rtl_set_bbreg(hw, 0xe50, MASKDWORD, 0x18008c2f);
|
||||||
rtl_set_bbreg(hw, 0xe54, BMASKDWORD, 0x18008c2f);
|
rtl_set_bbreg(hw, 0xe54, MASKDWORD, 0x18008c2f);
|
||||||
rtl_set_bbreg(hw, 0xe58, BMASKDWORD, 0x82110000);
|
rtl_set_bbreg(hw, 0xe58, MASKDWORD, 0x82110000);
|
||||||
rtl_set_bbreg(hw, 0xe5c, BMASKDWORD, 0x68110000);
|
rtl_set_bbreg(hw, 0xe5c, MASKDWORD, 0x68110000);
|
||||||
}
|
}
|
||||||
/* LO calibration setting */
|
/* LO calibration setting */
|
||||||
RTPRINT(rtlpriv, FINIT, INIT_IQK, "LO calibration setting!\n");
|
RTPRINT(rtlpriv, FINIT, INIT_IQK, "LO calibration setting!\n");
|
||||||
rtl_set_bbreg(hw, 0xe4c, BMASKDWORD, 0x00462911);
|
rtl_set_bbreg(hw, 0xe4c, MASKDWORD, 0x00462911);
|
||||||
/* path-A PA on */
|
/* path-A PA on */
|
||||||
rtl_set_bbreg(hw, RFPGA0_XAB_RFINTERFACESW, BMASKDWORD, 0x07000f60);
|
rtl_set_bbreg(hw, RFPGA0_XAB_RFINTERFACESW, MASKDWORD, 0x07000f60);
|
||||||
rtl_set_bbreg(hw, RFPGA0_XA_RFINTERFACEOE, BMASKDWORD, 0x66e60e30);
|
rtl_set_bbreg(hw, RFPGA0_XA_RFINTERFACEOE, MASKDWORD, 0x66e60e30);
|
||||||
for (i = 0; i < retrycount; i++) {
|
for (i = 0; i < retrycount; i++) {
|
||||||
/* One shot, path A LOK & IQK */
|
/* One shot, path A LOK & IQK */
|
||||||
RTPRINT(rtlpriv, FINIT, INIT_IQK,
|
RTPRINT(rtlpriv, FINIT, INIT_IQK,
|
||||||
"One shot, path A LOK & IQK!\n");
|
"One shot, path A LOK & IQK!\n");
|
||||||
rtl_set_bbreg(hw, 0xe48, BMASKDWORD, 0xf9000000);
|
rtl_set_bbreg(hw, 0xe48, MASKDWORD, 0xf9000000);
|
||||||
rtl_set_bbreg(hw, 0xe48, BMASKDWORD, 0xf8000000);
|
rtl_set_bbreg(hw, 0xe48, MASKDWORD, 0xf8000000);
|
||||||
/* delay x ms */
|
/* delay x ms */
|
||||||
RTPRINT(rtlpriv, FINIT, INIT_IQK,
|
RTPRINT(rtlpriv, FINIT, INIT_IQK,
|
||||||
"Delay %d ms for One shot, path A LOK & IQK.\n",
|
"Delay %d ms for One shot, path A LOK & IQK.\n",
|
||||||
IQK_DELAY_TIME);
|
IQK_DELAY_TIME);
|
||||||
mdelay(IQK_DELAY_TIME * 10);
|
mdelay(IQK_DELAY_TIME * 10);
|
||||||
/* Check failed */
|
/* Check failed */
|
||||||
regeac = rtl_get_bbreg(hw, 0xeac, BMASKDWORD);
|
regeac = rtl_get_bbreg(hw, 0xeac, MASKDWORD);
|
||||||
RTPRINT(rtlpriv, FINIT, INIT_IQK, "0xeac = 0x%x\n", regeac);
|
RTPRINT(rtlpriv, FINIT, INIT_IQK, "0xeac = 0x%x\n", regeac);
|
||||||
rege94 = rtl_get_bbreg(hw, 0xe94, BMASKDWORD);
|
rege94 = rtl_get_bbreg(hw, 0xe94, MASKDWORD);
|
||||||
RTPRINT(rtlpriv, FINIT, INIT_IQK, "0xe94 = 0x%x\n", rege94);
|
RTPRINT(rtlpriv, FINIT, INIT_IQK, "0xe94 = 0x%x\n", rege94);
|
||||||
rege9c = rtl_get_bbreg(hw, 0xe9c, BMASKDWORD);
|
rege9c = rtl_get_bbreg(hw, 0xe9c, MASKDWORD);
|
||||||
RTPRINT(rtlpriv, FINIT, INIT_IQK, "0xe9c = 0x%x\n", rege9c);
|
RTPRINT(rtlpriv, FINIT, INIT_IQK, "0xe9c = 0x%x\n", rege9c);
|
||||||
regea4 = rtl_get_bbreg(hw, 0xea4, BMASKDWORD);
|
regea4 = rtl_get_bbreg(hw, 0xea4, MASKDWORD);
|
||||||
RTPRINT(rtlpriv, FINIT, INIT_IQK, "0xea4 = 0x%x\n", regea4);
|
RTPRINT(rtlpriv, FINIT, INIT_IQK, "0xea4 = 0x%x\n", regea4);
|
||||||
if (!(regeac & TxOKBit) &&
|
if (!(regeac & TxOKBit) &&
|
||||||
(((rege94 & 0x03FF0000) >> 16) != 0x142)) {
|
(((rege94 & 0x03FF0000) >> 16) != 0x142)) {
|
||||||
|
@ -1620,9 +1561,9 @@ static u8 _rtl92d_phy_patha_iqk_5g_normal(struct ieee80211_hw *hw,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* path A PA off */
|
/* path A PA off */
|
||||||
rtl_set_bbreg(hw, RFPGA0_XAB_RFINTERFACESW, BMASKDWORD,
|
rtl_set_bbreg(hw, RFPGA0_XAB_RFINTERFACESW, MASKDWORD,
|
||||||
rtlphy->iqk_bb_backup[0]);
|
rtlphy->iqk_bb_backup[0]);
|
||||||
rtl_set_bbreg(hw, RFPGA0_XA_RFINTERFACEOE, BMASKDWORD,
|
rtl_set_bbreg(hw, RFPGA0_XA_RFINTERFACEOE, MASKDWORD,
|
||||||
rtlphy->iqk_bb_backup[1]);
|
rtlphy->iqk_bb_backup[1]);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -1637,22 +1578,22 @@ static u8 _rtl92d_phy_pathb_iqk(struct ieee80211_hw *hw)
|
||||||
RTPRINT(rtlpriv, FINIT, INIT_IQK, "Path B IQK!\n");
|
RTPRINT(rtlpriv, FINIT, INIT_IQK, "Path B IQK!\n");
|
||||||
/* One shot, path B LOK & IQK */
|
/* One shot, path B LOK & IQK */
|
||||||
RTPRINT(rtlpriv, FINIT, INIT_IQK, "One shot, path A LOK & IQK!\n");
|
RTPRINT(rtlpriv, FINIT, INIT_IQK, "One shot, path A LOK & IQK!\n");
|
||||||
rtl_set_bbreg(hw, 0xe60, BMASKDWORD, 0x00000002);
|
rtl_set_bbreg(hw, 0xe60, MASKDWORD, 0x00000002);
|
||||||
rtl_set_bbreg(hw, 0xe60, BMASKDWORD, 0x00000000);
|
rtl_set_bbreg(hw, 0xe60, MASKDWORD, 0x00000000);
|
||||||
/* delay x ms */
|
/* delay x ms */
|
||||||
RTPRINT(rtlpriv, FINIT, INIT_IQK,
|
RTPRINT(rtlpriv, FINIT, INIT_IQK,
|
||||||
"Delay %d ms for One shot, path B LOK & IQK\n", IQK_DELAY_TIME);
|
"Delay %d ms for One shot, path B LOK & IQK\n", IQK_DELAY_TIME);
|
||||||
mdelay(IQK_DELAY_TIME);
|
mdelay(IQK_DELAY_TIME);
|
||||||
/* Check failed */
|
/* Check failed */
|
||||||
regeac = rtl_get_bbreg(hw, 0xeac, BMASKDWORD);
|
regeac = rtl_get_bbreg(hw, 0xeac, MASKDWORD);
|
||||||
RTPRINT(rtlpriv, FINIT, INIT_IQK, "0xeac = 0x%x\n", regeac);
|
RTPRINT(rtlpriv, FINIT, INIT_IQK, "0xeac = 0x%x\n", regeac);
|
||||||
regeb4 = rtl_get_bbreg(hw, 0xeb4, BMASKDWORD);
|
regeb4 = rtl_get_bbreg(hw, 0xeb4, MASKDWORD);
|
||||||
RTPRINT(rtlpriv, FINIT, INIT_IQK, "0xeb4 = 0x%x\n", regeb4);
|
RTPRINT(rtlpriv, FINIT, INIT_IQK, "0xeb4 = 0x%x\n", regeb4);
|
||||||
regebc = rtl_get_bbreg(hw, 0xebc, BMASKDWORD);
|
regebc = rtl_get_bbreg(hw, 0xebc, MASKDWORD);
|
||||||
RTPRINT(rtlpriv, FINIT, INIT_IQK, "0xebc = 0x%x\n", regebc);
|
RTPRINT(rtlpriv, FINIT, INIT_IQK, "0xebc = 0x%x\n", regebc);
|
||||||
regec4 = rtl_get_bbreg(hw, 0xec4, BMASKDWORD);
|
regec4 = rtl_get_bbreg(hw, 0xec4, MASKDWORD);
|
||||||
RTPRINT(rtlpriv, FINIT, INIT_IQK, "0xec4 = 0x%x\n", regec4);
|
RTPRINT(rtlpriv, FINIT, INIT_IQK, "0xec4 = 0x%x\n", regec4);
|
||||||
regecc = rtl_get_bbreg(hw, 0xecc, BMASKDWORD);
|
regecc = rtl_get_bbreg(hw, 0xecc, MASKDWORD);
|
||||||
RTPRINT(rtlpriv, FINIT, INIT_IQK, "0xecc = 0x%x\n", regecc);
|
RTPRINT(rtlpriv, FINIT, INIT_IQK, "0xecc = 0x%x\n", regecc);
|
||||||
if (!(regeac & BIT(31)) && (((regeb4 & 0x03FF0000) >> 16) != 0x142) &&
|
if (!(regeac & BIT(31)) && (((regeb4 & 0x03FF0000) >> 16) != 0x142) &&
|
||||||
(((regebc & 0x03FF0000) >> 16) != 0x42))
|
(((regebc & 0x03FF0000) >> 16) != 0x42))
|
||||||
|
@ -1680,31 +1621,31 @@ static u8 _rtl92d_phy_pathb_iqk_5g_normal(struct ieee80211_hw *hw)
|
||||||
RTPRINT(rtlpriv, FINIT, INIT_IQK, "Path B IQK!\n");
|
RTPRINT(rtlpriv, FINIT, INIT_IQK, "Path B IQK!\n");
|
||||||
/* path-A IQK setting */
|
/* path-A IQK setting */
|
||||||
RTPRINT(rtlpriv, FINIT, INIT_IQK, "Path-A IQK setting!\n");
|
RTPRINT(rtlpriv, FINIT, INIT_IQK, "Path-A IQK setting!\n");
|
||||||
rtl_set_bbreg(hw, 0xe30, BMASKDWORD, 0x18008c1f);
|
rtl_set_bbreg(hw, 0xe30, MASKDWORD, 0x18008c1f);
|
||||||
rtl_set_bbreg(hw, 0xe34, BMASKDWORD, 0x18008c1f);
|
rtl_set_bbreg(hw, 0xe34, MASKDWORD, 0x18008c1f);
|
||||||
rtl_set_bbreg(hw, 0xe38, BMASKDWORD, 0x82110000);
|
rtl_set_bbreg(hw, 0xe38, MASKDWORD, 0x82110000);
|
||||||
rtl_set_bbreg(hw, 0xe3c, BMASKDWORD, 0x68110000);
|
rtl_set_bbreg(hw, 0xe3c, MASKDWORD, 0x68110000);
|
||||||
|
|
||||||
/* path-B IQK setting */
|
/* path-B IQK setting */
|
||||||
rtl_set_bbreg(hw, 0xe50, BMASKDWORD, 0x18008c2f);
|
rtl_set_bbreg(hw, 0xe50, MASKDWORD, 0x18008c2f);
|
||||||
rtl_set_bbreg(hw, 0xe54, BMASKDWORD, 0x18008c2f);
|
rtl_set_bbreg(hw, 0xe54, MASKDWORD, 0x18008c2f);
|
||||||
rtl_set_bbreg(hw, 0xe58, BMASKDWORD, 0x82140307);
|
rtl_set_bbreg(hw, 0xe58, MASKDWORD, 0x82140307);
|
||||||
rtl_set_bbreg(hw, 0xe5c, BMASKDWORD, 0x68160960);
|
rtl_set_bbreg(hw, 0xe5c, MASKDWORD, 0x68160960);
|
||||||
|
|
||||||
/* LO calibration setting */
|
/* LO calibration setting */
|
||||||
RTPRINT(rtlpriv, FINIT, INIT_IQK, "LO calibration setting!\n");
|
RTPRINT(rtlpriv, FINIT, INIT_IQK, "LO calibration setting!\n");
|
||||||
rtl_set_bbreg(hw, 0xe4c, BMASKDWORD, 0x00462911);
|
rtl_set_bbreg(hw, 0xe4c, MASKDWORD, 0x00462911);
|
||||||
|
|
||||||
/* path-B PA on */
|
/* path-B PA on */
|
||||||
rtl_set_bbreg(hw, RFPGA0_XAB_RFINTERFACESW, BMASKDWORD, 0x0f600700);
|
rtl_set_bbreg(hw, RFPGA0_XAB_RFINTERFACESW, MASKDWORD, 0x0f600700);
|
||||||
rtl_set_bbreg(hw, RFPGA0_XB_RFINTERFACEOE, BMASKDWORD, 0x061f0d30);
|
rtl_set_bbreg(hw, RFPGA0_XB_RFINTERFACEOE, MASKDWORD, 0x061f0d30);
|
||||||
|
|
||||||
for (i = 0; i < retrycount; i++) {
|
for (i = 0; i < retrycount; i++) {
|
||||||
/* One shot, path B LOK & IQK */
|
/* One shot, path B LOK & IQK */
|
||||||
RTPRINT(rtlpriv, FINIT, INIT_IQK,
|
RTPRINT(rtlpriv, FINIT, INIT_IQK,
|
||||||
"One shot, path A LOK & IQK!\n");
|
"One shot, path A LOK & IQK!\n");
|
||||||
rtl_set_bbreg(hw, 0xe48, BMASKDWORD, 0xfa000000);
|
rtl_set_bbreg(hw, 0xe48, MASKDWORD, 0xfa000000);
|
||||||
rtl_set_bbreg(hw, 0xe48, BMASKDWORD, 0xf8000000);
|
rtl_set_bbreg(hw, 0xe48, MASKDWORD, 0xf8000000);
|
||||||
|
|
||||||
/* delay x ms */
|
/* delay x ms */
|
||||||
RTPRINT(rtlpriv, FINIT, INIT_IQK,
|
RTPRINT(rtlpriv, FINIT, INIT_IQK,
|
||||||
|
@ -1712,15 +1653,15 @@ static u8 _rtl92d_phy_pathb_iqk_5g_normal(struct ieee80211_hw *hw)
|
||||||
mdelay(IQK_DELAY_TIME * 10);
|
mdelay(IQK_DELAY_TIME * 10);
|
||||||
|
|
||||||
/* Check failed */
|
/* Check failed */
|
||||||
regeac = rtl_get_bbreg(hw, 0xeac, BMASKDWORD);
|
regeac = rtl_get_bbreg(hw, 0xeac, MASKDWORD);
|
||||||
RTPRINT(rtlpriv, FINIT, INIT_IQK, "0xeac = 0x%x\n", regeac);
|
RTPRINT(rtlpriv, FINIT, INIT_IQK, "0xeac = 0x%x\n", regeac);
|
||||||
regeb4 = rtl_get_bbreg(hw, 0xeb4, BMASKDWORD);
|
regeb4 = rtl_get_bbreg(hw, 0xeb4, MASKDWORD);
|
||||||
RTPRINT(rtlpriv, FINIT, INIT_IQK, "0xeb4 = 0x%x\n", regeb4);
|
RTPRINT(rtlpriv, FINIT, INIT_IQK, "0xeb4 = 0x%x\n", regeb4);
|
||||||
regebc = rtl_get_bbreg(hw, 0xebc, BMASKDWORD);
|
regebc = rtl_get_bbreg(hw, 0xebc, MASKDWORD);
|
||||||
RTPRINT(rtlpriv, FINIT, INIT_IQK, "0xebc = 0x%x\n", regebc);
|
RTPRINT(rtlpriv, FINIT, INIT_IQK, "0xebc = 0x%x\n", regebc);
|
||||||
regec4 = rtl_get_bbreg(hw, 0xec4, BMASKDWORD);
|
regec4 = rtl_get_bbreg(hw, 0xec4, MASKDWORD);
|
||||||
RTPRINT(rtlpriv, FINIT, INIT_IQK, "0xec4 = 0x%x\n", regec4);
|
RTPRINT(rtlpriv, FINIT, INIT_IQK, "0xec4 = 0x%x\n", regec4);
|
||||||
regecc = rtl_get_bbreg(hw, 0xecc, BMASKDWORD);
|
regecc = rtl_get_bbreg(hw, 0xecc, MASKDWORD);
|
||||||
RTPRINT(rtlpriv, FINIT, INIT_IQK, "0xecc = 0x%x\n", regecc);
|
RTPRINT(rtlpriv, FINIT, INIT_IQK, "0xecc = 0x%x\n", regecc);
|
||||||
if (!(regeac & BIT(31)) &&
|
if (!(regeac & BIT(31)) &&
|
||||||
(((regeb4 & 0x03FF0000) >> 16) != 0x142))
|
(((regeb4 & 0x03FF0000) >> 16) != 0x142))
|
||||||
|
@ -1738,9 +1679,9 @@ static u8 _rtl92d_phy_pathb_iqk_5g_normal(struct ieee80211_hw *hw)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* path B PA off */
|
/* path B PA off */
|
||||||
rtl_set_bbreg(hw, RFPGA0_XAB_RFINTERFACESW, BMASKDWORD,
|
rtl_set_bbreg(hw, RFPGA0_XAB_RFINTERFACESW, MASKDWORD,
|
||||||
rtlphy->iqk_bb_backup[0]);
|
rtlphy->iqk_bb_backup[0]);
|
||||||
rtl_set_bbreg(hw, RFPGA0_XB_RFINTERFACEOE, BMASKDWORD,
|
rtl_set_bbreg(hw, RFPGA0_XB_RFINTERFACEOE, MASKDWORD,
|
||||||
rtlphy->iqk_bb_backup[2]);
|
rtlphy->iqk_bb_backup[2]);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -1754,7 +1695,7 @@ static void _rtl92d_phy_save_adda_registers(struct ieee80211_hw *hw,
|
||||||
|
|
||||||
RTPRINT(rtlpriv, FINIT, INIT_IQK, "Save ADDA parameters.\n");
|
RTPRINT(rtlpriv, FINIT, INIT_IQK, "Save ADDA parameters.\n");
|
||||||
for (i = 0; i < regnum; i++)
|
for (i = 0; i < regnum; i++)
|
||||||
adda_backup[i] = rtl_get_bbreg(hw, adda_reg[i], BMASKDWORD);
|
adda_backup[i] = rtl_get_bbreg(hw, adda_reg[i], MASKDWORD);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void _rtl92d_phy_save_mac_registers(struct ieee80211_hw *hw,
|
static void _rtl92d_phy_save_mac_registers(struct ieee80211_hw *hw,
|
||||||
|
@ -1779,7 +1720,7 @@ static void _rtl92d_phy_reload_adda_registers(struct ieee80211_hw *hw,
|
||||||
RTPRINT(rtlpriv, FINIT, INIT_IQK,
|
RTPRINT(rtlpriv, FINIT, INIT_IQK,
|
||||||
"Reload ADDA power saving parameters !\n");
|
"Reload ADDA power saving parameters !\n");
|
||||||
for (i = 0; i < regnum; i++)
|
for (i = 0; i < regnum; i++)
|
||||||
rtl_set_bbreg(hw, adda_reg[i], BMASKDWORD, adda_backup[i]);
|
rtl_set_bbreg(hw, adda_reg[i], MASKDWORD, adda_backup[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void _rtl92d_phy_reload_mac_registers(struct ieee80211_hw *hw,
|
static void _rtl92d_phy_reload_mac_registers(struct ieee80211_hw *hw,
|
||||||
|
@ -1807,7 +1748,7 @@ static void _rtl92d_phy_path_adda_on(struct ieee80211_hw *hw,
|
||||||
pathon = rtlpriv->rtlhal.interfaceindex == 0 ?
|
pathon = rtlpriv->rtlhal.interfaceindex == 0 ?
|
||||||
0x04db25a4 : 0x0b1b25a4;
|
0x04db25a4 : 0x0b1b25a4;
|
||||||
for (i = 0; i < IQK_ADDA_REG_NUM; i++)
|
for (i = 0; i < IQK_ADDA_REG_NUM; i++)
|
||||||
rtl_set_bbreg(hw, adda_reg[i], BMASKDWORD, pathon);
|
rtl_set_bbreg(hw, adda_reg[i], MASKDWORD, pathon);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void _rtl92d_phy_mac_setting_calibration(struct ieee80211_hw *hw,
|
static void _rtl92d_phy_mac_setting_calibration(struct ieee80211_hw *hw,
|
||||||
|
@ -1830,9 +1771,9 @@ static void _rtl92d_phy_patha_standby(struct ieee80211_hw *hw)
|
||||||
struct rtl_priv *rtlpriv = rtl_priv(hw);
|
struct rtl_priv *rtlpriv = rtl_priv(hw);
|
||||||
RTPRINT(rtlpriv, FINIT, INIT_IQK, "Path-A standby mode!\n");
|
RTPRINT(rtlpriv, FINIT, INIT_IQK, "Path-A standby mode!\n");
|
||||||
|
|
||||||
rtl_set_bbreg(hw, 0xe28, BMASKDWORD, 0x0);
|
rtl_set_bbreg(hw, 0xe28, MASKDWORD, 0x0);
|
||||||
rtl_set_bbreg(hw, RFPGA0_XA_LSSIPARAMETER, BMASKDWORD, 0x00010000);
|
rtl_set_bbreg(hw, RFPGA0_XA_LSSIPARAMETER, MASKDWORD, 0x00010000);
|
||||||
rtl_set_bbreg(hw, 0xe28, BMASKDWORD, 0x80800000);
|
rtl_set_bbreg(hw, 0xe28, MASKDWORD, 0x80800000);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void _rtl92d_phy_pimode_switch(struct ieee80211_hw *hw, bool pi_mode)
|
static void _rtl92d_phy_pimode_switch(struct ieee80211_hw *hw, bool pi_mode)
|
||||||
|
@ -1843,8 +1784,8 @@ static void _rtl92d_phy_pimode_switch(struct ieee80211_hw *hw, bool pi_mode)
|
||||||
RTPRINT(rtlpriv, FINIT, INIT_IQK,
|
RTPRINT(rtlpriv, FINIT, INIT_IQK,
|
||||||
"BB Switch to %s mode!\n", pi_mode ? "PI" : "SI");
|
"BB Switch to %s mode!\n", pi_mode ? "PI" : "SI");
|
||||||
mode = pi_mode ? 0x01000100 : 0x01000000;
|
mode = pi_mode ? 0x01000100 : 0x01000000;
|
||||||
rtl_set_bbreg(hw, 0x820, BMASKDWORD, mode);
|
rtl_set_bbreg(hw, 0x820, MASKDWORD, mode);
|
||||||
rtl_set_bbreg(hw, 0x828, BMASKDWORD, mode);
|
rtl_set_bbreg(hw, 0x828, MASKDWORD, mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void _rtl92d_phy_iq_calibrate(struct ieee80211_hw *hw, long result[][8],
|
static void _rtl92d_phy_iq_calibrate(struct ieee80211_hw *hw, long result[][8],
|
||||||
|
@ -1875,7 +1816,7 @@ static void _rtl92d_phy_iq_calibrate(struct ieee80211_hw *hw, long result[][8],
|
||||||
|
|
||||||
RTPRINT(rtlpriv, FINIT, INIT_IQK, "IQK for 2.4G :Start!!!\n");
|
RTPRINT(rtlpriv, FINIT, INIT_IQK, "IQK for 2.4G :Start!!!\n");
|
||||||
if (t == 0) {
|
if (t == 0) {
|
||||||
bbvalue = rtl_get_bbreg(hw, RFPGA0_RFMOD, BMASKDWORD);
|
bbvalue = rtl_get_bbreg(hw, RFPGA0_RFMOD, MASKDWORD);
|
||||||
RTPRINT(rtlpriv, FINIT, INIT_IQK, "==>0x%08x\n", bbvalue);
|
RTPRINT(rtlpriv, FINIT, INIT_IQK, "==>0x%08x\n", bbvalue);
|
||||||
RTPRINT(rtlpriv, FINIT, INIT_IQK, "IQ Calibration for %s\n",
|
RTPRINT(rtlpriv, FINIT, INIT_IQK, "IQ Calibration for %s\n",
|
||||||
is2t ? "2T2R" : "1T1R");
|
is2t ? "2T2R" : "1T1R");
|
||||||
|
@ -1898,40 +1839,40 @@ static void _rtl92d_phy_iq_calibrate(struct ieee80211_hw *hw, long result[][8],
|
||||||
_rtl92d_phy_pimode_switch(hw, true);
|
_rtl92d_phy_pimode_switch(hw, true);
|
||||||
|
|
||||||
rtl_set_bbreg(hw, RFPGA0_RFMOD, BIT(24), 0x00);
|
rtl_set_bbreg(hw, RFPGA0_RFMOD, BIT(24), 0x00);
|
||||||
rtl_set_bbreg(hw, ROFDM0_TRXPATHENABLE, BMASKDWORD, 0x03a05600);
|
rtl_set_bbreg(hw, ROFDM0_TRXPATHENABLE, MASKDWORD, 0x03a05600);
|
||||||
rtl_set_bbreg(hw, ROFDM0_TRMUXPAR, BMASKDWORD, 0x000800e4);
|
rtl_set_bbreg(hw, ROFDM0_TRMUXPAR, MASKDWORD, 0x000800e4);
|
||||||
rtl_set_bbreg(hw, RFPGA0_XCD_RFINTERFACESW, BMASKDWORD, 0x22204000);
|
rtl_set_bbreg(hw, RFPGA0_XCD_RFINTERFACESW, MASKDWORD, 0x22204000);
|
||||||
rtl_set_bbreg(hw, RFPGA0_ANALOGPARAMETER4, 0xf00000, 0x0f);
|
rtl_set_bbreg(hw, RFPGA0_ANALOGPARAMETER4, 0xf00000, 0x0f);
|
||||||
if (is2t) {
|
if (is2t) {
|
||||||
rtl_set_bbreg(hw, RFPGA0_XA_LSSIPARAMETER, BMASKDWORD,
|
rtl_set_bbreg(hw, RFPGA0_XA_LSSIPARAMETER, MASKDWORD,
|
||||||
0x00010000);
|
0x00010000);
|
||||||
rtl_set_bbreg(hw, RFPGA0_XB_LSSIPARAMETER, BMASKDWORD,
|
rtl_set_bbreg(hw, RFPGA0_XB_LSSIPARAMETER, MASKDWORD,
|
||||||
0x00010000);
|
0x00010000);
|
||||||
}
|
}
|
||||||
/* MAC settings */
|
/* MAC settings */
|
||||||
_rtl92d_phy_mac_setting_calibration(hw, iqk_mac_reg,
|
_rtl92d_phy_mac_setting_calibration(hw, iqk_mac_reg,
|
||||||
rtlphy->iqk_mac_backup);
|
rtlphy->iqk_mac_backup);
|
||||||
/* Page B init */
|
/* Page B init */
|
||||||
rtl_set_bbreg(hw, 0xb68, BMASKDWORD, 0x0f600000);
|
rtl_set_bbreg(hw, 0xb68, MASKDWORD, 0x0f600000);
|
||||||
if (is2t)
|
if (is2t)
|
||||||
rtl_set_bbreg(hw, 0xb6c, BMASKDWORD, 0x0f600000);
|
rtl_set_bbreg(hw, 0xb6c, MASKDWORD, 0x0f600000);
|
||||||
/* IQ calibration setting */
|
/* IQ calibration setting */
|
||||||
RTPRINT(rtlpriv, FINIT, INIT_IQK, "IQK setting!\n");
|
RTPRINT(rtlpriv, FINIT, INIT_IQK, "IQK setting!\n");
|
||||||
rtl_set_bbreg(hw, 0xe28, BMASKDWORD, 0x80800000);
|
rtl_set_bbreg(hw, 0xe28, MASKDWORD, 0x80800000);
|
||||||
rtl_set_bbreg(hw, 0xe40, BMASKDWORD, 0x01007c00);
|
rtl_set_bbreg(hw, 0xe40, MASKDWORD, 0x01007c00);
|
||||||
rtl_set_bbreg(hw, 0xe44, BMASKDWORD, 0x01004800);
|
rtl_set_bbreg(hw, 0xe44, MASKDWORD, 0x01004800);
|
||||||
for (i = 0; i < retrycount; i++) {
|
for (i = 0; i < retrycount; i++) {
|
||||||
patha_ok = _rtl92d_phy_patha_iqk(hw, is2t);
|
patha_ok = _rtl92d_phy_patha_iqk(hw, is2t);
|
||||||
if (patha_ok == 0x03) {
|
if (patha_ok == 0x03) {
|
||||||
RTPRINT(rtlpriv, FINIT, INIT_IQK,
|
RTPRINT(rtlpriv, FINIT, INIT_IQK,
|
||||||
"Path A IQK Success!!\n");
|
"Path A IQK Success!!\n");
|
||||||
result[t][0] = (rtl_get_bbreg(hw, 0xe94, BMASKDWORD) &
|
result[t][0] = (rtl_get_bbreg(hw, 0xe94, MASKDWORD) &
|
||||||
0x3FF0000) >> 16;
|
0x3FF0000) >> 16;
|
||||||
result[t][1] = (rtl_get_bbreg(hw, 0xe9c, BMASKDWORD) &
|
result[t][1] = (rtl_get_bbreg(hw, 0xe9c, MASKDWORD) &
|
||||||
0x3FF0000) >> 16;
|
0x3FF0000) >> 16;
|
||||||
result[t][2] = (rtl_get_bbreg(hw, 0xea4, BMASKDWORD) &
|
result[t][2] = (rtl_get_bbreg(hw, 0xea4, MASKDWORD) &
|
||||||
0x3FF0000) >> 16;
|
0x3FF0000) >> 16;
|
||||||
result[t][3] = (rtl_get_bbreg(hw, 0xeac, BMASKDWORD) &
|
result[t][3] = (rtl_get_bbreg(hw, 0xeac, MASKDWORD) &
|
||||||
0x3FF0000) >> 16;
|
0x3FF0000) >> 16;
|
||||||
break;
|
break;
|
||||||
} else if (i == (retrycount - 1) && patha_ok == 0x01) {
|
} else if (i == (retrycount - 1) && patha_ok == 0x01) {
|
||||||
|
@ -1939,9 +1880,9 @@ static void _rtl92d_phy_iq_calibrate(struct ieee80211_hw *hw, long result[][8],
|
||||||
RTPRINT(rtlpriv, FINIT, INIT_IQK,
|
RTPRINT(rtlpriv, FINIT, INIT_IQK,
|
||||||
"Path A IQK Only Tx Success!!\n");
|
"Path A IQK Only Tx Success!!\n");
|
||||||
|
|
||||||
result[t][0] = (rtl_get_bbreg(hw, 0xe94, BMASKDWORD) &
|
result[t][0] = (rtl_get_bbreg(hw, 0xe94, MASKDWORD) &
|
||||||
0x3FF0000) >> 16;
|
0x3FF0000) >> 16;
|
||||||
result[t][1] = (rtl_get_bbreg(hw, 0xe9c, BMASKDWORD) &
|
result[t][1] = (rtl_get_bbreg(hw, 0xe9c, MASKDWORD) &
|
||||||
0x3FF0000) >> 16;
|
0x3FF0000) >> 16;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1957,22 +1898,22 @@ static void _rtl92d_phy_iq_calibrate(struct ieee80211_hw *hw, long result[][8],
|
||||||
RTPRINT(rtlpriv, FINIT, INIT_IQK,
|
RTPRINT(rtlpriv, FINIT, INIT_IQK,
|
||||||
"Path B IQK Success!!\n");
|
"Path B IQK Success!!\n");
|
||||||
result[t][4] = (rtl_get_bbreg(hw, 0xeb4,
|
result[t][4] = (rtl_get_bbreg(hw, 0xeb4,
|
||||||
BMASKDWORD) & 0x3FF0000) >> 16;
|
MASKDWORD) & 0x3FF0000) >> 16;
|
||||||
result[t][5] = (rtl_get_bbreg(hw, 0xebc,
|
result[t][5] = (rtl_get_bbreg(hw, 0xebc,
|
||||||
BMASKDWORD) & 0x3FF0000) >> 16;
|
MASKDWORD) & 0x3FF0000) >> 16;
|
||||||
result[t][6] = (rtl_get_bbreg(hw, 0xec4,
|
result[t][6] = (rtl_get_bbreg(hw, 0xec4,
|
||||||
BMASKDWORD) & 0x3FF0000) >> 16;
|
MASKDWORD) & 0x3FF0000) >> 16;
|
||||||
result[t][7] = (rtl_get_bbreg(hw, 0xecc,
|
result[t][7] = (rtl_get_bbreg(hw, 0xecc,
|
||||||
BMASKDWORD) & 0x3FF0000) >> 16;
|
MASKDWORD) & 0x3FF0000) >> 16;
|
||||||
break;
|
break;
|
||||||
} else if (i == (retrycount - 1) && pathb_ok == 0x01) {
|
} else if (i == (retrycount - 1) && pathb_ok == 0x01) {
|
||||||
/* Tx IQK OK */
|
/* Tx IQK OK */
|
||||||
RTPRINT(rtlpriv, FINIT, INIT_IQK,
|
RTPRINT(rtlpriv, FINIT, INIT_IQK,
|
||||||
"Path B Only Tx IQK Success!!\n");
|
"Path B Only Tx IQK Success!!\n");
|
||||||
result[t][4] = (rtl_get_bbreg(hw, 0xeb4,
|
result[t][4] = (rtl_get_bbreg(hw, 0xeb4,
|
||||||
BMASKDWORD) & 0x3FF0000) >> 16;
|
MASKDWORD) & 0x3FF0000) >> 16;
|
||||||
result[t][5] = (rtl_get_bbreg(hw, 0xebc,
|
result[t][5] = (rtl_get_bbreg(hw, 0xebc,
|
||||||
BMASKDWORD) & 0x3FF0000) >> 16;
|
MASKDWORD) & 0x3FF0000) >> 16;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (0x00 == pathb_ok)
|
if (0x00 == pathb_ok)
|
||||||
|
@ -1984,7 +1925,7 @@ static void _rtl92d_phy_iq_calibrate(struct ieee80211_hw *hw, long result[][8],
|
||||||
RTPRINT(rtlpriv, FINIT, INIT_IQK,
|
RTPRINT(rtlpriv, FINIT, INIT_IQK,
|
||||||
"IQK:Back to BB mode, load original value!\n");
|
"IQK:Back to BB mode, load original value!\n");
|
||||||
|
|
||||||
rtl_set_bbreg(hw, 0xe28, BMASKDWORD, 0);
|
rtl_set_bbreg(hw, 0xe28, MASKDWORD, 0);
|
||||||
if (t != 0) {
|
if (t != 0) {
|
||||||
/* Switch back BB to SI mode after finish IQ Calibration. */
|
/* Switch back BB to SI mode after finish IQ Calibration. */
|
||||||
if (!rtlphy->rfpi_enable)
|
if (!rtlphy->rfpi_enable)
|
||||||
|
@ -2004,8 +1945,8 @@ static void _rtl92d_phy_iq_calibrate(struct ieee80211_hw *hw, long result[][8],
|
||||||
rtlphy->iqk_bb_backup,
|
rtlphy->iqk_bb_backup,
|
||||||
IQK_BB_REG_NUM - 1);
|
IQK_BB_REG_NUM - 1);
|
||||||
/* load 0xe30 IQC default value */
|
/* load 0xe30 IQC default value */
|
||||||
rtl_set_bbreg(hw, 0xe30, BMASKDWORD, 0x01008c00);
|
rtl_set_bbreg(hw, 0xe30, MASKDWORD, 0x01008c00);
|
||||||
rtl_set_bbreg(hw, 0xe34, BMASKDWORD, 0x01008c00);
|
rtl_set_bbreg(hw, 0xe34, MASKDWORD, 0x01008c00);
|
||||||
}
|
}
|
||||||
RTPRINT(rtlpriv, FINIT, INIT_IQK, "<==\n");
|
RTPRINT(rtlpriv, FINIT, INIT_IQK, "<==\n");
|
||||||
}
|
}
|
||||||
|
@ -2042,7 +1983,7 @@ static void _rtl92d_phy_iq_calibrate_5g_normal(struct ieee80211_hw *hw,
|
||||||
RTPRINT(rtlpriv, FINIT, INIT_IQK, "IQK for 5G NORMAL:Start!!!\n");
|
RTPRINT(rtlpriv, FINIT, INIT_IQK, "IQK for 5G NORMAL:Start!!!\n");
|
||||||
mdelay(IQK_DELAY_TIME * 20);
|
mdelay(IQK_DELAY_TIME * 20);
|
||||||
if (t == 0) {
|
if (t == 0) {
|
||||||
bbvalue = rtl_get_bbreg(hw, RFPGA0_RFMOD, BMASKDWORD);
|
bbvalue = rtl_get_bbreg(hw, RFPGA0_RFMOD, MASKDWORD);
|
||||||
RTPRINT(rtlpriv, FINIT, INIT_IQK, "==>0x%08x\n", bbvalue);
|
RTPRINT(rtlpriv, FINIT, INIT_IQK, "==>0x%08x\n", bbvalue);
|
||||||
RTPRINT(rtlpriv, FINIT, INIT_IQK, "IQ Calibration for %s\n",
|
RTPRINT(rtlpriv, FINIT, INIT_IQK, "IQ Calibration for %s\n",
|
||||||
is2t ? "2T2R" : "1T1R");
|
is2t ? "2T2R" : "1T1R");
|
||||||
|
@ -2072,38 +2013,38 @@ static void _rtl92d_phy_iq_calibrate_5g_normal(struct ieee80211_hw *hw,
|
||||||
if (!rtlphy->rfpi_enable)
|
if (!rtlphy->rfpi_enable)
|
||||||
_rtl92d_phy_pimode_switch(hw, true);
|
_rtl92d_phy_pimode_switch(hw, true);
|
||||||
rtl_set_bbreg(hw, RFPGA0_RFMOD, BIT(24), 0x00);
|
rtl_set_bbreg(hw, RFPGA0_RFMOD, BIT(24), 0x00);
|
||||||
rtl_set_bbreg(hw, ROFDM0_TRXPATHENABLE, BMASKDWORD, 0x03a05600);
|
rtl_set_bbreg(hw, ROFDM0_TRXPATHENABLE, MASKDWORD, 0x03a05600);
|
||||||
rtl_set_bbreg(hw, ROFDM0_TRMUXPAR, BMASKDWORD, 0x000800e4);
|
rtl_set_bbreg(hw, ROFDM0_TRMUXPAR, MASKDWORD, 0x000800e4);
|
||||||
rtl_set_bbreg(hw, RFPGA0_XCD_RFINTERFACESW, BMASKDWORD, 0x22208000);
|
rtl_set_bbreg(hw, RFPGA0_XCD_RFINTERFACESW, MASKDWORD, 0x22208000);
|
||||||
rtl_set_bbreg(hw, RFPGA0_ANALOGPARAMETER4, 0xf00000, 0x0f);
|
rtl_set_bbreg(hw, RFPGA0_ANALOGPARAMETER4, 0xf00000, 0x0f);
|
||||||
|
|
||||||
/* Page B init */
|
/* Page B init */
|
||||||
rtl_set_bbreg(hw, 0xb68, BMASKDWORD, 0x0f600000);
|
rtl_set_bbreg(hw, 0xb68, MASKDWORD, 0x0f600000);
|
||||||
if (is2t)
|
if (is2t)
|
||||||
rtl_set_bbreg(hw, 0xb6c, BMASKDWORD, 0x0f600000);
|
rtl_set_bbreg(hw, 0xb6c, MASKDWORD, 0x0f600000);
|
||||||
/* IQ calibration setting */
|
/* IQ calibration setting */
|
||||||
RTPRINT(rtlpriv, FINIT, INIT_IQK, "IQK setting!\n");
|
RTPRINT(rtlpriv, FINIT, INIT_IQK, "IQK setting!\n");
|
||||||
rtl_set_bbreg(hw, 0xe28, BMASKDWORD, 0x80800000);
|
rtl_set_bbreg(hw, 0xe28, MASKDWORD, 0x80800000);
|
||||||
rtl_set_bbreg(hw, 0xe40, BMASKDWORD, 0x10007c00);
|
rtl_set_bbreg(hw, 0xe40, MASKDWORD, 0x10007c00);
|
||||||
rtl_set_bbreg(hw, 0xe44, BMASKDWORD, 0x01004800);
|
rtl_set_bbreg(hw, 0xe44, MASKDWORD, 0x01004800);
|
||||||
patha_ok = _rtl92d_phy_patha_iqk_5g_normal(hw, is2t);
|
patha_ok = _rtl92d_phy_patha_iqk_5g_normal(hw, is2t);
|
||||||
if (patha_ok == 0x03) {
|
if (patha_ok == 0x03) {
|
||||||
RTPRINT(rtlpriv, FINIT, INIT_IQK, "Path A IQK Success!!\n");
|
RTPRINT(rtlpriv, FINIT, INIT_IQK, "Path A IQK Success!!\n");
|
||||||
result[t][0] = (rtl_get_bbreg(hw, 0xe94, BMASKDWORD) &
|
result[t][0] = (rtl_get_bbreg(hw, 0xe94, MASKDWORD) &
|
||||||
0x3FF0000) >> 16;
|
0x3FF0000) >> 16;
|
||||||
result[t][1] = (rtl_get_bbreg(hw, 0xe9c, BMASKDWORD) &
|
result[t][1] = (rtl_get_bbreg(hw, 0xe9c, MASKDWORD) &
|
||||||
0x3FF0000) >> 16;
|
0x3FF0000) >> 16;
|
||||||
result[t][2] = (rtl_get_bbreg(hw, 0xea4, BMASKDWORD) &
|
result[t][2] = (rtl_get_bbreg(hw, 0xea4, MASKDWORD) &
|
||||||
0x3FF0000) >> 16;
|
0x3FF0000) >> 16;
|
||||||
result[t][3] = (rtl_get_bbreg(hw, 0xeac, BMASKDWORD) &
|
result[t][3] = (rtl_get_bbreg(hw, 0xeac, MASKDWORD) &
|
||||||
0x3FF0000) >> 16;
|
0x3FF0000) >> 16;
|
||||||
} else if (patha_ok == 0x01) { /* Tx IQK OK */
|
} else if (patha_ok == 0x01) { /* Tx IQK OK */
|
||||||
RTPRINT(rtlpriv, FINIT, INIT_IQK,
|
RTPRINT(rtlpriv, FINIT, INIT_IQK,
|
||||||
"Path A IQK Only Tx Success!!\n");
|
"Path A IQK Only Tx Success!!\n");
|
||||||
|
|
||||||
result[t][0] = (rtl_get_bbreg(hw, 0xe94, BMASKDWORD) &
|
result[t][0] = (rtl_get_bbreg(hw, 0xe94, MASKDWORD) &
|
||||||
0x3FF0000) >> 16;
|
0x3FF0000) >> 16;
|
||||||
result[t][1] = (rtl_get_bbreg(hw, 0xe9c, BMASKDWORD) &
|
result[t][1] = (rtl_get_bbreg(hw, 0xe9c, MASKDWORD) &
|
||||||
0x3FF0000) >> 16;
|
0x3FF0000) >> 16;
|
||||||
} else {
|
} else {
|
||||||
RTPRINT(rtlpriv, FINIT, INIT_IQK, "Path A IQK Fail!!\n");
|
RTPRINT(rtlpriv, FINIT, INIT_IQK, "Path A IQK Fail!!\n");
|
||||||
|
@ -2116,20 +2057,20 @@ static void _rtl92d_phy_iq_calibrate_5g_normal(struct ieee80211_hw *hw,
|
||||||
if (pathb_ok == 0x03) {
|
if (pathb_ok == 0x03) {
|
||||||
RTPRINT(rtlpriv, FINIT, INIT_IQK,
|
RTPRINT(rtlpriv, FINIT, INIT_IQK,
|
||||||
"Path B IQK Success!!\n");
|
"Path B IQK Success!!\n");
|
||||||
result[t][4] = (rtl_get_bbreg(hw, 0xeb4, BMASKDWORD) &
|
result[t][4] = (rtl_get_bbreg(hw, 0xeb4, MASKDWORD) &
|
||||||
0x3FF0000) >> 16;
|
0x3FF0000) >> 16;
|
||||||
result[t][5] = (rtl_get_bbreg(hw, 0xebc, BMASKDWORD) &
|
result[t][5] = (rtl_get_bbreg(hw, 0xebc, MASKDWORD) &
|
||||||
0x3FF0000) >> 16;
|
0x3FF0000) >> 16;
|
||||||
result[t][6] = (rtl_get_bbreg(hw, 0xec4, BMASKDWORD) &
|
result[t][6] = (rtl_get_bbreg(hw, 0xec4, MASKDWORD) &
|
||||||
0x3FF0000) >> 16;
|
0x3FF0000) >> 16;
|
||||||
result[t][7] = (rtl_get_bbreg(hw, 0xecc, BMASKDWORD) &
|
result[t][7] = (rtl_get_bbreg(hw, 0xecc, MASKDWORD) &
|
||||||
0x3FF0000) >> 16;
|
0x3FF0000) >> 16;
|
||||||
} else if (pathb_ok == 0x01) { /* Tx IQK OK */
|
} else if (pathb_ok == 0x01) { /* Tx IQK OK */
|
||||||
RTPRINT(rtlpriv, FINIT, INIT_IQK,
|
RTPRINT(rtlpriv, FINIT, INIT_IQK,
|
||||||
"Path B Only Tx IQK Success!!\n");
|
"Path B Only Tx IQK Success!!\n");
|
||||||
result[t][4] = (rtl_get_bbreg(hw, 0xeb4, BMASKDWORD) &
|
result[t][4] = (rtl_get_bbreg(hw, 0xeb4, MASKDWORD) &
|
||||||
0x3FF0000) >> 16;
|
0x3FF0000) >> 16;
|
||||||
result[t][5] = (rtl_get_bbreg(hw, 0xebc, BMASKDWORD) &
|
result[t][5] = (rtl_get_bbreg(hw, 0xebc, MASKDWORD) &
|
||||||
0x3FF0000) >> 16;
|
0x3FF0000) >> 16;
|
||||||
} else {
|
} else {
|
||||||
RTPRINT(rtlpriv, FINIT, INIT_IQK,
|
RTPRINT(rtlpriv, FINIT, INIT_IQK,
|
||||||
|
@ -2140,7 +2081,7 @@ static void _rtl92d_phy_iq_calibrate_5g_normal(struct ieee80211_hw *hw,
|
||||||
/* Back to BB mode, load original value */
|
/* Back to BB mode, load original value */
|
||||||
RTPRINT(rtlpriv, FINIT, INIT_IQK,
|
RTPRINT(rtlpriv, FINIT, INIT_IQK,
|
||||||
"IQK:Back to BB mode, load original value!\n");
|
"IQK:Back to BB mode, load original value!\n");
|
||||||
rtl_set_bbreg(hw, 0xe28, BMASKDWORD, 0);
|
rtl_set_bbreg(hw, 0xe28, MASKDWORD, 0);
|
||||||
if (t != 0) {
|
if (t != 0) {
|
||||||
if (is2t)
|
if (is2t)
|
||||||
_rtl92d_phy_reload_adda_registers(hw, iqk_bb_reg,
|
_rtl92d_phy_reload_adda_registers(hw, iqk_bb_reg,
|
||||||
|
@ -2240,7 +2181,7 @@ static void _rtl92d_phy_patha_fill_iqk_matrix(struct ieee80211_hw *hw,
|
||||||
return;
|
return;
|
||||||
} else if (iqk_ok) {
|
} else if (iqk_ok) {
|
||||||
oldval_0 = (rtl_get_bbreg(hw, ROFDM0_XATxIQIMBALANCE,
|
oldval_0 = (rtl_get_bbreg(hw, ROFDM0_XATxIQIMBALANCE,
|
||||||
BMASKDWORD) >> 22) & 0x3FF; /* OFDM0_D */
|
MASKDWORD) >> 22) & 0x3FF; /* OFDM0_D */
|
||||||
val_x = result[final_candidate][0];
|
val_x = result[final_candidate][0];
|
||||||
if ((val_x & 0x00000200) != 0)
|
if ((val_x & 0x00000200) != 0)
|
||||||
val_x = val_x | 0xFFFFFC00;
|
val_x = val_x | 0xFFFFFC00;
|
||||||
|
@ -2271,7 +2212,7 @@ static void _rtl92d_phy_patha_fill_iqk_matrix(struct ieee80211_hw *hw,
|
||||||
((val_y * oldval_0 >> 7) & 0x1));
|
((val_y * oldval_0 >> 7) & 0x1));
|
||||||
RTPRINT(rtlpriv, FINIT, INIT_IQK, "0xC80 = 0x%x\n",
|
RTPRINT(rtlpriv, FINIT, INIT_IQK, "0xC80 = 0x%x\n",
|
||||||
rtl_get_bbreg(hw, ROFDM0_XATxIQIMBALANCE,
|
rtl_get_bbreg(hw, ROFDM0_XATxIQIMBALANCE,
|
||||||
BMASKDWORD));
|
MASKDWORD));
|
||||||
if (txonly) {
|
if (txonly) {
|
||||||
RTPRINT(rtlpriv, FINIT, INIT_IQK, "only Tx OK\n");
|
RTPRINT(rtlpriv, FINIT, INIT_IQK, "only Tx OK\n");
|
||||||
return;
|
return;
|
||||||
|
@ -2299,7 +2240,7 @@ static void _rtl92d_phy_pathb_fill_iqk_matrix(struct ieee80211_hw *hw,
|
||||||
return;
|
return;
|
||||||
} else if (iqk_ok) {
|
} else if (iqk_ok) {
|
||||||
oldval_1 = (rtl_get_bbreg(hw, ROFDM0_XBTxIQIMBALANCE,
|
oldval_1 = (rtl_get_bbreg(hw, ROFDM0_XBTxIQIMBALANCE,
|
||||||
BMASKDWORD) >> 22) & 0x3FF;
|
MASKDWORD) >> 22) & 0x3FF;
|
||||||
val_x = result[final_candidate][4];
|
val_x = result[final_candidate][4];
|
||||||
if ((val_x & 0x00000200) != 0)
|
if ((val_x & 0x00000200) != 0)
|
||||||
val_x = val_x | 0xFFFFFC00;
|
val_x = val_x | 0xFFFFFC00;
|
||||||
|
@ -2657,7 +2598,7 @@ static void _rtl92d_phy_lc_calibrate_sw(struct ieee80211_hw *hw, bool is2t)
|
||||||
rf_mode[index] = rtl_read_byte(rtlpriv, offset);
|
rf_mode[index] = rtl_read_byte(rtlpriv, offset);
|
||||||
/* 2. Set RF mode = standby mode */
|
/* 2. Set RF mode = standby mode */
|
||||||
rtl_set_rfreg(hw, (enum radio_path)index, RF_AC,
|
rtl_set_rfreg(hw, (enum radio_path)index, RF_AC,
|
||||||
BRFREGOFFSETMASK, 0x010000);
|
RFREG_OFFSET_MASK, 0x010000);
|
||||||
if (rtlpci->init_ready) {
|
if (rtlpci->init_ready) {
|
||||||
/* switch CV-curve control by LC-calibration */
|
/* switch CV-curve control by LC-calibration */
|
||||||
rtl_set_rfreg(hw, (enum radio_path)index, RF_SYN_G7,
|
rtl_set_rfreg(hw, (enum radio_path)index, RF_SYN_G7,
|
||||||
|
@ -2667,16 +2608,16 @@ static void _rtl92d_phy_lc_calibrate_sw(struct ieee80211_hw *hw, bool is2t)
|
||||||
0x08000, 0x01);
|
0x08000, 0x01);
|
||||||
}
|
}
|
||||||
u4tmp = rtl_get_rfreg(hw, (enum radio_path)index, RF_SYN_G6,
|
u4tmp = rtl_get_rfreg(hw, (enum radio_path)index, RF_SYN_G6,
|
||||||
BRFREGOFFSETMASK);
|
RFREG_OFFSET_MASK);
|
||||||
while ((!(u4tmp & BIT(11))) && timecount <= timeout) {
|
while ((!(u4tmp & BIT(11))) && timecount <= timeout) {
|
||||||
mdelay(50);
|
mdelay(50);
|
||||||
timecount += 50;
|
timecount += 50;
|
||||||
u4tmp = rtl_get_rfreg(hw, (enum radio_path)index,
|
u4tmp = rtl_get_rfreg(hw, (enum radio_path)index,
|
||||||
RF_SYN_G6, BRFREGOFFSETMASK);
|
RF_SYN_G6, RFREG_OFFSET_MASK);
|
||||||
}
|
}
|
||||||
RTPRINT(rtlpriv, FINIT, INIT_IQK,
|
RTPRINT(rtlpriv, FINIT, INIT_IQK,
|
||||||
"PHY_LCK finish delay for %d ms=2\n", timecount);
|
"PHY_LCK finish delay for %d ms=2\n", timecount);
|
||||||
u4tmp = rtl_get_rfreg(hw, index, RF_SYN_G4, BRFREGOFFSETMASK);
|
u4tmp = rtl_get_rfreg(hw, index, RF_SYN_G4, RFREG_OFFSET_MASK);
|
||||||
if (index == 0 && rtlhal->interfaceindex == 0) {
|
if (index == 0 && rtlhal->interfaceindex == 0) {
|
||||||
RTPRINT(rtlpriv, FINIT, INIT_IQK,
|
RTPRINT(rtlpriv, FINIT, INIT_IQK,
|
||||||
"path-A / 5G LCK\n");
|
"path-A / 5G LCK\n");
|
||||||
|
@ -2696,9 +2637,9 @@ static void _rtl92d_phy_lc_calibrate_sw(struct ieee80211_hw *hw, bool is2t)
|
||||||
0x7f, i);
|
0x7f, i);
|
||||||
|
|
||||||
rtl_set_rfreg(hw, (enum radio_path)index, 0x4D,
|
rtl_set_rfreg(hw, (enum radio_path)index, 0x4D,
|
||||||
BRFREGOFFSETMASK, 0x0);
|
RFREG_OFFSET_MASK, 0x0);
|
||||||
readval = rtl_get_rfreg(hw, (enum radio_path)index,
|
readval = rtl_get_rfreg(hw, (enum radio_path)index,
|
||||||
0x4F, BRFREGOFFSETMASK);
|
0x4F, RFREG_OFFSET_MASK);
|
||||||
curvecount_val[2 * i + 1] = (readval & 0xfffe0) >> 5;
|
curvecount_val[2 * i + 1] = (readval & 0xfffe0) >> 5;
|
||||||
/* reg 0x4f [4:0] */
|
/* reg 0x4f [4:0] */
|
||||||
/* reg 0x50 [19:10] */
|
/* reg 0x50 [19:10] */
|
||||||
|
@ -2912,7 +2853,7 @@ static bool _rtl92d_phy_sw_chnl_step_by_step(struct ieee80211_hw *hw,
|
||||||
}
|
}
|
||||||
rtl_set_rfreg(hw, (enum radio_path)rfpath,
|
rtl_set_rfreg(hw, (enum radio_path)rfpath,
|
||||||
currentcmd->para1,
|
currentcmd->para1,
|
||||||
BRFREGOFFSETMASK,
|
RFREG_OFFSET_MASK,
|
||||||
rtlphy->rfreg_chnlval[rfpath]);
|
rtlphy->rfreg_chnlval[rfpath]);
|
||||||
_rtl92d_phy_reload_imr_setting(hw, channel,
|
_rtl92d_phy_reload_imr_setting(hw, channel,
|
||||||
rfpath);
|
rfpath);
|
||||||
|
@ -2960,7 +2901,7 @@ u8 rtl92d_phy_sw_chnl(struct ieee80211_hw *hw)
|
||||||
if (rtlhal->macphymode == SINGLEMAC_SINGLEPHY &&
|
if (rtlhal->macphymode == SINGLEMAC_SINGLEPHY &&
|
||||||
rtlhal->bandset == BAND_ON_BOTH) {
|
rtlhal->bandset == BAND_ON_BOTH) {
|
||||||
ret_value = rtl_get_bbreg(hw, RFPGA0_XAB_RFPARAMETER,
|
ret_value = rtl_get_bbreg(hw, RFPGA0_XAB_RFPARAMETER,
|
||||||
BMASKDWORD);
|
MASKDWORD);
|
||||||
if (rtlphy->current_channel > 14 && !(ret_value & BIT(0)))
|
if (rtlphy->current_channel > 14 && !(ret_value & BIT(0)))
|
||||||
rtl92d_phy_switch_wirelessband(hw, BAND_ON_5G);
|
rtl92d_phy_switch_wirelessband(hw, BAND_ON_5G);
|
||||||
else if (rtlphy->current_channel <= 14 && (ret_value & BIT(0)))
|
else if (rtlphy->current_channel <= 14 && (ret_value & BIT(0)))
|
||||||
|
@ -3112,7 +3053,7 @@ static void _rtl92d_phy_set_rfsleep(struct ieee80211_hw *hw)
|
||||||
/* a. TXPAUSE 0x522[7:0] = 0xFF Pause MAC TX queue */
|
/* a. TXPAUSE 0x522[7:0] = 0xFF Pause MAC TX queue */
|
||||||
rtl_write_byte(rtlpriv, REG_TXPAUSE, 0xFF);
|
rtl_write_byte(rtlpriv, REG_TXPAUSE, 0xFF);
|
||||||
/* b. RF path 0 offset 0x00 = 0x00 disable RF */
|
/* b. RF path 0 offset 0x00 = 0x00 disable RF */
|
||||||
rtl_set_rfreg(hw, RF90_PATH_A, 0x00, BRFREGOFFSETMASK, 0x00);
|
rtl_set_rfreg(hw, RF90_PATH_A, 0x00, RFREG_OFFSET_MASK, 0x00);
|
||||||
/* c. APSD_CTRL 0x600[7:0] = 0x40 */
|
/* c. APSD_CTRL 0x600[7:0] = 0x40 */
|
||||||
rtl_write_byte(rtlpriv, REG_APSD_CTRL, 0x40);
|
rtl_write_byte(rtlpriv, REG_APSD_CTRL, 0x40);
|
||||||
/* d. APSD_CTRL 0x600[7:0] = 0x00
|
/* d. APSD_CTRL 0x600[7:0] = 0x00
|
||||||
|
@ -3120,12 +3061,12 @@ static void _rtl92d_phy_set_rfsleep(struct ieee80211_hw *hw)
|
||||||
* RF path 0 offset 0x00 = 0x00
|
* RF path 0 offset 0x00 = 0x00
|
||||||
* APSD_CTRL 0x600[7:0] = 0x40
|
* APSD_CTRL 0x600[7:0] = 0x40
|
||||||
* */
|
* */
|
||||||
u4btmp = rtl_get_rfreg(hw, RF90_PATH_A, 0, BRFREGOFFSETMASK);
|
u4btmp = rtl_get_rfreg(hw, RF90_PATH_A, 0, RFREG_OFFSET_MASK);
|
||||||
while (u4btmp != 0 && delay > 0) {
|
while (u4btmp != 0 && delay > 0) {
|
||||||
rtl_write_byte(rtlpriv, REG_APSD_CTRL, 0x0);
|
rtl_write_byte(rtlpriv, REG_APSD_CTRL, 0x0);
|
||||||
rtl_set_rfreg(hw, RF90_PATH_A, 0x00, BRFREGOFFSETMASK, 0x00);
|
rtl_set_rfreg(hw, RF90_PATH_A, 0x00, RFREG_OFFSET_MASK, 0x00);
|
||||||
rtl_write_byte(rtlpriv, REG_APSD_CTRL, 0x40);
|
rtl_write_byte(rtlpriv, REG_APSD_CTRL, 0x40);
|
||||||
u4btmp = rtl_get_rfreg(hw, RF90_PATH_A, 0, BRFREGOFFSETMASK);
|
u4btmp = rtl_get_rfreg(hw, RF90_PATH_A, 0, RFREG_OFFSET_MASK);
|
||||||
delay--;
|
delay--;
|
||||||
}
|
}
|
||||||
if (delay == 0) {
|
if (delay == 0) {
|
||||||
|
@ -3468,9 +3409,9 @@ void rtl92d_update_bbrf_configuration(struct ieee80211_hw *hw)
|
||||||
/* 5G LAN ON */
|
/* 5G LAN ON */
|
||||||
rtl_set_bbreg(hw, 0xB30, 0x00F00000, 0xa);
|
rtl_set_bbreg(hw, 0xB30, 0x00F00000, 0xa);
|
||||||
/* TX BB gain shift*1,Just for testchip,0xc80,0xc88 */
|
/* TX BB gain shift*1,Just for testchip,0xc80,0xc88 */
|
||||||
rtl_set_bbreg(hw, ROFDM0_XATxIQIMBALANCE, BMASKDWORD,
|
rtl_set_bbreg(hw, ROFDM0_XATxIQIMBALANCE, MASKDWORD,
|
||||||
0x40000100);
|
0x40000100);
|
||||||
rtl_set_bbreg(hw, ROFDM0_XBTxIQIMBALANCE, BMASKDWORD,
|
rtl_set_bbreg(hw, ROFDM0_XBTxIQIMBALANCE, MASKDWORD,
|
||||||
0x40000100);
|
0x40000100);
|
||||||
if (rtlhal->macphymode == DUALMAC_DUALPHY) {
|
if (rtlhal->macphymode == DUALMAC_DUALPHY) {
|
||||||
rtl_set_bbreg(hw, RFPGA0_XAB_RFINTERFACESW,
|
rtl_set_bbreg(hw, RFPGA0_XAB_RFINTERFACESW,
|
||||||
|
@ -3524,16 +3465,16 @@ void rtl92d_update_bbrf_configuration(struct ieee80211_hw *hw)
|
||||||
rtl_set_bbreg(hw, 0xB30, 0x00F00000, 0x0);
|
rtl_set_bbreg(hw, 0xB30, 0x00F00000, 0x0);
|
||||||
/* TX BB gain shift,Just for testchip,0xc80,0xc88 */
|
/* TX BB gain shift,Just for testchip,0xc80,0xc88 */
|
||||||
if (rtlefuse->internal_pa_5g[0])
|
if (rtlefuse->internal_pa_5g[0])
|
||||||
rtl_set_bbreg(hw, ROFDM0_XATxIQIMBALANCE, BMASKDWORD,
|
rtl_set_bbreg(hw, ROFDM0_XATxIQIMBALANCE, MASKDWORD,
|
||||||
0x2d4000b5);
|
0x2d4000b5);
|
||||||
else
|
else
|
||||||
rtl_set_bbreg(hw, ROFDM0_XATxIQIMBALANCE, BMASKDWORD,
|
rtl_set_bbreg(hw, ROFDM0_XATxIQIMBALANCE, MASKDWORD,
|
||||||
0x20000080);
|
0x20000080);
|
||||||
if (rtlefuse->internal_pa_5g[1])
|
if (rtlefuse->internal_pa_5g[1])
|
||||||
rtl_set_bbreg(hw, ROFDM0_XBTxIQIMBALANCE, BMASKDWORD,
|
rtl_set_bbreg(hw, ROFDM0_XBTxIQIMBALANCE, MASKDWORD,
|
||||||
0x2d4000b5);
|
0x2d4000b5);
|
||||||
else
|
else
|
||||||
rtl_set_bbreg(hw, ROFDM0_XBTxIQIMBALANCE, BMASKDWORD,
|
rtl_set_bbreg(hw, ROFDM0_XBTxIQIMBALANCE, MASKDWORD,
|
||||||
0x20000080);
|
0x20000080);
|
||||||
if (rtlhal->macphymode == DUALMAC_DUALPHY) {
|
if (rtlhal->macphymode == DUALMAC_DUALPHY) {
|
||||||
rtl_set_bbreg(hw, RFPGA0_XAB_RFINTERFACESW,
|
rtl_set_bbreg(hw, RFPGA0_XAB_RFINTERFACESW,
|
||||||
|
@ -3560,8 +3501,8 @@ void rtl92d_update_bbrf_configuration(struct ieee80211_hw *hw)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* update IQK related settings */
|
/* update IQK related settings */
|
||||||
rtl_set_bbreg(hw, ROFDM0_XARXIQIMBALANCE, BMASKDWORD, 0x40000100);
|
rtl_set_bbreg(hw, ROFDM0_XARXIQIMBALANCE, MASKDWORD, 0x40000100);
|
||||||
rtl_set_bbreg(hw, ROFDM0_XBRXIQIMBALANCE, BMASKDWORD, 0x40000100);
|
rtl_set_bbreg(hw, ROFDM0_XBRXIQIMBALANCE, MASKDWORD, 0x40000100);
|
||||||
rtl_set_bbreg(hw, ROFDM0_XCTxAFE, 0xF0000000, 0x00);
|
rtl_set_bbreg(hw, ROFDM0_XCTxAFE, 0xF0000000, 0x00);
|
||||||
rtl_set_bbreg(hw, ROFDM0_ECCATHRESHOLD, BIT(30) | BIT(28) |
|
rtl_set_bbreg(hw, ROFDM0_ECCATHRESHOLD, BIT(30) | BIT(28) |
|
||||||
BIT(26) | BIT(24), 0x00);
|
BIT(26) | BIT(24), 0x00);
|
||||||
|
@ -3590,7 +3531,7 @@ void rtl92d_update_bbrf_configuration(struct ieee80211_hw *hw)
|
||||||
/* DMDP */
|
/* DMDP */
|
||||||
if (rtlphy->rf_type == RF_1T1R) {
|
if (rtlphy->rf_type == RF_1T1R) {
|
||||||
/* Use antenna 0,0xc04,0xd04 */
|
/* Use antenna 0,0xc04,0xd04 */
|
||||||
rtl_set_bbreg(hw, ROFDM0_TRXPATHENABLE, BMASKBYTE0, 0x11);
|
rtl_set_bbreg(hw, ROFDM0_TRXPATHENABLE, MASKBYTE0, 0x11);
|
||||||
rtl_set_bbreg(hw, ROFDM1_TRXPATHENABLE, BDWORD, 0x1);
|
rtl_set_bbreg(hw, ROFDM1_TRXPATHENABLE, BDWORD, 0x1);
|
||||||
|
|
||||||
/* enable ad/da clock1 for dual-phy reg0x888 */
|
/* enable ad/da clock1 for dual-phy reg0x888 */
|
||||||
|
@ -3612,7 +3553,7 @@ void rtl92d_update_bbrf_configuration(struct ieee80211_hw *hw)
|
||||||
} else {
|
} else {
|
||||||
/* Single PHY */
|
/* Single PHY */
|
||||||
/* Use antenna 0 & 1,0xc04,0xd04 */
|
/* Use antenna 0 & 1,0xc04,0xd04 */
|
||||||
rtl_set_bbreg(hw, ROFDM0_TRXPATHENABLE, BMASKBYTE0, 0x33);
|
rtl_set_bbreg(hw, ROFDM0_TRXPATHENABLE, MASKBYTE0, 0x33);
|
||||||
rtl_set_bbreg(hw, ROFDM1_TRXPATHENABLE, BDWORD, 0x3);
|
rtl_set_bbreg(hw, ROFDM1_TRXPATHENABLE, BDWORD, 0x3);
|
||||||
/* disable ad/da clock1,0x888 */
|
/* disable ad/da clock1,0x888 */
|
||||||
rtl_set_bbreg(hw, RFPGA0_ADDALLOCKEN, BIT(12) | BIT(13), 0);
|
rtl_set_bbreg(hw, RFPGA0_ADDALLOCKEN, BIT(12) | BIT(13), 0);
|
||||||
|
@ -3620,9 +3561,9 @@ void rtl92d_update_bbrf_configuration(struct ieee80211_hw *hw)
|
||||||
for (rfpath = RF90_PATH_A; rfpath < rtlphy->num_total_rfpath;
|
for (rfpath = RF90_PATH_A; rfpath < rtlphy->num_total_rfpath;
|
||||||
rfpath++) {
|
rfpath++) {
|
||||||
rtlphy->rfreg_chnlval[rfpath] = rtl_get_rfreg(hw, rfpath,
|
rtlphy->rfreg_chnlval[rfpath] = rtl_get_rfreg(hw, rfpath,
|
||||||
RF_CHNLBW, BRFREGOFFSETMASK);
|
RF_CHNLBW, RFREG_OFFSET_MASK);
|
||||||
rtlphy->reg_rf3c[rfpath] = rtl_get_rfreg(hw, rfpath, 0x3C,
|
rtlphy->reg_rf3c[rfpath] = rtl_get_rfreg(hw, rfpath, 0x3C,
|
||||||
BRFREGOFFSETMASK);
|
RFREG_OFFSET_MASK);
|
||||||
}
|
}
|
||||||
for (i = 0; i < 2; i++)
|
for (i = 0; i < 2; i++)
|
||||||
RT_TRACE(rtlpriv, COMP_RF, DBG_LOUD, "RF 0x18 = 0x%x\n",
|
RT_TRACE(rtlpriv, COMP_RF, DBG_LOUD, "RF 0x18 = 0x%x\n",
|
||||||
|
|
|
@ -1295,18 +1295,4 @@
|
||||||
#define BWORD1 0xc
|
#define BWORD1 0xc
|
||||||
#define BDWORD 0xf
|
#define BDWORD 0xf
|
||||||
|
|
||||||
#define BMASKBYTE0 0xff
|
|
||||||
#define BMASKBYTE1 0xff00
|
|
||||||
#define BMASKBYTE2 0xff0000
|
|
||||||
#define BMASKBYTE3 0xff000000
|
|
||||||
#define BMASKHWORD 0xffff0000
|
|
||||||
#define BMASKLWORD 0x0000ffff
|
|
||||||
#define BMASKDWORD 0xffffffff
|
|
||||||
#define BMASK12BITS 0xfff
|
|
||||||
#define BMASKH4BITS 0xf0000000
|
|
||||||
#define BMASKOFDM_D 0xffc00000
|
|
||||||
#define BMASKCCK 0x3f3f3f3f
|
|
||||||
|
|
||||||
#define BRFREGOFFSETMASK 0xfffff
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -125,7 +125,7 @@ void rtl92d_phy_rf6052_set_cck_txpower(struct ieee80211_hw *hw,
|
||||||
}
|
}
|
||||||
|
|
||||||
tmpval = tx_agc[RF90_PATH_A] & 0xff;
|
tmpval = tx_agc[RF90_PATH_A] & 0xff;
|
||||||
rtl_set_bbreg(hw, RTXAGC_A_CCK1_MCS32, BMASKBYTE1, tmpval);
|
rtl_set_bbreg(hw, RTXAGC_A_CCK1_MCS32, MASKBYTE1, tmpval);
|
||||||
RTPRINT(rtlpriv, FPHY, PHY_TXPWR,
|
RTPRINT(rtlpriv, FPHY, PHY_TXPWR,
|
||||||
"CCK PWR 1M (rf-A) = 0x%x (reg 0x%x)\n",
|
"CCK PWR 1M (rf-A) = 0x%x (reg 0x%x)\n",
|
||||||
tmpval, RTXAGC_A_CCK1_MCS32);
|
tmpval, RTXAGC_A_CCK1_MCS32);
|
||||||
|
@ -135,7 +135,7 @@ void rtl92d_phy_rf6052_set_cck_txpower(struct ieee80211_hw *hw,
|
||||||
"CCK PWR 2~11M (rf-A) = 0x%x (reg 0x%x)\n",
|
"CCK PWR 2~11M (rf-A) = 0x%x (reg 0x%x)\n",
|
||||||
tmpval, RTXAGC_B_CCK11_A_CCK2_11);
|
tmpval, RTXAGC_B_CCK11_A_CCK2_11);
|
||||||
tmpval = tx_agc[RF90_PATH_B] >> 24;
|
tmpval = tx_agc[RF90_PATH_B] >> 24;
|
||||||
rtl_set_bbreg(hw, RTXAGC_B_CCK11_A_CCK2_11, BMASKBYTE0, tmpval);
|
rtl_set_bbreg(hw, RTXAGC_B_CCK11_A_CCK2_11, MASKBYTE0, tmpval);
|
||||||
RTPRINT(rtlpriv, FPHY, PHY_TXPWR,
|
RTPRINT(rtlpriv, FPHY, PHY_TXPWR,
|
||||||
"CCK PWR 11M (rf-B) = 0x%x (reg 0x%x)\n",
|
"CCK PWR 11M (rf-B) = 0x%x (reg 0x%x)\n",
|
||||||
tmpval, RTXAGC_B_CCK11_A_CCK2_11);
|
tmpval, RTXAGC_B_CCK11_A_CCK2_11);
|
||||||
|
@ -360,7 +360,7 @@ static void _rtl92d_write_ofdm_power_reg(struct ieee80211_hw *hw,
|
||||||
regoffset = regoffset_a[index];
|
regoffset = regoffset_a[index];
|
||||||
else
|
else
|
||||||
regoffset = regoffset_b[index];
|
regoffset = regoffset_b[index];
|
||||||
rtl_set_bbreg(hw, regoffset, BMASKDWORD, writeval);
|
rtl_set_bbreg(hw, regoffset, MASKDWORD, writeval);
|
||||||
RTPRINT(rtlpriv, FPHY, PHY_TXPWR,
|
RTPRINT(rtlpriv, FPHY, PHY_TXPWR,
|
||||||
"Set 0x%x = %08x\n", regoffset, writeval);
|
"Set 0x%x = %08x\n", regoffset, writeval);
|
||||||
if (((get_rf_type(rtlphy) == RF_2T2R) &&
|
if (((get_rf_type(rtlphy) == RF_2T2R) &&
|
||||||
|
|
|
@ -30,6 +30,7 @@
|
||||||
#include "../wifi.h"
|
#include "../wifi.h"
|
||||||
#include "../pci.h"
|
#include "../pci.h"
|
||||||
#include "../ps.h"
|
#include "../ps.h"
|
||||||
|
#include "../core.h"
|
||||||
#include "reg.h"
|
#include "reg.h"
|
||||||
#include "def.h"
|
#include "def.h"
|
||||||
#include "phy.h"
|
#include "phy.h"
|
||||||
|
@ -833,18 +834,7 @@ static bool _rtl92s_phy_config_bb(struct ieee80211_hw *hw, u8 configtype)
|
||||||
|
|
||||||
if (configtype == BASEBAND_CONFIG_PHY_REG) {
|
if (configtype == BASEBAND_CONFIG_PHY_REG) {
|
||||||
for (i = 0; i < phy_reg_len; i = i + 2) {
|
for (i = 0; i < phy_reg_len; i = i + 2) {
|
||||||
if (phy_reg_table[i] == 0xfe)
|
rtl_addr_delay(phy_reg_table[i]);
|
||||||
mdelay(50);
|
|
||||||
else if (phy_reg_table[i] == 0xfd)
|
|
||||||
mdelay(5);
|
|
||||||
else if (phy_reg_table[i] == 0xfc)
|
|
||||||
mdelay(1);
|
|
||||||
else if (phy_reg_table[i] == 0xfb)
|
|
||||||
udelay(50);
|
|
||||||
else if (phy_reg_table[i] == 0xfa)
|
|
||||||
udelay(5);
|
|
||||||
else if (phy_reg_table[i] == 0xf9)
|
|
||||||
udelay(1);
|
|
||||||
|
|
||||||
/* Add delay for ECS T20 & LG malow platform, */
|
/* Add delay for ECS T20 & LG malow platform, */
|
||||||
udelay(1);
|
udelay(1);
|
||||||
|
@ -886,18 +876,7 @@ static bool _rtl92s_phy_set_bb_to_diff_rf(struct ieee80211_hw *hw,
|
||||||
|
|
||||||
if (configtype == BASEBAND_CONFIG_PHY_REG) {
|
if (configtype == BASEBAND_CONFIG_PHY_REG) {
|
||||||
for (i = 0; i < phy_regarray2xtxr_len; i = i + 3) {
|
for (i = 0; i < phy_regarray2xtxr_len; i = i + 3) {
|
||||||
if (phy_regarray2xtxr_table[i] == 0xfe)
|
rtl_addr_delay(phy_regarray2xtxr_table[i]);
|
||||||
mdelay(50);
|
|
||||||
else if (phy_regarray2xtxr_table[i] == 0xfd)
|
|
||||||
mdelay(5);
|
|
||||||
else if (phy_regarray2xtxr_table[i] == 0xfc)
|
|
||||||
mdelay(1);
|
|
||||||
else if (phy_regarray2xtxr_table[i] == 0xfb)
|
|
||||||
udelay(50);
|
|
||||||
else if (phy_regarray2xtxr_table[i] == 0xfa)
|
|
||||||
udelay(5);
|
|
||||||
else if (phy_regarray2xtxr_table[i] == 0xf9)
|
|
||||||
udelay(1);
|
|
||||||
|
|
||||||
rtl92s_phy_set_bb_reg(hw, phy_regarray2xtxr_table[i],
|
rtl92s_phy_set_bb_reg(hw, phy_regarray2xtxr_table[i],
|
||||||
phy_regarray2xtxr_table[i + 1],
|
phy_regarray2xtxr_table[i + 1],
|
||||||
|
@ -920,18 +899,7 @@ static bool _rtl92s_phy_config_bb_with_pg(struct ieee80211_hw *hw,
|
||||||
|
|
||||||
if (configtype == BASEBAND_CONFIG_PHY_REG) {
|
if (configtype == BASEBAND_CONFIG_PHY_REG) {
|
||||||
for (i = 0; i < phy_pg_len; i = i + 3) {
|
for (i = 0; i < phy_pg_len; i = i + 3) {
|
||||||
if (phy_table_pg[i] == 0xfe)
|
rtl_addr_delay(phy_table_pg[i]);
|
||||||
mdelay(50);
|
|
||||||
else if (phy_table_pg[i] == 0xfd)
|
|
||||||
mdelay(5);
|
|
||||||
else if (phy_table_pg[i] == 0xfc)
|
|
||||||
mdelay(1);
|
|
||||||
else if (phy_table_pg[i] == 0xfb)
|
|
||||||
udelay(50);
|
|
||||||
else if (phy_table_pg[i] == 0xfa)
|
|
||||||
udelay(5);
|
|
||||||
else if (phy_table_pg[i] == 0xf9)
|
|
||||||
udelay(1);
|
|
||||||
|
|
||||||
_rtl92s_store_pwrindex_diffrate_offset(hw,
|
_rtl92s_store_pwrindex_diffrate_offset(hw,
|
||||||
phy_table_pg[i],
|
phy_table_pg[i],
|
||||||
|
@ -1034,28 +1002,9 @@ u8 rtl92s_phy_config_rf(struct ieee80211_hw *hw, enum radio_path rfpath)
|
||||||
switch (rfpath) {
|
switch (rfpath) {
|
||||||
case RF90_PATH_A:
|
case RF90_PATH_A:
|
||||||
for (i = 0; i < radio_a_tblen; i = i + 2) {
|
for (i = 0; i < radio_a_tblen; i = i + 2) {
|
||||||
if (radio_a_table[i] == 0xfe)
|
rtl_rfreg_delay(hw, rfpath, radio_a_table[i],
|
||||||
/* Delay specific ms. Only RF configuration
|
MASK20BITS, radio_a_table[i + 1]);
|
||||||
* requires delay. */
|
|
||||||
mdelay(50);
|
|
||||||
else if (radio_a_table[i] == 0xfd)
|
|
||||||
mdelay(5);
|
|
||||||
else if (radio_a_table[i] == 0xfc)
|
|
||||||
mdelay(1);
|
|
||||||
else if (radio_a_table[i] == 0xfb)
|
|
||||||
udelay(50);
|
|
||||||
else if (radio_a_table[i] == 0xfa)
|
|
||||||
udelay(5);
|
|
||||||
else if (radio_a_table[i] == 0xf9)
|
|
||||||
udelay(1);
|
|
||||||
else
|
|
||||||
rtl92s_phy_set_rf_reg(hw, rfpath,
|
|
||||||
radio_a_table[i],
|
|
||||||
MASK20BITS,
|
|
||||||
radio_a_table[i + 1]);
|
|
||||||
|
|
||||||
/* Add delay for ECS T20 & LG malow platform */
|
|
||||||
udelay(1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* PA Bias current for inferiority IC */
|
/* PA Bias current for inferiority IC */
|
||||||
|
@ -1063,28 +1012,8 @@ u8 rtl92s_phy_config_rf(struct ieee80211_hw *hw, enum radio_path rfpath)
|
||||||
break;
|
break;
|
||||||
case RF90_PATH_B:
|
case RF90_PATH_B:
|
||||||
for (i = 0; i < radio_b_tblen; i = i + 2) {
|
for (i = 0; i < radio_b_tblen; i = i + 2) {
|
||||||
if (radio_b_table[i] == 0xfe)
|
rtl_rfreg_delay(hw, rfpath, radio_b_table[i],
|
||||||
/* Delay specific ms. Only RF configuration
|
MASK20BITS, radio_b_table[i + 1]);
|
||||||
* requires delay.*/
|
|
||||||
mdelay(50);
|
|
||||||
else if (radio_b_table[i] == 0xfd)
|
|
||||||
mdelay(5);
|
|
||||||
else if (radio_b_table[i] == 0xfc)
|
|
||||||
mdelay(1);
|
|
||||||
else if (radio_b_table[i] == 0xfb)
|
|
||||||
udelay(50);
|
|
||||||
else if (radio_b_table[i] == 0xfa)
|
|
||||||
udelay(5);
|
|
||||||
else if (radio_b_table[i] == 0xf9)
|
|
||||||
udelay(1);
|
|
||||||
else
|
|
||||||
rtl92s_phy_set_rf_reg(hw, rfpath,
|
|
||||||
radio_b_table[i],
|
|
||||||
MASK20BITS,
|
|
||||||
radio_b_table[i + 1]);
|
|
||||||
|
|
||||||
/* Add delay for ECS T20 & LG malow platform */
|
|
||||||
udelay(1);
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case RF90_PATH_C:
|
case RF90_PATH_C:
|
||||||
|
|
|
@ -1165,16 +1165,4 @@
|
||||||
|
|
||||||
#define BTX_AGCRATECCK 0x7f00
|
#define BTX_AGCRATECCK 0x7f00
|
||||||
|
|
||||||
#define MASKBYTE0 0xff
|
|
||||||
#define MASKBYTE1 0xff00
|
|
||||||
#define MASKBYTE2 0xff0000
|
|
||||||
#define MASKBYTE3 0xff000000
|
|
||||||
#define MASKHWORD 0xffff0000
|
|
||||||
#define MASKLWORD 0x0000ffff
|
|
||||||
#define MASKDWORD 0xffffffff
|
|
||||||
|
|
||||||
#define MAKS12BITS 0xfffff
|
|
||||||
#define MASK20BITS 0xfffff
|
|
||||||
#define RFREG_OFFSET_MASK 0xfffff
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -10,7 +10,6 @@ rtl8723ae-objs := \
|
||||||
led.o \
|
led.o \
|
||||||
phy.o \
|
phy.o \
|
||||||
pwrseq.o \
|
pwrseq.o \
|
||||||
pwrseqcmd.o \
|
|
||||||
rf.o \
|
rf.o \
|
||||||
sw.o \
|
sw.o \
|
||||||
table.o \
|
table.o \
|
||||||
|
|
|
@ -43,7 +43,6 @@
|
||||||
#include "../rtl8723com/fw_common.h"
|
#include "../rtl8723com/fw_common.h"
|
||||||
#include "led.h"
|
#include "led.h"
|
||||||
#include "hw.h"
|
#include "hw.h"
|
||||||
#include "pwrseqcmd.h"
|
|
||||||
#include "pwrseq.h"
|
#include "pwrseq.h"
|
||||||
#include "btc.h"
|
#include "btc.h"
|
||||||
|
|
||||||
|
|
|
@ -30,6 +30,7 @@
|
||||||
#include "../wifi.h"
|
#include "../wifi.h"
|
||||||
#include "../pci.h"
|
#include "../pci.h"
|
||||||
#include "../ps.h"
|
#include "../ps.h"
|
||||||
|
#include "../core.h"
|
||||||
#include "reg.h"
|
#include "reg.h"
|
||||||
#include "def.h"
|
#include "def.h"
|
||||||
#include "phy.h"
|
#include "phy.h"
|
||||||
|
@ -277,18 +278,7 @@ static bool _phy_cfg_bb_w_header(struct ieee80211_hw *hw, u8 configtype)
|
||||||
phy_regarray_table = RTL8723EPHY_REG_1TARRAY;
|
phy_regarray_table = RTL8723EPHY_REG_1TARRAY;
|
||||||
if (configtype == BASEBAND_CONFIG_PHY_REG) {
|
if (configtype == BASEBAND_CONFIG_PHY_REG) {
|
||||||
for (i = 0; i < phy_reg_arraylen; i = i + 2) {
|
for (i = 0; i < phy_reg_arraylen; i = i + 2) {
|
||||||
if (phy_regarray_table[i] == 0xfe)
|
rtl_addr_delay(phy_regarray_table[i]);
|
||||||
mdelay(50);
|
|
||||||
else if (phy_regarray_table[i] == 0xfd)
|
|
||||||
mdelay(5);
|
|
||||||
else if (phy_regarray_table[i] == 0xfc)
|
|
||||||
mdelay(1);
|
|
||||||
else if (phy_regarray_table[i] == 0xfb)
|
|
||||||
udelay(50);
|
|
||||||
else if (phy_regarray_table[i] == 0xfa)
|
|
||||||
udelay(5);
|
|
||||||
else if (phy_regarray_table[i] == 0xf9)
|
|
||||||
udelay(1);
|
|
||||||
rtl_set_bbreg(hw, phy_regarray_table[i], MASKDWORD,
|
rtl_set_bbreg(hw, phy_regarray_table[i], MASKDWORD,
|
||||||
phy_regarray_table[i + 1]);
|
phy_regarray_table[i + 1]);
|
||||||
udelay(1);
|
udelay(1);
|
||||||
|
@ -450,18 +440,7 @@ static bool _phy_cfg_bb_w_pgheader(struct ieee80211_hw *hw, u8 configtype)
|
||||||
|
|
||||||
if (configtype == BASEBAND_CONFIG_PHY_REG) {
|
if (configtype == BASEBAND_CONFIG_PHY_REG) {
|
||||||
for (i = 0; i < phy_regarray_pg_len; i = i + 3) {
|
for (i = 0; i < phy_regarray_pg_len; i = i + 3) {
|
||||||
if (phy_regarray_table_pg[i] == 0xfe)
|
rtl_addr_delay(phy_regarray_table_pg[i]);
|
||||||
mdelay(50);
|
|
||||||
else if (phy_regarray_table_pg[i] == 0xfd)
|
|
||||||
mdelay(5);
|
|
||||||
else if (phy_regarray_table_pg[i] == 0xfc)
|
|
||||||
mdelay(1);
|
|
||||||
else if (phy_regarray_table_pg[i] == 0xfb)
|
|
||||||
udelay(50);
|
|
||||||
else if (phy_regarray_table_pg[i] == 0xfa)
|
|
||||||
udelay(5);
|
|
||||||
else if (phy_regarray_table_pg[i] == 0xf9)
|
|
||||||
udelay(1);
|
|
||||||
|
|
||||||
_st_pwrIdx_dfrate_off(hw, phy_regarray_table_pg[i],
|
_st_pwrIdx_dfrate_off(hw, phy_regarray_table_pg[i],
|
||||||
phy_regarray_table_pg[i + 1],
|
phy_regarray_table_pg[i + 1],
|
||||||
|
@ -488,24 +467,9 @@ bool rtl8723ae_phy_config_rf_with_headerfile(struct ieee80211_hw *hw,
|
||||||
switch (rfpath) {
|
switch (rfpath) {
|
||||||
case RF90_PATH_A:
|
case RF90_PATH_A:
|
||||||
for (i = 0; i < radioa_arraylen; i = i + 2) {
|
for (i = 0; i < radioa_arraylen; i = i + 2) {
|
||||||
if (radioa_array_table[i] == 0xfe)
|
rtl_rfreg_delay(hw, rfpath, radioa_array_table[i],
|
||||||
mdelay(50);
|
RFREG_OFFSET_MASK,
|
||||||
else if (radioa_array_table[i] == 0xfd)
|
radioa_array_table[i + 1]);
|
||||||
mdelay(5);
|
|
||||||
else if (radioa_array_table[i] == 0xfc)
|
|
||||||
mdelay(1);
|
|
||||||
else if (radioa_array_table[i] == 0xfb)
|
|
||||||
udelay(50);
|
|
||||||
else if (radioa_array_table[i] == 0xfa)
|
|
||||||
udelay(5);
|
|
||||||
else if (radioa_array_table[i] == 0xf9)
|
|
||||||
udelay(1);
|
|
||||||
else {
|
|
||||||
rtl_set_rfreg(hw, rfpath, radioa_array_table[i],
|
|
||||||
RFREG_OFFSET_MASK,
|
|
||||||
radioa_array_table[i + 1]);
|
|
||||||
udelay(1);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case RF90_PATH_B:
|
case RF90_PATH_B:
|
||||||
|
|
|
@ -30,7 +30,6 @@
|
||||||
#ifndef __RTL8723E_PWRSEQ_H__
|
#ifndef __RTL8723E_PWRSEQ_H__
|
||||||
#define __RTL8723E_PWRSEQ_H__
|
#define __RTL8723E_PWRSEQ_H__
|
||||||
|
|
||||||
#include "pwrseqcmd.h"
|
|
||||||
/*
|
/*
|
||||||
Check document WM-20110607-Paul-RTL8723A_Power_Architecture-R02.vsd
|
Check document WM-20110607-Paul-RTL8723A_Power_Architecture-R02.vsd
|
||||||
There are 6 HW Power States:
|
There are 6 HW Power States:
|
||||||
|
|
|
@ -2059,22 +2059,6 @@
|
||||||
#define BWORD1 0xc
|
#define BWORD1 0xc
|
||||||
#define BWORD 0xf
|
#define BWORD 0xf
|
||||||
|
|
||||||
#define MASKBYTE0 0xff
|
|
||||||
#define MASKBYTE1 0xff00
|
|
||||||
#define MASKBYTE2 0xff0000
|
|
||||||
#define MASKBYTE3 0xff000000
|
|
||||||
#define MASKHWORD 0xffff0000
|
|
||||||
#define MASKLWORD 0x0000ffff
|
|
||||||
#define MASKDWORD 0xffffffff
|
|
||||||
#define MASK12BITS 0xfff
|
|
||||||
#define MASKH4BITS 0xf0000000
|
|
||||||
#define MASKOFDM_D 0xffc00000
|
|
||||||
#define MASKCCK 0x3f3f3f3f
|
|
||||||
|
|
||||||
#define MASK4BITS 0x0f
|
|
||||||
#define MASK20BITS 0xfffff
|
|
||||||
#define RFREG_OFFSET_MASK 0xfffff
|
|
||||||
|
|
||||||
#define BENABLE 0x1
|
#define BENABLE 0x1
|
||||||
#define BDISABLE 0x0
|
#define BDISABLE 0x0
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,6 @@ rtl8723be-objs := \
|
||||||
led.o \
|
led.o \
|
||||||
phy.o \
|
phy.o \
|
||||||
pwrseq.o \
|
pwrseq.o \
|
||||||
pwrseqcmd.o \
|
|
||||||
rf.o \
|
rf.o \
|
||||||
sw.o \
|
sw.o \
|
||||||
table.o \
|
table.o \
|
||||||
|
|
|
@ -39,7 +39,6 @@
|
||||||
#include "../rtl8723com/fw_common.h"
|
#include "../rtl8723com/fw_common.h"
|
||||||
#include "led.h"
|
#include "led.h"
|
||||||
#include "hw.h"
|
#include "hw.h"
|
||||||
#include "pwrseqcmd.h"
|
|
||||||
#include "pwrseq.h"
|
#include "pwrseq.h"
|
||||||
#include "../btcoexist/rtl_btc.h"
|
#include "../btcoexist/rtl_btc.h"
|
||||||
|
|
||||||
|
@ -818,9 +817,9 @@ static bool _rtl8723be_init_mac(struct ieee80211_hw *hw)
|
||||||
mac_func_enable = false;
|
mac_func_enable = false;
|
||||||
|
|
||||||
/* HW Power on sequence */
|
/* HW Power on sequence */
|
||||||
if (!rtlbe_hal_pwrseqcmdparsing(rtlpriv, PWR_CUT_ALL_MSK,
|
if (!rtl_hal_pwrseqcmdparsing(rtlpriv, PWR_CUT_ALL_MSK,
|
||||||
PWR_FAB_ALL_MSK, PWR_INTF_PCI_MSK,
|
PWR_FAB_ALL_MSK, PWR_INTF_PCI_MSK,
|
||||||
RTL8723_NIC_ENABLE_FLOW)) {
|
RTL8723_NIC_ENABLE_FLOW)) {
|
||||||
RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD,
|
RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD,
|
||||||
"init MAC Fail as power on failure\n");
|
"init MAC Fail as power on failure\n");
|
||||||
return false;
|
return false;
|
||||||
|
@ -1309,8 +1308,8 @@ static void _rtl8723be_poweroff_adapter(struct ieee80211_hw *hw)
|
||||||
|
|
||||||
/* Combo (PCIe + USB) Card and PCIe-MF Card */
|
/* Combo (PCIe + USB) Card and PCIe-MF Card */
|
||||||
/* 1. Run LPS WL RFOFF flow */
|
/* 1. Run LPS WL RFOFF flow */
|
||||||
rtlbe_hal_pwrseqcmdparsing(rtlpriv, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK,
|
rtl_hal_pwrseqcmdparsing(rtlpriv, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK,
|
||||||
PWR_INTF_PCI_MSK, RTL8723_NIC_LPS_ENTER_FLOW);
|
PWR_INTF_PCI_MSK, RTL8723_NIC_LPS_ENTER_FLOW);
|
||||||
|
|
||||||
/* 2. 0x1F[7:0] = 0 */
|
/* 2. 0x1F[7:0] = 0 */
|
||||||
/* turn off RF */
|
/* turn off RF */
|
||||||
|
@ -1328,8 +1327,8 @@ static void _rtl8723be_poweroff_adapter(struct ieee80211_hw *hw)
|
||||||
rtl_write_byte(rtlpriv, REG_MCUFWDL, 0x00);
|
rtl_write_byte(rtlpriv, REG_MCUFWDL, 0x00);
|
||||||
|
|
||||||
/* HW card disable configuration. */
|
/* HW card disable configuration. */
|
||||||
rtlbe_hal_pwrseqcmdparsing(rtlpriv, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK,
|
rtl_hal_pwrseqcmdparsing(rtlpriv, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK,
|
||||||
PWR_INTF_PCI_MSK, RTL8723_NIC_DISABLE_FLOW);
|
PWR_INTF_PCI_MSK, RTL8723_NIC_DISABLE_FLOW);
|
||||||
|
|
||||||
/* Reset MCU IO Wrapper */
|
/* Reset MCU IO Wrapper */
|
||||||
u1b_tmp = rtl_read_byte(rtlpriv, REG_RSV_CTRL + 1);
|
u1b_tmp = rtl_read_byte(rtlpriv, REG_RSV_CTRL + 1);
|
||||||
|
|
|
@ -26,6 +26,7 @@
|
||||||
#include "../wifi.h"
|
#include "../wifi.h"
|
||||||
#include "../pci.h"
|
#include "../pci.h"
|
||||||
#include "../ps.h"
|
#include "../ps.h"
|
||||||
|
#include "../core.h"
|
||||||
#include "reg.h"
|
#include "reg.h"
|
||||||
#include "def.h"
|
#include "def.h"
|
||||||
#include "phy.h"
|
#include "phy.h"
|
||||||
|
@ -41,9 +42,6 @@ static bool _rtl8723be_phy_config_bb_with_pgheaderfile(struct ieee80211_hw *hw,
|
||||||
static bool rtl8723be_phy_sw_chn_step_by_step(struct ieee80211_hw *hw,
|
static bool rtl8723be_phy_sw_chn_step_by_step(struct ieee80211_hw *hw,
|
||||||
u8 channel, u8 *stage,
|
u8 channel, u8 *stage,
|
||||||
u8 *step, u32 *delay);
|
u8 *step, u32 *delay);
|
||||||
static void _rtl8723be_config_bb_reg(struct ieee80211_hw *hw,
|
|
||||||
u32 addr, u32 data);
|
|
||||||
|
|
||||||
static bool _rtl8723be_check_condition(struct ieee80211_hw *hw,
|
static bool _rtl8723be_check_condition(struct ieee80211_hw *hw,
|
||||||
const u32 condition)
|
const u32 condition)
|
||||||
{
|
{
|
||||||
|
@ -114,7 +112,7 @@ static bool _rtl8723be_phy_config_bb_with_headerfile(struct ieee80211_hw *hw,
|
||||||
v1 = array_table[i];
|
v1 = array_table[i];
|
||||||
v2 = array_table[i+1];
|
v2 = array_table[i+1];
|
||||||
if (v1 < 0xcdcdcdcd) {
|
if (v1 < 0xcdcdcdcd) {
|
||||||
_rtl8723be_config_bb_reg(hw, v1, v2);
|
rtl_bb_delay(hw, v1, v2);
|
||||||
} else {/*This line is the start line of branch.*/
|
} else {/*This line is the start line of branch.*/
|
||||||
if (!_rtl8723be_check_condition(hw, array_table[i])) {
|
if (!_rtl8723be_check_condition(hw, array_table[i])) {
|
||||||
/*Discard the following (offset, data) pairs*/
|
/*Discard the following (offset, data) pairs*/
|
||||||
|
@ -135,7 +133,7 @@ static bool _rtl8723be_phy_config_bb_with_headerfile(struct ieee80211_hw *hw,
|
||||||
v2 != 0xCDEF &&
|
v2 != 0xCDEF &&
|
||||||
v2 != 0xCDCD &&
|
v2 != 0xCDCD &&
|
||||||
i < arraylen - 2) {
|
i < arraylen - 2) {
|
||||||
_rtl8723be_config_bb_reg(hw,
|
rtl_bb_delay(hw,
|
||||||
v1, v2);
|
v1, v2);
|
||||||
READ_NEXT_PAIR(v1, v2, i);
|
READ_NEXT_PAIR(v1, v2, i);
|
||||||
}
|
}
|
||||||
|
@ -389,27 +387,6 @@ static void _rtl8723be_phy_init_tx_power_by_rate(struct ieee80211_hw *hw)
|
||||||
[path][txnum][section] = 0;
|
[path][txnum][section] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void _rtl8723be_config_bb_reg(struct ieee80211_hw *hw,
|
|
||||||
u32 addr, u32 data)
|
|
||||||
{
|
|
||||||
if (addr == 0xfe) {
|
|
||||||
mdelay(50);
|
|
||||||
} else if (addr == 0xfd) {
|
|
||||||
mdelay(5);
|
|
||||||
} else if (addr == 0xfc) {
|
|
||||||
mdelay(1);
|
|
||||||
} else if (addr == 0xfb) {
|
|
||||||
udelay(50);
|
|
||||||
} else if (addr == 0xfa) {
|
|
||||||
udelay(5);
|
|
||||||
} else if (addr == 0xf9) {
|
|
||||||
udelay(1);
|
|
||||||
} else {
|
|
||||||
rtl_set_bbreg(hw, addr, MASKDWORD, data);
|
|
||||||
udelay(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void phy_set_txpwr_by_rate_base(struct ieee80211_hw *hw, u8 band,
|
static void phy_set_txpwr_by_rate_base(struct ieee80211_hw *hw, u8 band,
|
||||||
u8 path, u8 rate_section,
|
u8 path, u8 rate_section,
|
||||||
u8 txnum, u8 value)
|
u8 txnum, u8 value)
|
||||||
|
|
|
@ -26,7 +26,6 @@
|
||||||
#ifndef __RTL8723BE_PWRSEQ_H__
|
#ifndef __RTL8723BE_PWRSEQ_H__
|
||||||
#define __RTL8723BE_PWRSEQ_H__
|
#define __RTL8723BE_PWRSEQ_H__
|
||||||
|
|
||||||
#include "pwrseqcmd.h"
|
|
||||||
/* Check document WM-20130425-JackieLau-RTL8723B_Power_Architecture v05.vsd
|
/* Check document WM-20130425-JackieLau-RTL8723B_Power_Architecture v05.vsd
|
||||||
* There are 6 HW Power States:
|
* There are 6 HW Power States:
|
||||||
* 0: POFF--Power Off
|
* 0: POFF--Power Off
|
||||||
|
|
|
@ -2242,22 +2242,6 @@
|
||||||
#define BWORD1 0xc
|
#define BWORD1 0xc
|
||||||
#define BWORD 0xf
|
#define BWORD 0xf
|
||||||
|
|
||||||
#define MASKBYTE0 0xff
|
|
||||||
#define MASKBYTE1 0xff00
|
|
||||||
#define MASKBYTE2 0xff0000
|
|
||||||
#define MASKBYTE3 0xff000000
|
|
||||||
#define MASKHWORD 0xffff0000
|
|
||||||
#define MASKLWORD 0x0000ffff
|
|
||||||
#define MASKDWORD 0xffffffff
|
|
||||||
#define MASK12BITS 0xfff
|
|
||||||
#define MASKH4BITS 0xf0000000
|
|
||||||
#define MASKOFDM_D 0xffc00000
|
|
||||||
#define MASKCCK 0x3f3f3f3f
|
|
||||||
|
|
||||||
#define MASK4BITS 0x0f
|
|
||||||
#define MASK20BITS 0xfffff
|
|
||||||
#define RFREG_OFFSET_MASK 0xfffff
|
|
||||||
|
|
||||||
#define BENABLE 0x1
|
#define BENABLE 0x1
|
||||||
#define BDISABLE 0x0
|
#define BDISABLE 0x0
|
||||||
|
|
||||||
|
|
|
@ -57,6 +57,22 @@
|
||||||
#define MASK20BITS 0xfffff
|
#define MASK20BITS 0xfffff
|
||||||
#define RFREG_OFFSET_MASK 0xfffff
|
#define RFREG_OFFSET_MASK 0xfffff
|
||||||
|
|
||||||
|
#define MASKBYTE0 0xff
|
||||||
|
#define MASKBYTE1 0xff00
|
||||||
|
#define MASKBYTE2 0xff0000
|
||||||
|
#define MASKBYTE3 0xff000000
|
||||||
|
#define MASKHWORD 0xffff0000
|
||||||
|
#define MASKLWORD 0x0000ffff
|
||||||
|
#define MASKDWORD 0xffffffff
|
||||||
|
#define MASK12BITS 0xfff
|
||||||
|
#define MASKH4BITS 0xf0000000
|
||||||
|
#define MASKOFDM_D 0xffc00000
|
||||||
|
#define MASKCCK 0x3f3f3f3f
|
||||||
|
|
||||||
|
#define MASK4BITS 0x0f
|
||||||
|
#define MASK20BITS 0xfffff
|
||||||
|
#define RFREG_OFFSET_MASK 0xfffff
|
||||||
|
|
||||||
#define RF_CHANGE_BY_INIT 0
|
#define RF_CHANGE_BY_INIT 0
|
||||||
#define RF_CHANGE_BY_IPS BIT(28)
|
#define RF_CHANGE_BY_IPS BIT(28)
|
||||||
#define RF_CHANGE_BY_PS BIT(29)
|
#define RF_CHANGE_BY_PS BIT(29)
|
||||||
|
|
Loading…
Reference in New Issue