mirror of
https://github.com/RinCat/RTL88x2BU-Linux-Driver.git
synced 2026-01-19 10:26:35 +00:00
Update to 5.6.1
This commit is contained in:
@@ -74,6 +74,15 @@ void configure_txpower_track(
|
||||
configure_txpower_track_8822b(config);
|
||||
#endif
|
||||
|
||||
#if RTL8192F_SUPPORT
|
||||
if (dm->support_ic_type == ODM_RTL8192F)
|
||||
configure_txpower_track_8192f(config);
|
||||
#endif
|
||||
|
||||
#if RTL8198F_SUPPORT
|
||||
if (dm->support_ic_type == ODM_RTL8198F)
|
||||
configure_txpower_track_8198f(config);
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
@@ -95,7 +104,7 @@ odm_txpowertracking_callback_thermal_meter_92e(
|
||||
struct rtl8192cd_priv *priv = dm->priv;
|
||||
|
||||
rf_mimo_mode = dm->rf_type;
|
||||
/* PHYDM_DBG(dm,ODM_COMP_TX_PWR_TRACK,"%s:%d rf_mimo_mode:%d\n", __FUNCTION__, __LINE__, rf_mimo_mode); */
|
||||
/* RF_DBG(dm,DBG_RF_TX_PWR_TRACK,"%s:%d rf_mimo_mode:%d\n", __FUNCTION__, __LINE__, rf_mimo_mode); */
|
||||
|
||||
#ifdef MP_TEST
|
||||
if ((OPMODE & WIFI_MP_STATE) || *(dm->mp_mode)) {
|
||||
@@ -109,7 +118,7 @@ odm_txpowertracking_callback_thermal_meter_92e(
|
||||
}
|
||||
|
||||
thermal_value = (unsigned char)odm_get_rf_reg(dm, RF_PATH_A, ODM_RF_T_METER_92E, 0xfc00); /* 0x42: RF Reg[15:10] 88E */
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK, "\nReadback Thermal Meter = 0x%x pre thermal meter 0x%x EEPROMthermalmeter 0x%x\n", thermal_value, priv->pshare->thermal_value, priv->pmib->dot11RFEntry.ther);
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK, "\nReadback Thermal Meter = 0x%x pre thermal meter 0x%x EEPROMthermalmeter 0x%x\n", thermal_value, priv->pshare->thermal_value, priv->pmib->dot11RFEntry.ther);
|
||||
|
||||
|
||||
switch (rf_mimo_mode) {
|
||||
@@ -129,7 +138,7 @@ odm_txpowertracking_callback_thermal_meter_92e(
|
||||
for (i = 0; i < OFDM_TABLE_SIZE_92E; i++) {
|
||||
if (ele_D == (ofdm_swing_table_92e[i] >> 22)) {
|
||||
OFDM_index[0] = (unsigned char)i;
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK, "PathA 0xC80[31:22] = 0x%x, OFDM_index=%d\n", ele_D, OFDM_index[0]);
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK, "PathA 0xC80[31:22] = 0x%x, OFDM_index=%d\n", ele_D, OFDM_index[0]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -140,7 +149,7 @@ odm_txpowertracking_callback_thermal_meter_92e(
|
||||
for (i = 0; i < OFDM_TABLE_SIZE_92E; i++) {
|
||||
if (ele_D == (ofdm_swing_table_92e[i] >> 22)) {
|
||||
OFDM_index[1] = (unsigned char)i;
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK, "PathB 0xC88[31:22] = 0x%x, OFDM_index=%d\n", ele_D, OFDM_index[1]);
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK, "PathB 0xC88[31:22] = 0x%x, OFDM_index=%d\n", ele_D, OFDM_index[1]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -162,7 +171,7 @@ odm_txpowertracking_callback_thermal_meter_92e(
|
||||
|
||||
if (thermal_value_avg_count) {
|
||||
thermal_value = (unsigned char)(thermal_value_avg / thermal_value_avg_count);
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK, "AVG Thermal Meter = 0x%x\n", thermal_value);
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK, "AVG Thermal Meter = 0x%x\n", thermal_value);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -174,8 +183,8 @@ odm_txpowertracking_callback_thermal_meter_92e(
|
||||
}
|
||||
|
||||
if (thermal_value != priv->pshare->thermal_value) {
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK, "\n******** START POWER TRACKING ********\n");
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK, "\nReadback Thermal Meter = 0x%x pre thermal meter 0x%x EEPROMthermalmeter 0x%x\n", thermal_value, priv->pshare->thermal_value, priv->pmib->dot11RFEntry.ther);
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK, "\n******** START POWER TRACKING ********\n");
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK, "\nReadback Thermal Meter = 0x%x pre thermal meter 0x%x EEPROMthermalmeter 0x%x\n", thermal_value, priv->pshare->thermal_value, priv->pmib->dot11RFEntry.ther);
|
||||
|
||||
delta = RTL_ABS(thermal_value, priv->pmib->dot11RFEntry.ther);
|
||||
delta_IQK = RTL_ABS(thermal_value, priv->pshare->thermal_value_iqk);
|
||||
@@ -184,32 +193,32 @@ odm_txpowertracking_callback_thermal_meter_92e(
|
||||
|
||||
#ifdef _TRACKING_TABLE_FILE
|
||||
if (priv->pshare->rf_ft_var.pwr_track_file) {
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK, "diff: (%s)%d ==> get index from table : %d)\n", (is_decrease ? "-" : "+"), delta, get_tx_tracking_index(priv, channel, i, delta, is_decrease, 0));
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK, "diff: (%s)%d ==> get index from table : %d)\n", (is_decrease ? "-" : "+"), delta, get_tx_tracking_index(priv, channel, i, delta, is_decrease, 0));
|
||||
|
||||
if (is_decrease) {
|
||||
for (i = 0; i < rf; i++) {
|
||||
OFDM_index[i] = priv->pshare->OFDM_index0[i] + get_tx_tracking_index(priv, channel, i, delta, is_decrease, 0);
|
||||
OFDM_index[i] = ((OFDM_index[i] > (OFDM_TABLE_SIZE_92E- 1)) ? (OFDM_TABLE_SIZE_92E - 1) : OFDM_index[i]);
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK, ">>> decrese power ---> new OFDM_INDEX:%d (%d + %d)\n", OFDM_index[i], priv->pshare->OFDM_index0[i], get_tx_tracking_index(priv, channel, i, delta, is_decrease, 0));
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK, ">>> decrese power ---> new OFDM_INDEX:%d (%d + %d)\n", OFDM_index[i], priv->pshare->OFDM_index0[i], get_tx_tracking_index(priv, channel, i, delta, is_decrease, 0));
|
||||
CCK_index = priv->pshare->CCK_index0 + get_tx_tracking_index(priv, channel, i, delta, is_decrease, 1);
|
||||
CCK_index = ((CCK_index > (CCK_TABLE_SIZE_92E - 1)) ? (CCK_TABLE_SIZE_92E - 1) : CCK_index);
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK, ">>> Decrese power ---> new CCK_INDEX:%d (%d + %d)\n", CCK_index, priv->pshare->CCK_index0, get_tx_tracking_index(priv, channel, i, delta, is_decrease, 1));
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK, ">>> Decrese power ---> new CCK_INDEX:%d (%d + %d)\n", CCK_index, priv->pshare->CCK_index0, get_tx_tracking_index(priv, channel, i, delta, is_decrease, 1));
|
||||
}
|
||||
} else {
|
||||
for (i = 0; i < rf; i++) {
|
||||
OFDM_index[i] = priv->pshare->OFDM_index0[i] - get_tx_tracking_index(priv, channel, i, delta, is_decrease, 0);
|
||||
OFDM_index[i] = ((OFDM_index[i] < OFDM_min_index) ? OFDM_min_index : OFDM_index[i]);
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK, ">>> Increse power ---> new OFDM_INDEX:%d (%d - %d)\n", OFDM_index[i], priv->pshare->OFDM_index0[i], get_tx_tracking_index(priv, channel, i, delta, is_decrease, 0));
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK, ">>> Increse power ---> new OFDM_INDEX:%d (%d - %d)\n", OFDM_index[i], priv->pshare->OFDM_index0[i], get_tx_tracking_index(priv, channel, i, delta, is_decrease, 0));
|
||||
CCK_index = priv->pshare->CCK_index0 - get_tx_tracking_index(priv, channel, i, delta, is_decrease, 1);
|
||||
CCK_index = ((CCK_index < 0) ? 0 : CCK_index);
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK, ">>> Increse power ---> new CCK_INDEX:%d (%d - %d)\n", CCK_index, priv->pshare->CCK_index0, get_tx_tracking_index(priv, channel, i, delta, is_decrease, 1));
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK, ">>> Increse power ---> new CCK_INDEX:%d (%d - %d)\n", CCK_index, priv->pshare->CCK_index0, get_tx_tracking_index(priv, channel, i, delta, is_decrease, 1));
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif /* CFG_TRACKING_TABLE_FILE */
|
||||
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK, "ofdm_swing_table_92e[(unsigned int)OFDM_index[0]] = %x\n", ofdm_swing_table_92e[(unsigned int)OFDM_index[0]]);
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK, "ofdm_swing_table_92e[(unsigned int)OFDM_index[1]] = %x\n", ofdm_swing_table_92e[(unsigned int)OFDM_index[1]]);
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK, "ofdm_swing_table_92e[(unsigned int)OFDM_index[0]] = %x\n", ofdm_swing_table_92e[(unsigned int)OFDM_index[0]]);
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK, "ofdm_swing_table_92e[(unsigned int)OFDM_index[1]] = %x\n", ofdm_swing_table_92e[(unsigned int)OFDM_index[1]]);
|
||||
|
||||
/* Adujst OFDM Ant_A according to IQK result */
|
||||
ele_D = (ofdm_swing_table_92e[(unsigned int)OFDM_index[0]] & 0xFFC00000) >> 22;
|
||||
@@ -275,8 +284,8 @@ odm_txpowertracking_callback_thermal_meter_92e(
|
||||
|
||||
}
|
||||
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK, "0xc80 = 0x%x\n", phy_query_bb_reg(priv, REG_OFDM_0_XA_TX_IQ_IMBALANCE, MASKDWORD));
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK, "0xc88 = 0x%x\n", phy_query_bb_reg(priv, REG_OFDM_0_XB_TX_IQ_IMBALANCE, MASKDWORD));
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK, "0xc80 = 0x%x\n", phy_query_bb_reg(priv, REG_OFDM_0_XA_TX_IQ_IMBALANCE, MASKDWORD));
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK, "0xc88 = 0x%x\n", phy_query_bb_reg(priv, REG_OFDM_0_XB_TX_IQ_IMBALANCE, MASKDWORD));
|
||||
|
||||
if ((delta_IQK > 3) && (!iqk_info->rfk_forbidden)) {
|
||||
priv->pshare->thermal_value_iqk = thermal_value;
|
||||
@@ -305,37 +314,40 @@ odm_txpowertracking_callback_thermal_meter_92e(
|
||||
priv->pshare->OFDM_index[i] = OFDM_index[i];
|
||||
priv->pshare->CCK_index = CCK_index;
|
||||
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK, "\n******** END:%s() ********\n", __FUNCTION__);
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK, "\n******** END:%s() ********\n", __FUNCTION__);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
#if (RTL8197F_SUPPORT == 1 || RTL8822B_SUPPORT == 1 || RTL8821C_SUPPORT == 1)
|
||||
#if (RTL8197F_SUPPORT == 1 || RTL8192F_SUPPORT == 1 || RTL8822B_SUPPORT == 1 ||\
|
||||
RTL8821C_SUPPORT == 1 || RTL8198F_SUPPORT == 1)
|
||||
void
|
||||
odm_txpowertracking_callback_thermal_meter_jaguar_series3(
|
||||
void *dm_void
|
||||
)
|
||||
{
|
||||
#if 1
|
||||
struct dm_struct *dm = (struct dm_struct *)dm_void;
|
||||
u8 thermal_value = 0, delta, delta_LCK, delta_IQK, channel, is_increase;
|
||||
u8 thermal_value_avg_count = 0, p = 0, i = 0;
|
||||
u32 thermal_value_avg = 0;
|
||||
struct rtl8192cd_priv *priv = dm->priv;
|
||||
struct txpwrtrack_cfg c;
|
||||
struct dm_rf_calibration_struct *cali_info = &(dm->rf_calibrate_info);
|
||||
struct dm_iqk_info *iqk_info = &dm->IQK_info;
|
||||
/*4 1. The following TWO tables decide the final index of OFDM/CCK swing table.*/
|
||||
u8 *delta_swing_table_idx_tup_a = NULL, *delta_swing_table_idx_tdown_a = NULL;
|
||||
u8 *delta_swing_table_idx_tup_b = NULL, *delta_swing_table_idx_tdown_b = NULL;
|
||||
u8 *delta_swing_table_idx_tup_cck_a = NULL, *delta_swing_table_idx_tdown_cck_a = NULL;
|
||||
u8 *delta_swing_table_idx_tup_cck_b = NULL, *delta_swing_table_idx_tdown_cck_b = NULL;
|
||||
struct dm_struct *dm = (struct dm_struct *)dm_void;
|
||||
u8 thermal_value = 0, delta, delta_LCK, delta_IQK, channel, is_increase;
|
||||
u8 thermal_value_avg_count = 0, p = 0, i = 0;
|
||||
u32 thermal_value_avg = 0;
|
||||
struct rtl8192cd_priv *priv = dm->priv;
|
||||
struct txpwrtrack_cfg c;
|
||||
struct dm_rf_calibration_struct *cali_info = &(dm->rf_calibrate_info);
|
||||
struct dm_iqk_info *iqk_info = &dm->IQK_info;
|
||||
struct _hal_rf_ *rf = &dm->rf_table;
|
||||
/*The following tables decide the final index of OFDM/CCK swing table.*/
|
||||
u8 *pwrtrk_tab_up_a = NULL, *pwrtrk_tab_down_a = NULL;
|
||||
u8 *pwrtrk_tab_up_b = NULL, *pwrtrk_tab_down_b = NULL;
|
||||
u8 *pwrtrk_tab_up_cck_a = NULL, *pwrtrk_tab_down_cck_a = NULL;
|
||||
u8 *pwrtrk_tab_up_cck_b = NULL, *pwrtrk_tab_down_cck_b = NULL;
|
||||
/*for 8814 add by Yu Chen*/
|
||||
u8 *delta_swing_table_idx_tup_c = NULL, *delta_swing_table_idx_tdown_c = NULL;
|
||||
u8 *delta_swing_table_idx_tup_d = NULL, *delta_swing_table_idx_tdown_d = NULL;
|
||||
u8 *delta_swing_table_idx_tup_cck_c = NULL, *delta_swing_table_idx_tdown_cck_c = NULL;
|
||||
u8 *delta_swing_table_idx_tup_cck_d = NULL, *delta_swing_table_idx_tdown_cck_d = NULL;
|
||||
u8 *pwrtrk_tab_up_c = NULL, *pwrtrk_tab_down_c = NULL;
|
||||
u8 *pwrtrk_tab_up_d = NULL, *pwrtrk_tab_down_d = NULL;
|
||||
u8 *pwrtrk_tab_up_cck_c = NULL, *pwrtrk_tab_down_cck_c = NULL;
|
||||
u8 *pwrtrk_tab_up_cck_d = NULL, *pwrtrk_tab_down_cck_d = NULL;
|
||||
s8 thermal_value_temp = 0;
|
||||
|
||||
#ifdef MP_TEST
|
||||
if ((OPMODE & WIFI_MP_STATE) || *(dm->mp_mode)) {
|
||||
@@ -350,22 +362,47 @@ odm_txpowertracking_callback_thermal_meter_jaguar_series3(
|
||||
|
||||
configure_txpower_track(dm, &c);
|
||||
|
||||
(*c.get_delta_all_swing_table)(dm, (u8 **)&delta_swing_table_idx_tup_a, (u8 **)&delta_swing_table_idx_tdown_a,
|
||||
(u8 **)&delta_swing_table_idx_tup_b, (u8 **)&delta_swing_table_idx_tdown_b,
|
||||
(u8 **)&delta_swing_table_idx_tup_cck_a, (u8 **)&delta_swing_table_idx_tdown_cck_a,
|
||||
(u8 **)&delta_swing_table_idx_tup_cck_b, (u8 **)&delta_swing_table_idx_tdown_cck_b);
|
||||
(*c.get_delta_all_swing_table)(dm,
|
||||
(u8 **)&pwrtrk_tab_up_a, (u8 **)&pwrtrk_tab_down_a,
|
||||
(u8 **)&pwrtrk_tab_up_b, (u8 **)&pwrtrk_tab_down_b,
|
||||
(u8 **)&pwrtrk_tab_up_cck_a, (u8 **)&pwrtrk_tab_down_cck_a,
|
||||
(u8 **)&pwrtrk_tab_up_cck_b, (u8 **)&pwrtrk_tab_down_cck_b);
|
||||
|
||||
thermal_value = (u8)odm_get_rf_reg(dm, RF_PATH_A, c.thermal_reg_addr, 0xfc00); /*0x42: RF Reg[15:10] 88E*/
|
||||
if (GET_CHIP_VER(priv) == VERSION_8198F) {
|
||||
(*c.get_delta_all_swing_table_ex)(dm,
|
||||
(u8 **)&pwrtrk_tab_up_c, (u8 **)&pwrtrk_tab_down_c,
|
||||
(u8 **)&pwrtrk_tab_up_d, (u8 **)&pwrtrk_tab_down_d,
|
||||
(u8 **)&pwrtrk_tab_up_cck_c, (u8 **)&pwrtrk_tab_down_cck_c,
|
||||
(u8 **)&pwrtrk_tab_up_cck_d, (u8 **)&pwrtrk_tab_down_cck_d);
|
||||
}
|
||||
/*0x42: RF Reg[15:10] 88E*/
|
||||
thermal_value = (u8)odm_get_rf_reg(dm, RF_PATH_A, c.thermal_reg_addr, 0xfc00);
|
||||
#ifdef THER_TRIM
|
||||
if (GET_CHIP_VER(priv) == VERSION_8197F) {
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,"orig thermal_value=%d, ther_trim_val=%d\n", thermal_value, priv->pshare->rf_ft_var.ther_trim_val);
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,"orig thermal_value=%d, ther_trim_val=%d\n", thermal_value, priv->pshare->rf_ft_var.ther_trim_val);
|
||||
|
||||
thermal_value += priv->pshare->rf_ft_var.ther_trim_val;
|
||||
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,"after thermal trim, thermal_value=%d\n", thermal_value);
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,"after thermal trim, thermal_value=%d\n", thermal_value);
|
||||
}
|
||||
|
||||
if (GET_CHIP_VER(priv) == VERSION_8198F) {
|
||||
thermal_value_temp = thermal_value + phydm_get_thermal_offset(dm);
|
||||
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,
|
||||
"thermal_value_temp(%d) = ther_value(%d) + ther_trim_ther(%d)\n",
|
||||
thermal_value_temp, thermal_value, phydm_get_thermal_offset(dm));
|
||||
|
||||
if (thermal_value_temp > 63)
|
||||
thermal_value = 63;
|
||||
else if (thermal_value_temp < 0)
|
||||
thermal_value = 0;
|
||||
else
|
||||
thermal_value = thermal_value_temp;
|
||||
}
|
||||
#endif
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,"Readback Thermal Meter = 0x%x(%d) EEPROMthermalmeter 0x%x(%d)\n"
|
||||
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,"\n\n\nCurrent Thermal = 0x%x(%d) EEPROMthermalmeter 0x%x(%d)\n"
|
||||
, thermal_value, thermal_value, priv->pmib->dot11RFEntry.ther, priv->pmib->dot11RFEntry.ther);
|
||||
|
||||
/* Initialize */
|
||||
@@ -393,12 +430,12 @@ odm_txpowertracking_callback_thermal_meter_jaguar_series3(
|
||||
}
|
||||
|
||||
if (thermal_value_avg_count) {/*Calculate Average thermal_value after average enough times*/
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,"thermal_value_avg=0x%x(%d) thermal_value_avg_count = %d\n"
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,"thermal_value_avg=0x%x(%d) thermal_value_avg_count = %d\n"
|
||||
, thermal_value_avg, thermal_value_avg, thermal_value_avg_count);
|
||||
|
||||
thermal_value = (u8)(thermal_value_avg / thermal_value_avg_count);
|
||||
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,"AVG Thermal Meter = 0x%X(%d), EEPROMthermalmeter = 0x%X(%d)\n", thermal_value, thermal_value, priv->pmib->dot11RFEntry.ther, priv->pmib->dot11RFEntry.ther);
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,"AVG Thermal Meter = 0x%X(%d), EEPROMthermalmeter = 0x%X(%d)\n", thermal_value, thermal_value, priv->pmib->dot11RFEntry.ther, priv->pmib->dot11RFEntry.ther);
|
||||
}
|
||||
|
||||
/*4 Calculate delta, delta_LCK, delta_IQK.*/
|
||||
@@ -408,136 +445,153 @@ odm_txpowertracking_callback_thermal_meter_jaguar_series3(
|
||||
is_increase = ((thermal_value < priv->pmib->dot11RFEntry.ther) ? 0 : 1);
|
||||
|
||||
if (delta > 29) { /* power track table index(thermal diff.) upper bound*/
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK, "delta(%d) > 29, set delta to 29\n", delta);
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK, "delta(%d) > 29, set delta to 29\n", delta);
|
||||
delta = 29;
|
||||
}
|
||||
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK, "(delta, delta_LCK, delta_IQK) = (%d, %d, %d)\n", delta, delta_LCK, delta_IQK);
|
||||
|
||||
/*4 if necessary, do LCK.*/
|
||||
if ((delta_LCK > c.threshold_iqk) && (!iqk_info->rfk_forbidden)) {
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK, "delta_LCK(%d) >= threshold_iqk(%d)\n", delta_LCK, c.threshold_iqk);
|
||||
if ((delta_LCK >= c.threshold_iqk) && (!iqk_info->rfk_forbidden)) {
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK, "delta_LCK(%d) >= threshold_iqk(%d)\n", delta_LCK, c.threshold_iqk);
|
||||
dm->rf_calibrate_info.thermal_value_lck = thermal_value;
|
||||
#if (RTL8822B_SUPPORT != 1)
|
||||
if (!(dm->support_ic_type & ODM_RTL8822B)) {
|
||||
if (c.phy_lc_calibrate)
|
||||
(*c.phy_lc_calibrate)(dm);
|
||||
}
|
||||
if (c.phy_lc_calibrate)
|
||||
(*c.phy_lc_calibrate)(dm);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
if ((delta_IQK > c.threshold_iqk) && (!iqk_info->rfk_forbidden)) {
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK, "delta_IQK(%d) >= threshold_iqk(%d)\n", delta_IQK, c.threshold_iqk);
|
||||
dm->rf_calibrate_info.thermal_value_iqk = thermal_value;
|
||||
if (c.do_iqk)
|
||||
(*c.do_iqk)(dm, true, 0, 0);
|
||||
}
|
||||
|
||||
if (!priv->pmib->dot11RFEntry.ther) /*Don't do power tracking since no calibrated thermal value*/
|
||||
if (!priv->pmib->dot11RFEntry.ther) /*Don't do power tracking since no calibrated thermal value*/
|
||||
return;
|
||||
|
||||
/*4 Do Power Tracking*/
|
||||
|
||||
if (thermal_value != dm->rf_calibrate_info.thermal_value) {
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,"\n\n******** START POWER TRACKING ********\n");
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,"Readback Thermal Meter = 0x%x pre thermal meter 0x%x EEPROMthermalmeter 0x%x\n",
|
||||
thermal_value, dm->rf_calibrate_info.thermal_value, priv->pmib->dot11RFEntry.ther);
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,"******** START POWER TRACKING ********\n");
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,"Readback Thermal Meter = 0x%x pre thermal meter 0x%x EEPROMthermalmeter 0x%x\n",
|
||||
thermal_value, dm->rf_calibrate_info.thermal_value, priv->pmib->dot11RFEntry.ther);
|
||||
|
||||
#ifdef _TRACKING_TABLE_FILE
|
||||
if (priv->pshare->rf_ft_var.pwr_track_file) {
|
||||
if (is_increase) { /*thermal is higher than base*/
|
||||
if (is_increase) { /*thermal is higher than base*/
|
||||
for (p = RF_PATH_A; p < c.rf_path_count; p++) {
|
||||
switch (p) {
|
||||
case RF_PATH_B:
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,"delta_swing_table_idx_tup_b[%d] = %d delta_swing_table_idx_tup_cck_b[%d] = %d\n", delta, delta_swing_table_idx_tup_b[delta], delta, delta_swing_table_idx_tup_cck_b[delta]);
|
||||
cali_info->absolute_ofdm_swing_idx[p] = delta_swing_table_idx_tup_b[delta];
|
||||
cali_info->absolute_cck_swing_idx[p] = delta_swing_table_idx_tup_cck_b[delta];
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,"******Temp is higher and pRF->absolute_ofdm_swing_idx[RF_PATH_B] = %d pRF->absolute_cck_swing_idx[RF_PATH_B] = %d\n", cali_info->absolute_ofdm_swing_idx[p], cali_info->absolute_cck_swing_idx[p]);
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,"pwrtrk_tab_up_b[%d] = %d pwrtrk_tab_up_cck_b[%d] = %d\n", delta, pwrtrk_tab_up_b[delta], delta, pwrtrk_tab_up_cck_b[delta]);
|
||||
cali_info->absolute_ofdm_swing_idx[p] = pwrtrk_tab_up_b[delta];
|
||||
cali_info->absolute_cck_swing_idx[p] = pwrtrk_tab_up_cck_b[delta];
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,"******Temp is higher and pRF->absolute_ofdm_swing_idx[RF_PATH_B] = %d pRF->absolute_cck_swing_idx[RF_PATH_B] = %d\n", cali_info->absolute_ofdm_swing_idx[p], cali_info->absolute_cck_swing_idx[p]);
|
||||
break;
|
||||
|
||||
case RF_PATH_C:
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,"delta_swing_table_idx_tup_c[%d] = %d delta_swing_table_idx_tup_cck_c[%d] = %d\n", delta, delta_swing_table_idx_tup_c[delta], delta, delta_swing_table_idx_tup_cck_c[delta]);
|
||||
cali_info->absolute_ofdm_swing_idx[p] = delta_swing_table_idx_tup_c[delta];
|
||||
cali_info->absolute_cck_swing_idx[p] = delta_swing_table_idx_tup_cck_c[delta];
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,"******Temp is higher and pRF->absolute_ofdm_swing_idx[RF_PATH_C] = %d pRF->absolute_cck_swing_idx[RF_PATH_C] = %d\n", cali_info->absolute_ofdm_swing_idx[p], cali_info->absolute_cck_swing_idx[p]);
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,"pwrtrk_tab_up_c[%d] = %d pwrtrk_tab_up_cck_c[%d] = %d\n", delta, pwrtrk_tab_up_c[delta], delta, pwrtrk_tab_up_cck_c[delta]);
|
||||
cali_info->absolute_ofdm_swing_idx[p] = pwrtrk_tab_up_c[delta];
|
||||
cali_info->absolute_cck_swing_idx[p] = pwrtrk_tab_up_cck_c[delta];
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,"******Temp is higher and pRF->absolute_ofdm_swing_idx[RF_PATH_C] = %d pRF->absolute_cck_swing_idx[RF_PATH_C] = %d\n", cali_info->absolute_ofdm_swing_idx[p], cali_info->absolute_cck_swing_idx[p]);
|
||||
break;
|
||||
|
||||
case RF_PATH_D:
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,"delta_swing_table_idx_tup_d[%d] = %d delta_swing_table_idx_tup_cck_d[%d] = %d\n", delta, delta_swing_table_idx_tup_d[delta], delta, delta_swing_table_idx_tup_cck_d[delta]);
|
||||
cali_info->absolute_ofdm_swing_idx[p] = delta_swing_table_idx_tup_d[delta];
|
||||
cali_info->absolute_cck_swing_idx[p] = delta_swing_table_idx_tup_cck_d[delta];
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,"******Temp is higher and pRF->absolute_ofdm_swing_idx[RF_PATH_D] = %d pRF->absolute_cck_swing_idx[RF_PATH_D] = %d\n", cali_info->absolute_ofdm_swing_idx[p], cali_info->absolute_cck_swing_idx[p]);
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,"pwrtrk_tab_up_d[%d] = %d pwrtrk_tab_up_cck_d[%d] = %d\n", delta, pwrtrk_tab_up_d[delta], delta, pwrtrk_tab_up_cck_d[delta]);
|
||||
cali_info->absolute_ofdm_swing_idx[p] = pwrtrk_tab_up_d[delta];
|
||||
cali_info->absolute_cck_swing_idx[p] = pwrtrk_tab_up_cck_d[delta];
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,"******Temp is higher and pRF->absolute_ofdm_swing_idx[RF_PATH_D] = %d pRF->absolute_cck_swing_idx[RF_PATH_D] = %d\n", cali_info->absolute_ofdm_swing_idx[p], cali_info->absolute_cck_swing_idx[p]);
|
||||
break;
|
||||
default:
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,"delta_swing_table_idx_tup_a[%d] = %d delta_swing_table_idx_tup_cck_a[%d] = %d\n", delta, delta_swing_table_idx_tup_a[delta], delta, delta_swing_table_idx_tup_cck_a[delta]);
|
||||
cali_info->absolute_ofdm_swing_idx[p] = delta_swing_table_idx_tup_a[delta];
|
||||
cali_info->absolute_cck_swing_idx[p] = delta_swing_table_idx_tup_cck_a[delta];
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,"******Temp is higher and pRF->absolute_ofdm_swing_idx[RF_PATH_A] = %d pRF->absolute_cck_swing_idx[RF_PATH_A] = %d\n", cali_info->absolute_ofdm_swing_idx[p], cali_info->absolute_cck_swing_idx[p]);
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,"pwrtrk_tab_up_a[%d] = %d pwrtrk_tab_up_cck_a[%d] = %d\n", delta, pwrtrk_tab_up_a[delta], delta, pwrtrk_tab_up_cck_a[delta]);
|
||||
cali_info->absolute_ofdm_swing_idx[p] = pwrtrk_tab_up_a[delta];
|
||||
cali_info->absolute_cck_swing_idx[p] = pwrtrk_tab_up_cck_a[delta];
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,"******Temp is higher and pRF->absolute_ofdm_swing_idx[RF_PATH_A] = %d pRF->absolute_cck_swing_idx[RF_PATH_A] = %d\n", cali_info->absolute_ofdm_swing_idx[p], cali_info->absolute_cck_swing_idx[p]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else { /* thermal is lower than base*/
|
||||
} else { /* thermal is lower than base*/
|
||||
for (p = RF_PATH_A; p < c.rf_path_count; p++) {
|
||||
switch (p) {
|
||||
case RF_PATH_B:
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,"delta_swing_table_idx_tdown_b[%d] = %d delta_swing_table_idx_tdown_cck_b[%d] = %d\n", delta, delta_swing_table_idx_tdown_b[delta], delta, delta_swing_table_idx_tdown_cck_b[delta]);
|
||||
cali_info->absolute_ofdm_swing_idx[p] = -1 * delta_swing_table_idx_tdown_b[delta];
|
||||
cali_info->absolute_cck_swing_idx[p] = -1 * delta_swing_table_idx_tdown_cck_b[delta];
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,"******Temp is lower and pRF->absolute_ofdm_swing_idx[RF_PATH_B] = %d pRF->absolute_cck_swing_idx[RF_PATH_B] = %d\n", cali_info->absolute_ofdm_swing_idx[p], cali_info->absolute_cck_swing_idx[p]);
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,"pwrtrk_tab_down_b[%d] = %d pwrtrk_tab_down_cck_b[%d] = %d\n", delta, pwrtrk_tab_down_b[delta], delta, pwrtrk_tab_down_cck_b[delta]);
|
||||
cali_info->absolute_ofdm_swing_idx[p] = -1 * pwrtrk_tab_down_b[delta];
|
||||
cali_info->absolute_cck_swing_idx[p] = -1 * pwrtrk_tab_down_cck_b[delta];
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,"******Temp is lower and pRF->absolute_ofdm_swing_idx[RF_PATH_B] = %d pRF->absolute_cck_swing_idx[RF_PATH_B] = %d\n", cali_info->absolute_ofdm_swing_idx[p], cali_info->absolute_cck_swing_idx[p]);
|
||||
break;
|
||||
|
||||
case RF_PATH_C:
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,"delta_swing_table_idx_tdown_c[%d] = %d delta_swing_table_idx_tdown_cck_c[%d] = %d\n", delta, delta_swing_table_idx_tdown_c[delta], delta, delta_swing_table_idx_tdown_cck_c[delta]);
|
||||
cali_info->absolute_ofdm_swing_idx[p] = -1 * delta_swing_table_idx_tdown_c[delta];
|
||||
cali_info->absolute_cck_swing_idx[p] = -1 * delta_swing_table_idx_tdown_cck_c[delta];
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,"******Temp is lower and pRF->absolute_ofdm_swing_idx[RF_PATH_C] = %d pRF->absolute_cck_swing_idx[RF_PATH_C] = %d\n", cali_info->absolute_ofdm_swing_idx[p], cali_info->absolute_cck_swing_idx[p]);
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,"pwrtrk_tab_down_c[%d] = %d pwrtrk_tab_down_cck_c[%d] = %d\n", delta, pwrtrk_tab_down_c[delta], delta, pwrtrk_tab_down_cck_c[delta]);
|
||||
cali_info->absolute_ofdm_swing_idx[p] = -1 * pwrtrk_tab_down_c[delta];
|
||||
cali_info->absolute_cck_swing_idx[p] = -1 * pwrtrk_tab_down_cck_c[delta];
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,"******Temp is lower and pRF->absolute_ofdm_swing_idx[RF_PATH_C] = %d pRF->absolute_cck_swing_idx[RF_PATH_C] = %d\n", cali_info->absolute_ofdm_swing_idx[p], cali_info->absolute_cck_swing_idx[p]);
|
||||
break;
|
||||
|
||||
case RF_PATH_D:
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,"delta_swing_table_idx_tdown_d[%d] = %d delta_swing_table_idx_tdown_cck_d[%d] = %d\n", delta, delta_swing_table_idx_tdown_d[delta], delta, delta_swing_table_idx_tdown_cck_d[delta]);
|
||||
cali_info->absolute_ofdm_swing_idx[p] = -1 * delta_swing_table_idx_tdown_d[delta];
|
||||
cali_info->absolute_cck_swing_idx[p] = -1 * delta_swing_table_idx_tdown_cck_d[delta];
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,"******Temp is lower and pRF->absolute_ofdm_swing_idx[RF_PATH_D] = %d pRF->absolute_cck_swing_idx[RF_PATH_D] = %d\n", cali_info->absolute_ofdm_swing_idx[p], cali_info->absolute_cck_swing_idx[p]);
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,"pwrtrk_tab_down_d[%d] = %d pwrtrk_tab_down_cck_d[%d] = %d\n", delta, pwrtrk_tab_down_d[delta], delta, pwrtrk_tab_down_cck_d[delta]);
|
||||
cali_info->absolute_ofdm_swing_idx[p] = -1 * pwrtrk_tab_down_d[delta];
|
||||
cali_info->absolute_cck_swing_idx[p] = -1 * pwrtrk_tab_down_cck_d[delta];
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,"******Temp is lower and pRF->absolute_ofdm_swing_idx[RF_PATH_D] = %d pRF->absolute_cck_swing_idx[RF_PATH_D] = %d\n", cali_info->absolute_ofdm_swing_idx[p], cali_info->absolute_cck_swing_idx[p]);
|
||||
break;
|
||||
|
||||
default:
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,"delta_swing_table_idx_tdown_a[%d] = %d delta_swing_table_idx_tdown_cck_a[%d] = %d\n", delta, delta_swing_table_idx_tdown_a[delta], delta, delta_swing_table_idx_tdown_cck_a[delta]);
|
||||
cali_info->absolute_ofdm_swing_idx[p] = -1 * delta_swing_table_idx_tdown_a[delta];
|
||||
cali_info->absolute_cck_swing_idx[p] = -1 * delta_swing_table_idx_tdown_cck_a[delta];
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,"******Temp is lower and pRF->absolute_ofdm_swing_idx[RF_PATH_A] = %d pRF->absolute_cck_swing_idx[RF_PATH_A] = %d\n", cali_info->absolute_ofdm_swing_idx[p], cali_info->absolute_cck_swing_idx[p]);
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,"pwrtrk_tab_down_a[%d] = %d pwrtrk_tab_down_cck_a[%d] = %d\n", delta, pwrtrk_tab_down_a[delta], delta, pwrtrk_tab_down_cck_a[delta]);
|
||||
cali_info->absolute_ofdm_swing_idx[p] = -1 * pwrtrk_tab_down_a[delta];
|
||||
cali_info->absolute_cck_swing_idx[p] = -1 * pwrtrk_tab_down_cck_a[delta];
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,"******Temp is lower and pRF->absolute_ofdm_swing_idx[RF_PATH_A] = %d pRF->absolute_cck_swing_idx[RF_PATH_A] = %d\n", cali_info->absolute_ofdm_swing_idx[p], cali_info->absolute_cck_swing_idx[p]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (is_increase) {
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK, ">>> increse power --->\n");
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK, ">>> increse power --->\n");
|
||||
if (GET_CHIP_VER(priv) == VERSION_8197F) {
|
||||
for (p = RF_PATH_A; p < c.rf_path_count; p++)
|
||||
(*c.odm_tx_pwr_track_set_pwr)(dm, BBSWING, p, 0);
|
||||
//} else if (GET_CHIP_VER(priv) == VERSION_8192F) {
|
||||
// for (p = RF_PATH_A; p < c.rf_path_count; p++)
|
||||
// (*c.odm_tx_pwr_track_set_pwr)(dm, MIX_MODE, p, 0);
|
||||
} else if (GET_CHIP_VER(priv) == VERSION_8822B) {
|
||||
for (p = RF_PATH_A; p < c.rf_path_count; p++)
|
||||
(*c.odm_tx_pwr_track_set_pwr)(dm, MIX_MODE, p, 0);
|
||||
} else if (GET_CHIP_VER(priv) == VERSION_8821C) {
|
||||
for (p = RF_PATH_A; p < c.rf_path_count; p++)
|
||||
(*c.odm_tx_pwr_track_set_pwr)(dm, MIX_MODE, p, 0);
|
||||
} else if (GET_CHIP_VER(priv) == VERSION_8198F) {
|
||||
for (p = RF_PATH_A; p < c.rf_path_count; p++)
|
||||
(*c.odm_tx_pwr_track_set_pwr)(dm, MIX_MODE, p, 0);
|
||||
}
|
||||
} else {
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK, ">>> decrese power --->\n");
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK, ">>> decrese power --->\n");
|
||||
if (GET_CHIP_VER(priv) == VERSION_8197F) {
|
||||
for (p = RF_PATH_A; p < c.rf_path_count; p++)
|
||||
(*c.odm_tx_pwr_track_set_pwr)(dm, BBSWING, p, 0);
|
||||
//} else if (GET_CHIP_VER(priv) == VERSION_8192F) {
|
||||
// for (p = RF_PATH_A; p < c.rf_path_count; p++)
|
||||
// (*c.odm_tx_pwr_track_set_pwr)(dm, MIX_MODE, p, 0);
|
||||
} else if (GET_CHIP_VER(priv) == VERSION_8822B) {
|
||||
for (p = RF_PATH_A; p < c.rf_path_count; p++)
|
||||
(*c.odm_tx_pwr_track_set_pwr)(dm, MIX_MODE, p, 0);
|
||||
} else if (GET_CHIP_VER(priv) == VERSION_8821C) {
|
||||
for (p = RF_PATH_A; p < c.rf_path_count; p++)
|
||||
(*c.odm_tx_pwr_track_set_pwr)(dm, MIX_MODE, p, 0);
|
||||
} else if (GET_CHIP_VER(priv) == VERSION_8198F) {
|
||||
for (p = RF_PATH_A; p < c.rf_path_count; p++)
|
||||
(*c.odm_tx_pwr_track_set_pwr)(dm, MIX_MODE, p, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK, "\n******** END:%s() ********\n\n", __func__);
|
||||
if (GET_CHIP_VER(priv) != VERSION_8198F) {
|
||||
if ((delta_IQK >= c.threshold_iqk) && (!iqk_info->rfk_forbidden)) {
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK, "delta_IQK(%d) >= threshold_iqk(%d)\n", delta_IQK, c.threshold_iqk);
|
||||
dm->rf_calibrate_info.thermal_value_iqk = thermal_value;
|
||||
if (!(dm->support_ic_type & ODM_RTL8197F)) {
|
||||
if (c.do_iqk)
|
||||
(*c.do_iqk)(dm, false, thermal_value, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK, "\n******** END:%s() ********\n\n", __func__);
|
||||
/*update thermal meter value*/
|
||||
dm->rf_calibrate_info.thermal_value = thermal_value;
|
||||
|
||||
@@ -597,7 +651,7 @@ odm_txpowertracking_callback_thermal_meter_jaguar_series2(
|
||||
(u8 **)&delta_swing_table_idx_tup_d, (u8 **)&delta_swing_table_idx_tdown_d);
|
||||
|
||||
thermal_value = (u8)odm_get_rf_reg(dm, RF_PATH_A, c.thermal_reg_addr, 0xfc00); /* 0x42: RF Reg[15:10] 88E */
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,"\nReadback Thermal Meter = 0x%x, pre thermal meter 0x%x, EEPROMthermalmeter 0x%x\n", thermal_value, dm->rf_calibrate_info.thermal_value, priv->pmib->dot11RFEntry.ther);
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,"\nReadback Thermal Meter = 0x%x, pre thermal meter 0x%x, EEPROMthermalmeter 0x%x\n", thermal_value, dm->rf_calibrate_info.thermal_value, priv->pmib->dot11RFEntry.ther);
|
||||
|
||||
/* Initialize */
|
||||
if (!dm->rf_calibrate_info.thermal_value)
|
||||
@@ -614,16 +668,16 @@ odm_txpowertracking_callback_thermal_meter_jaguar_series2(
|
||||
/* 4 Query OFDM BB swing default setting Bit[31:21] */
|
||||
for (p = RF_PATH_A ; p < c.rf_path_count ; p++) {
|
||||
ele_D = odm_get_bb_reg(dm, bb_swing_reg[p], 0xffe00000);
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,"0x%x:0x%x ([31:21] = 0x%x)\n", bb_swing_reg[p], odm_get_bb_reg(dm, bb_swing_reg[p], MASKDWORD), ele_D);
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,"0x%x:0x%x ([31:21] = 0x%x)\n", bb_swing_reg[p], odm_get_bb_reg(dm, bb_swing_reg[p], MASKDWORD), ele_D);
|
||||
|
||||
for (bb_swing_idx = 0; bb_swing_idx < TXSCALE_TABLE_SIZE; bb_swing_idx++) {/* 4 */
|
||||
if (ele_D == tx_scaling_table_jaguar[bb_swing_idx]) {
|
||||
dm->rf_calibrate_info.OFDM_index[p] = (u8)bb_swing_idx;
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,"OFDM_index[%d]=%d\n", p, dm->rf_calibrate_info.OFDM_index[p]);
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,"OFDM_index[%d]=%d\n", p, dm->rf_calibrate_info.OFDM_index[p]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK, "kfree_offset[%d]=%d\n", p, cali_info->kfree_offset[p]);
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK, "kfree_offset[%d]=%d\n", p, cali_info->kfree_offset[p]);
|
||||
|
||||
}
|
||||
|
||||
@@ -642,7 +696,7 @@ odm_txpowertracking_callback_thermal_meter_jaguar_series2(
|
||||
|
||||
if (thermal_value_avg_count) { /* Calculate Average thermal_value after average enough times */
|
||||
thermal_value = (u8)(thermal_value_avg / thermal_value_avg_count);
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,"AVG Thermal Meter = 0x%X, EEPROMthermalmeter = 0x%X\n", thermal_value, priv->pmib->dot11RFEntry.ther);
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,"AVG Thermal Meter = 0x%X, EEPROMthermalmeter = 0x%X\n", thermal_value, priv->pmib->dot11RFEntry.ther);
|
||||
}
|
||||
|
||||
/* 4 Calculate delta, delta_LCK, delta_IQK. */
|
||||
@@ -654,7 +708,7 @@ odm_txpowertracking_callback_thermal_meter_jaguar_series2(
|
||||
/* 4 if necessary, do LCK. */
|
||||
if (!(dm->support_ic_type & ODM_RTL8821)) {
|
||||
if ((delta_LCK > c.threshold_iqk) && (!iqk_info->rfk_forbidden)) {
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK, "delta_LCK(%d) >= threshold_iqk(%d)\n", delta_LCK, c.threshold_iqk);
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK, "delta_LCK(%d) >= threshold_iqk(%d)\n", delta_LCK, c.threshold_iqk);
|
||||
dm->rf_calibrate_info.thermal_value_lck = thermal_value;
|
||||
|
||||
/*Use RTLCK, so close power tracking driver LCK*/
|
||||
@@ -669,7 +723,7 @@ odm_txpowertracking_callback_thermal_meter_jaguar_series2(
|
||||
|
||||
if ((delta_IQK > c.threshold_iqk) && (!iqk_info->rfk_forbidden)) {
|
||||
panic_printk("%s(%d)\n", __FUNCTION__, __LINE__);
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK, "delta_IQK(%d) >= threshold_iqk(%d)\n", delta_IQK, c.threshold_iqk);
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK, "delta_IQK(%d) >= threshold_iqk(%d)\n", delta_IQK, c.threshold_iqk);
|
||||
dm->rf_calibrate_info.thermal_value_iqk = thermal_value;
|
||||
if (c.do_iqk)
|
||||
(*c.do_iqk)(dm, true, 0, 0);
|
||||
@@ -681,12 +735,12 @@ odm_txpowertracking_callback_thermal_meter_jaguar_series2(
|
||||
/* 4 Do Power Tracking */
|
||||
|
||||
if (is_tssi_enable == true) {
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK, "**********Enter PURE TSSI MODE**********\n");
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK, "**********Enter PURE TSSI MODE**********\n");
|
||||
for (p = RF_PATH_A; p < c.rf_path_count; p++)
|
||||
(*c.odm_tx_pwr_track_set_pwr)(dm, TSSI_MODE, p, 0);
|
||||
} else if (thermal_value != dm->rf_calibrate_info.thermal_value) {
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,"\n******** START POWER TRACKING ********\n");
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,"\nReadback Thermal Meter = 0x%x pre thermal meter 0x%x EEPROMthermalmeter 0x%x\n", thermal_value, dm->rf_calibrate_info.thermal_value, priv->pmib->dot11RFEntry.ther);
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,"\n******** START POWER TRACKING ********\n");
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,"\nReadback Thermal Meter = 0x%x pre thermal meter 0x%x EEPROMthermalmeter 0x%x\n", thermal_value, dm->rf_calibrate_info.thermal_value, priv->pmib->dot11RFEntry.ther);
|
||||
|
||||
#ifdef _TRACKING_TABLE_FILE
|
||||
if (priv->pshare->rf_ft_var.pwr_track_file) {
|
||||
@@ -694,27 +748,27 @@ odm_txpowertracking_callback_thermal_meter_jaguar_series2(
|
||||
for (p = RF_PATH_A; p < c.rf_path_count; p++) {
|
||||
switch (p) {
|
||||
case RF_PATH_B:
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,"delta_swing_table_idx_tup_b[%d] = %d\n", delta, delta_swing_table_idx_tup_b[delta]);
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,"delta_swing_table_idx_tup_b[%d] = %d\n", delta, delta_swing_table_idx_tup_b[delta]);
|
||||
cali_info->absolute_ofdm_swing_idx[p] = delta_swing_table_idx_tup_b[delta]; /* Record delta swing for mix mode power tracking */
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,"******Temp is higher and dm->absolute_ofdm_swing_idx[RF_PATH_B] = %d\n", cali_info->absolute_ofdm_swing_idx[p]);
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,"******Temp is higher and dm->absolute_ofdm_swing_idx[RF_PATH_B] = %d\n", cali_info->absolute_ofdm_swing_idx[p]);
|
||||
break;
|
||||
|
||||
case RF_PATH_C:
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,"delta_swing_table_idx_tup_c[%d] = %d\n", delta, delta_swing_table_idx_tup_c[delta]);
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,"delta_swing_table_idx_tup_c[%d] = %d\n", delta, delta_swing_table_idx_tup_c[delta]);
|
||||
cali_info->absolute_ofdm_swing_idx[p] = delta_swing_table_idx_tup_c[delta]; /* Record delta swing for mix mode power tracking */
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,"******Temp is higher and dm->absolute_ofdm_swing_idx[RF_PATH_C] = %d\n", cali_info->absolute_ofdm_swing_idx[p]);
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,"******Temp is higher and dm->absolute_ofdm_swing_idx[RF_PATH_C] = %d\n", cali_info->absolute_ofdm_swing_idx[p]);
|
||||
break;
|
||||
|
||||
case RF_PATH_D:
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,"delta_swing_table_idx_tup_d[%d] = %d\n", delta, delta_swing_table_idx_tup_d[delta]);
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,"delta_swing_table_idx_tup_d[%d] = %d\n", delta, delta_swing_table_idx_tup_d[delta]);
|
||||
cali_info->absolute_ofdm_swing_idx[p] = delta_swing_table_idx_tup_d[delta]; /* Record delta swing for mix mode power tracking */
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,"******Temp is higher and dm->absolute_ofdm_swing_idx[RF_PATH_D] = %d\n", cali_info->absolute_ofdm_swing_idx[p]);
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,"******Temp is higher and dm->absolute_ofdm_swing_idx[RF_PATH_D] = %d\n", cali_info->absolute_ofdm_swing_idx[p]);
|
||||
break;
|
||||
|
||||
default:
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,"delta_swing_table_idx_tup_a[%d] = %d\n", delta, delta_swing_table_idx_tup_a[delta]);
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,"delta_swing_table_idx_tup_a[%d] = %d\n", delta, delta_swing_table_idx_tup_a[delta]);
|
||||
cali_info->absolute_ofdm_swing_idx[p] = delta_swing_table_idx_tup_a[delta]; /* Record delta swing for mix mode power tracking */
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,"******Temp is higher and dm->absolute_ofdm_swing_idx[RF_PATH_A] = %d\n", cali_info->absolute_ofdm_swing_idx[p]);
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,"******Temp is higher and dm->absolute_ofdm_swing_idx[RF_PATH_A] = %d\n", cali_info->absolute_ofdm_swing_idx[p]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -722,45 +776,45 @@ odm_txpowertracking_callback_thermal_meter_jaguar_series2(
|
||||
for (p = RF_PATH_A; p < c.rf_path_count; p++) {
|
||||
switch (p) {
|
||||
case RF_PATH_B:
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,"delta_swing_table_idx_tdown_b[%d] = %d\n", delta, delta_swing_table_idx_tdown_b[delta]);
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,"delta_swing_table_idx_tdown_b[%d] = %d\n", delta, delta_swing_table_idx_tdown_b[delta]);
|
||||
cali_info->absolute_ofdm_swing_idx[p] = -1 * delta_swing_table_idx_tdown_b[delta]; /* Record delta swing for mix mode power tracking */
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,"******Temp is lower and dm->absolute_ofdm_swing_idx[RF_PATH_B] = %d\n", cali_info->absolute_ofdm_swing_idx[p]);
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,"******Temp is lower and dm->absolute_ofdm_swing_idx[RF_PATH_B] = %d\n", cali_info->absolute_ofdm_swing_idx[p]);
|
||||
break;
|
||||
|
||||
case RF_PATH_C:
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,"delta_swing_table_idx_tdown_c[%d] = %d\n", delta, delta_swing_table_idx_tdown_c[delta]);
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,"delta_swing_table_idx_tdown_c[%d] = %d\n", delta, delta_swing_table_idx_tdown_c[delta]);
|
||||
cali_info->absolute_ofdm_swing_idx[p] = -1 * delta_swing_table_idx_tdown_c[delta]; /* Record delta swing for mix mode power tracking */
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,"******Temp is lower and dm->absolute_ofdm_swing_idx[RF_PATH_C] = %d\n", cali_info->absolute_ofdm_swing_idx[p]);
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,"******Temp is lower and dm->absolute_ofdm_swing_idx[RF_PATH_C] = %d\n", cali_info->absolute_ofdm_swing_idx[p]);
|
||||
break;
|
||||
|
||||
case RF_PATH_D:
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,"delta_swing_table_idx_tdown_d[%d] = %d\n", delta, delta_swing_table_idx_tdown_d[delta]);
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,"delta_swing_table_idx_tdown_d[%d] = %d\n", delta, delta_swing_table_idx_tdown_d[delta]);
|
||||
cali_info->absolute_ofdm_swing_idx[p] = -1 * delta_swing_table_idx_tdown_d[delta]; /* Record delta swing for mix mode power tracking */
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,"******Temp is lower and dm->absolute_ofdm_swing_idx[RF_PATH_D] = %d\n", cali_info->absolute_ofdm_swing_idx[p]);
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,"******Temp is lower and dm->absolute_ofdm_swing_idx[RF_PATH_D] = %d\n", cali_info->absolute_ofdm_swing_idx[p]);
|
||||
break;
|
||||
|
||||
default:
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,"delta_swing_table_idx_tdown_a[%d] = %d\n", delta, delta_swing_table_idx_tdown_a[delta]);
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,"delta_swing_table_idx_tdown_a[%d] = %d\n", delta, delta_swing_table_idx_tdown_a[delta]);
|
||||
cali_info->absolute_ofdm_swing_idx[p] = -1 * delta_swing_table_idx_tdown_a[delta]; /* Record delta swing for mix mode power tracking */
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,"******Temp is lower and dm->absolute_ofdm_swing_idx[RF_PATH_A] = %d\n", cali_info->absolute_ofdm_swing_idx[p]);
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,"******Temp is lower and dm->absolute_ofdm_swing_idx[RF_PATH_A] = %d\n", cali_info->absolute_ofdm_swing_idx[p]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (is_increase) {
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK, ">>> increse power --->\n");
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK, ">>> increse power --->\n");
|
||||
for (p = RF_PATH_A; p < c.rf_path_count; p++)
|
||||
(*c.odm_tx_pwr_track_set_pwr)(dm, MIX_MODE, p, 0);
|
||||
} else {
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK, ">>> decrese power --->\n");
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK, ">>> decrese power --->\n");
|
||||
for (p = RF_PATH_A; p < c.rf_path_count; p++)
|
||||
(*c.odm_tx_pwr_track_set_pwr)(dm, MIX_MODE, p, 0);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK, "\n******** END:%s() ********\n", __FUNCTION__);
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK, "\n******** END:%s() ********\n", __FUNCTION__);
|
||||
/* update thermal meter value */
|
||||
dm->rf_calibrate_info.thermal_value = thermal_value;
|
||||
|
||||
@@ -811,17 +865,17 @@ odm_txpowertracking_callback_thermal_meter_jaguar_series(
|
||||
|
||||
|
||||
thermal_value = (unsigned char)phy_query_rf_reg(priv, RF_PATH_A, 0x42, 0xfc00, 1); /* 0x42: RF Reg[15:10] 88E */
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK, "\nReadback Thermal Meter = 0x%x pre thermal meter 0x%x EEPROMthermalmeter 0x%x\n", thermal_value, priv->pshare->thermal_value, priv->pmib->dot11RFEntry.ther);
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK, "\nReadback Thermal Meter = 0x%x pre thermal meter 0x%x EEPROMthermalmeter 0x%x\n", thermal_value, priv->pshare->thermal_value, priv->pmib->dot11RFEntry.ther);
|
||||
|
||||
|
||||
/* 4 Query OFDM BB swing default setting Bit[31:21] */
|
||||
for (rf_path = 0 ; rf_path < max_rf_path ; rf_path++) {
|
||||
ele_D = phy_query_bb_reg(priv, bb_swing_reg[rf_path], 0xffe00000);
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK, "0x%x:0x%x ([31:21] = 0x%x)\n", bb_swing_reg[rf_path], phy_query_bb_reg(priv, bb_swing_reg[rf_path], MASKDWORD), ele_D);
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK, "0x%x:0x%x ([31:21] = 0x%x)\n", bb_swing_reg[rf_path], phy_query_bb_reg(priv, bb_swing_reg[rf_path], MASKDWORD), ele_D);
|
||||
for (i = 0; i < OFDM_TABLE_SIZE_8812; i++) {/* 4 */
|
||||
if (ele_D == ofdm_swing_table_8812[i]) {
|
||||
OFDM_index[rf_path] = (unsigned char)i;
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK, "OFDM_index[%d]=%d\n", rf_path, OFDM_index[rf_path]);
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK, "OFDM_index[%d]=%d\n", rf_path, OFDM_index[rf_path]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -829,22 +883,22 @@ odm_txpowertracking_callback_thermal_meter_jaguar_series(
|
||||
#if 0
|
||||
/* Query OFDM path A default setting Bit[31:21] */
|
||||
ele_D = phy_query_bb_reg(priv, 0xc1c, 0xffe00000);
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK, "0xc1c:0x%x ([31:21] = 0x%x)\n", phy_query_bb_reg(priv, 0xc1c, MASKDWORD), ele_D);
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK, "0xc1c:0x%x ([31:21] = 0x%x)\n", phy_query_bb_reg(priv, 0xc1c, MASKDWORD), ele_D);
|
||||
for (i = 0; i < OFDM_TABLE_SIZE_8812; i++) {/* 4 */
|
||||
if (ele_D == ofdm_swing_table_8812[i]) {
|
||||
OFDM_index[0] = (unsigned char)i;
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK, "OFDM_index[0]=%d\n", OFDM_index[0]);
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK, "OFDM_index[0]=%d\n", OFDM_index[0]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
/* Query OFDM path B default setting */
|
||||
if (rf == 2) {
|
||||
ele_D = phy_query_bb_reg(priv, 0xe1c, 0xffe00000);
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK, "0xe1c:0x%x ([32:21] = 0x%x)\n", phy_query_bb_reg(priv, 0xe1c, MASKDWORD), ele_D);
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK, "0xe1c:0x%x ([32:21] = 0x%x)\n", phy_query_bb_reg(priv, 0xe1c, MASKDWORD), ele_D);
|
||||
for (i = 0; i < OFDM_TABLE_SIZE_8812; i++) {
|
||||
if (ele_D == ofdm_swing_table_8812[i]) {
|
||||
OFDM_index[1] = (unsigned char)i;
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK, "OFDM_index[1]=%d\n", OFDM_index[1]);
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK, "OFDM_index[1]=%d\n", OFDM_index[1]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -883,8 +937,8 @@ odm_txpowertracking_callback_thermal_meter_jaguar_series(
|
||||
return;
|
||||
|
||||
if (thermal_value != priv->pshare->thermal_value) {
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK, "\n******** START POWER TRACKING ********\n");
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK, "\nReadback Thermal Meter = 0x%x pre thermal meter 0x%x EEPROMthermalmeter 0x%x\n", thermal_value, priv->pshare->thermal_value, priv->pmib->dot11RFEntry.ther);
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK, "\n******** START POWER TRACKING ********\n");
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK, "\nReadback Thermal Meter = 0x%x pre thermal meter 0x%x EEPROMthermalmeter 0x%x\n", thermal_value, priv->pshare->thermal_value, priv->pmib->dot11RFEntry.ther);
|
||||
delta = RTL_ABS(thermal_value, priv->pmib->dot11RFEntry.ther);
|
||||
delta_LCK = RTL_ABS(thermal_value, priv->pshare->thermal_value_lck);
|
||||
is_decrease = ((thermal_value < priv->pmib->dot11RFEntry.ther) ? 1 : 0);
|
||||
@@ -893,11 +947,11 @@ odm_txpowertracking_callback_thermal_meter_jaguar_series(
|
||||
#ifdef _TRACKING_TABLE_FILE
|
||||
if (priv->pshare->rf_ft_var.pwr_track_file) {
|
||||
for (rf_path = 0; rf_path < max_rf_path; rf_path++) {
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK, "diff: (%s)%d ==> get index from table : %d)\n", (is_decrease ? "-" : "+"), delta, get_tx_tracking_index(priv, channel, rf_path, delta, is_decrease, 0));
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK, "diff: (%s)%d ==> get index from table : %d)\n", (is_decrease ? "-" : "+"), delta, get_tx_tracking_index(priv, channel, rf_path, delta, is_decrease, 0));
|
||||
if (is_decrease) {
|
||||
OFDM_index[rf_path] = priv->pshare->OFDM_index0[rf_path] + get_tx_tracking_index(priv, channel, rf_path, delta, is_decrease, 0);
|
||||
OFDM_index[rf_path] = ((OFDM_index[rf_path] > (OFDM_TABLE_SIZE_8812 - 1)) ? (OFDM_TABLE_SIZE_8812 - 1) : OFDM_index[rf_path]);
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK, ">>> decrese power ---> new OFDM_INDEX:%d (%d + %d)\n", OFDM_index[rf_path], priv->pshare->OFDM_index0[rf_path], get_tx_tracking_index(priv, channel, rf_path, delta, is_decrease, 0));
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK, ">>> decrese power ---> new OFDM_INDEX:%d (%d + %d)\n", OFDM_index[rf_path], priv->pshare->OFDM_index0[rf_path], get_tx_tracking_index(priv, channel, rf_path, delta, is_decrease, 0));
|
||||
#if 0/* RTL8881A_SUPPORT */
|
||||
if (dm->support_ic_type == ODM_RTL8881A) {
|
||||
if (priv->pshare->rf_ft_var.pwrtrk_tx_agc_enable) {
|
||||
@@ -932,7 +986,7 @@ odm_txpowertracking_callback_thermal_meter_jaguar_series(
|
||||
#else
|
||||
OFDM_index[rf_path] = ((OFDM_index[rf_path] < OFDM_min_index) ? OFDM_min_index : OFDM_index[rf_path]);
|
||||
#endif
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK, ">>> increse power ---> new OFDM_INDEX:%d (%d - %d)\n", OFDM_index[rf_path], priv->pshare->OFDM_index0[rf_path], get_tx_tracking_index(priv, channel, rf_path, delta, is_decrease, 0));
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK, ">>> increse power ---> new OFDM_INDEX:%d (%d - %d)\n", OFDM_index[rf_path], priv->pshare->OFDM_index0[rf_path], get_tx_tracking_index(priv, channel, rf_path, delta, is_decrease, 0));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -940,7 +994,7 @@ odm_txpowertracking_callback_thermal_meter_jaguar_series(
|
||||
/* 4 Set new BB swing index */
|
||||
for (rf_path = 0; rf_path < max_rf_path; rf_path++) {
|
||||
phy_set_bb_reg(priv, bb_swing_reg[rf_path], 0xffe00000, ofdm_swing_table_8812[(unsigned int)OFDM_index[rf_path]]);
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK, "Readback 0x%x[31:21] = 0x%x, OFDM_index:%d\n", bb_swing_reg[rf_path], phy_query_bb_reg(priv, bb_swing_reg[rf_path], 0xffe00000), OFDM_index[rf_path]);
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK, "Readback 0x%x[31:21] = 0x%x, OFDM_index:%d\n", bb_swing_reg[rf_path], phy_query_bb_reg(priv, bb_swing_reg[rf_path], 0xffe00000), OFDM_index[rf_path]);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -959,7 +1013,7 @@ odm_txpowertracking_callback_thermal_meter_jaguar_series(
|
||||
RTL_W8(0x522, 0x0);
|
||||
priv->pshare->thermal_value_lck = thermal_value;
|
||||
}
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK, "\n******** END:%s() ********\n", __FUNCTION__);
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK, "\n******** END:%s() ********\n", __FUNCTION__);
|
||||
|
||||
/* update thermal meter value */
|
||||
priv->pshare->thermal_value = thermal_value;
|
||||
@@ -980,9 +1034,9 @@ odm_txpowertracking_callback_thermal_meter(
|
||||
struct dm_rf_calibration_struct *cali_info = &(dm->rf_calibrate_info);
|
||||
struct dm_iqk_info *iqk_info = &dm->IQK_info;
|
||||
|
||||
#if (RTL8197F_SUPPORT == 1 || RTL8822B_SUPPORT == 1 || RTL8821C_SUPPORT == 1)
|
||||
if (dm->support_ic_type == ODM_RTL8197F || dm->support_ic_type == ODM_RTL8822B
|
||||
|| dm->support_ic_type == ODM_RTL8821C) {
|
||||
#if (RTL8197F_SUPPORT == 1 ||RTL8192F_SUPPORT == 1 || RTL8822B_SUPPORT == 1 || RTL8821C_SUPPORT == 1 || RTL8198F_SUPPORT == 1)
|
||||
if (dm->support_ic_type == ODM_RTL8197F || dm->support_ic_type == ODM_RTL8192F || dm->support_ic_type == ODM_RTL8822B
|
||||
|| dm->support_ic_type == ODM_RTL8821C || dm->support_ic_type == ODM_RTL8198F) {
|
||||
odm_txpowertracking_callback_thermal_meter_jaguar_series3(dm);
|
||||
return;
|
||||
}
|
||||
@@ -1064,7 +1118,7 @@ odm_txpowertracking_callback_thermal_meter(
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK, "===>odm_txpowertracking_callback_thermal_meter_8188e, dm->bb_swing_idx_cck_base: %d, dm->bb_swing_idx_ofdm_base: %d\n", cali_info->bb_swing_idx_cck_base, cali_info->bb_swing_idx_ofdm_base);
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK, "===>odm_txpowertracking_callback_thermal_meter_8188e, dm->bb_swing_idx_cck_base: %d, dm->bb_swing_idx_ofdm_base: %d\n", cali_info->bb_swing_idx_cck_base, cali_info->bb_swing_idx_ofdm_base);
|
||||
/*
|
||||
if (!dm->rf_calibrate_info.tm_trigger) {
|
||||
odm_set_rf_reg(dm, RF_PATH_A, c.thermal_reg_addr, BIT(17) | BIT(16), 0x3);
|
||||
@@ -1088,7 +1142,7 @@ odm_txpowertracking_callback_thermal_meter(
|
||||
}
|
||||
|
||||
if (dm->rf_calibrate_info.is_reloadtxpowerindex)
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK, "reload ofdm index for band switch\n");
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK, "reload ofdm index for band switch\n");
|
||||
|
||||
/* 4 4. Calculate average thermal meter */
|
||||
|
||||
@@ -1110,7 +1164,7 @@ odm_txpowertracking_callback_thermal_meter(
|
||||
|
||||
thermal_value = (u8)(thermal_value_avg / (thermal_value_avg_count + 4));
|
||||
cali_info->thermal_value_delta = thermal_value - priv->pmib->dot11RFEntry.ther;
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK, "AVG Thermal Meter = 0x%x\n", thermal_value);
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK, "AVG Thermal Meter = 0x%x\n", thermal_value);
|
||||
}
|
||||
|
||||
/* 4 5. Calculate delta, delta_LCK, delta_IQK. */
|
||||
@@ -1161,8 +1215,8 @@ odm_txpowertracking_callback_thermal_meter(
|
||||
cali_info->bb_swing_idx_cck = dm->rf_calibrate_info.CCK_index;
|
||||
cali_info->bb_swing_idx_ofdm[RF_PATH_A] = dm->rf_calibrate_info.OFDM_index[RF_PATH_A];
|
||||
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK, "The 'CCK' final index(%d) = BaseIndex(%d) + power_index_offset(%d)\n", cali_info->bb_swing_idx_cck, cali_info->bb_swing_idx_cck_base, dm->rf_calibrate_info.power_index_offset);
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK, "The 'OFDM' final index(%d) = BaseIndex(%d) + power_index_offset(%d)\n", cali_info->bb_swing_idx_ofdm[RF_PATH_A], cali_info->bb_swing_idx_ofdm_base, dm->rf_calibrate_info.power_index_offset);
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK, "The 'CCK' final index(%d) = BaseIndex(%d) + power_index_offset(%d)\n", cali_info->bb_swing_idx_cck, cali_info->bb_swing_idx_cck_base, dm->rf_calibrate_info.power_index_offset);
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK, "The 'OFDM' final index(%d) = BaseIndex(%d) + power_index_offset(%d)\n", cali_info->bb_swing_idx_ofdm[RF_PATH_A], cali_info->bb_swing_idx_ofdm_base, dm->rf_calibrate_info.power_index_offset);
|
||||
|
||||
/* 4 7.1 Handle boundary conditions of index. */
|
||||
|
||||
@@ -1179,12 +1233,12 @@ odm_txpowertracking_callback_thermal_meter(
|
||||
else if (dm->rf_calibrate_info.CCK_index < 0)
|
||||
dm->rf_calibrate_info.CCK_index = 0;
|
||||
} else {
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,"The thermal meter is unchanged or TxPowerTracking OFF: thermal_value: %d, dm->rf_calibrate_info.thermal_value: %d)\n", thermal_value, dm->rf_calibrate_info.thermal_value);
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,"The thermal meter is unchanged or TxPowerTracking OFF: thermal_value: %d, dm->rf_calibrate_info.thermal_value: %d)\n", thermal_value, dm->rf_calibrate_info.thermal_value);
|
||||
dm->rf_calibrate_info.power_index_offset = 0;
|
||||
}
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,"TxPowerTracking: [CCK] Swing Current index: %d, Swing base index: %d\n", dm->rf_calibrate_info.CCK_index, cali_info->bb_swing_idx_cck_base);
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,"TxPowerTracking: [CCK] Swing Current index: %d, Swing base index: %d\n", dm->rf_calibrate_info.CCK_index, cali_info->bb_swing_idx_cck_base);
|
||||
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,"TxPowerTracking: [OFDM] Swing Current index: %d, Swing base index: %d\n", dm->rf_calibrate_info.OFDM_index[RF_PATH_A], cali_info->bb_swing_idx_ofdm_base);
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,"TxPowerTracking: [OFDM] Swing Current index: %d, Swing base index: %d\n", dm->rf_calibrate_info.OFDM_index[RF_PATH_A], cali_info->bb_swing_idx_ofdm_base);
|
||||
|
||||
if (dm->rf_calibrate_info.power_index_offset != 0 && dm->rf_calibrate_info.txpowertrack_control) {
|
||||
/* 4 7.2 Configure the Swing Table to adjust Tx Power. */
|
||||
@@ -1196,20 +1250,20 @@ odm_txpowertracking_callback_thermal_meter(
|
||||
/* */
|
||||
/* 2012/04/25 MH Add for tx power tracking to set tx power in tx agc for 88E. */
|
||||
if (thermal_value > dm->rf_calibrate_info.thermal_value) {
|
||||
/* PHYDM_DBG(dm,ODM_COMP_TX_PWR_TRACK, */
|
||||
/* RF_DBG(dm,DBG_RF_TX_PWR_TRACK, */
|
||||
/* "Temperature Increasing: delta_pi: %d, delta_t: %d, Now_t: %d, EFUSE_t: %d, Last_t: %d\n", */
|
||||
/* dm->rf_calibrate_info.power_index_offset, delta, thermal_value, hal_data->eeprom_thermal_meter, dm->rf_calibrate_info.thermal_value); */
|
||||
} else if (thermal_value < dm->rf_calibrate_info.thermal_value) { /* Low temperature */
|
||||
/* PHYDM_DBG(dm,ODM_COMP_TX_PWR_TRACK, */
|
||||
/* RF_DBG(dm,DBG_RF_TX_PWR_TRACK, */
|
||||
/* "Temperature Decreasing: delta_pi: %d, delta_t: %d, Now_t: %d, EFUSE_t: %d, Last_t: %d\n", */
|
||||
/* dm->rf_calibrate_info.power_index_offset, delta, thermal_value, hal_data->eeprom_thermal_meter, dm->rf_calibrate_info.thermal_value); */
|
||||
}
|
||||
if (thermal_value > dm->priv->pmib->dot11RFEntry.ther)
|
||||
{
|
||||
/* PHYDM_DBG(dm,ODM_COMP_TX_PWR_TRACK,"Temperature(%d) hugher than PG value(%d), increases the power by tx_agc\n", thermal_value, hal_data->eeprom_thermal_meter); */
|
||||
/* RF_DBG(dm,DBG_RF_TX_PWR_TRACK,"Temperature(%d) hugher than PG value(%d), increases the power by tx_agc\n", thermal_value, hal_data->eeprom_thermal_meter); */
|
||||
(*c.odm_tx_pwr_track_set_pwr)(dm, TXAGC, 0, 0);
|
||||
} else {
|
||||
/* PHYDM_DBG(dm,ODM_COMP_TX_PWR_TRACK,"Temperature(%d) lower than PG value(%d), increases the power by tx_agc\n", thermal_value, hal_data->eeprom_thermal_meter); */
|
||||
/* RF_DBG(dm,DBG_RF_TX_PWR_TRACK,"Temperature(%d) lower than PG value(%d), increases the power by tx_agc\n", thermal_value, hal_data->eeprom_thermal_meter); */
|
||||
(*c.odm_tx_pwr_track_set_pwr)(dm, BBSWING, RF_PATH_A, indexforchannel);
|
||||
if (is2T)
|
||||
(*c.odm_tx_pwr_track_set_pwr)(dm, BBSWING, RF_PATH_B, indexforchannel);
|
||||
@@ -1221,7 +1275,7 @@ odm_txpowertracking_callback_thermal_meter(
|
||||
|
||||
}
|
||||
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK, "<===dm_TXPowerTrackingCallback_ThermalMeter_8188E\n");
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK, "<===dm_TXPowerTrackingCallback_ThermalMeter_8188E\n");
|
||||
|
||||
dm->rf_calibrate_info.tx_powercount = 0;
|
||||
}
|
||||
|
||||
@@ -13,8 +13,8 @@
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
#ifndef __HAL_PHY_RF_H__
|
||||
#define __HAL_PHY_RF_H__
|
||||
#ifndef __HALPHYRF_H__
|
||||
#define __HALPHYRF_H__
|
||||
|
||||
#include "halrf/halrf_powertracking_ap.h"
|
||||
#include "halrf/halrf_kfree.h"
|
||||
@@ -31,6 +31,22 @@
|
||||
#include "halrf/rtl8821c/halrf_iqk_8821c.h"
|
||||
#endif
|
||||
|
||||
#if (RTL8195B_SUPPORT == 1)
|
||||
// #include "halrf/rtl8195b/halrf.h"
|
||||
#include "halrf/rtl8195b/halrf_iqk_8195b.h"
|
||||
#include "halrf/rtl8195b/halrf_txgapk_8195b.h"
|
||||
#include "halrf/rtl8195b/halrf_dpk_8195b.h"
|
||||
#endif
|
||||
|
||||
#if (RTL8198F_SUPPORT == 1)
|
||||
#include "halrf/rtl8198f/halrf_iqk_8198f.h"
|
||||
#include "halrf/rtl8198f/halrf_dpk_8198f.h"
|
||||
#endif
|
||||
|
||||
#if (RTL8814B_SUPPORT == 1)
|
||||
#include "halrf/rtl8814b/halrf_iqk_8814b.h"
|
||||
#endif
|
||||
|
||||
enum pwrtrack_method {
|
||||
BBSWING,
|
||||
TXAGC,
|
||||
@@ -45,7 +61,7 @@ typedef void (*func_lck)(void *);
|
||||
typedef void (*func_swing)(void *, u8 **, u8 **, u8 **, u8 **);
|
||||
typedef void (*func_swing8814only)(void *, u8 **, u8 **, u8 **, u8 **);
|
||||
typedef void (*func_all_swing)(void *, u8 **, u8 **, u8 **, u8 **, u8 **, u8 **, u8 **, u8 **);
|
||||
|
||||
typedef void (*func_all_swing_ex)(void *, u8 **, u8 **, u8 **, u8 **, u8 **, u8 **, u8 **, u8 **);
|
||||
|
||||
struct txpwrtrack_cfg {
|
||||
u8 swing_table_size_cck;
|
||||
@@ -60,7 +76,8 @@ struct txpwrtrack_cfg {
|
||||
func_lck phy_lc_calibrate;
|
||||
func_swing get_delta_swing_table;
|
||||
func_swing8814only get_delta_swing_table8814only;
|
||||
func_all_swing get_delta_all_swing_table;
|
||||
func_all_swing get_delta_all_swing_table;
|
||||
func_all_swing_ex get_delta_all_swing_table_ex;
|
||||
};
|
||||
|
||||
void
|
||||
@@ -119,4 +136,4 @@ odm_get_right_chnl_place_for_iqk(
|
||||
void phydm_rf_init(void *dm_void);
|
||||
void phydm_rf_watchdog(void *dm_void);
|
||||
|
||||
#endif /* #ifndef __HAL_PHY_RF_H__ */
|
||||
#endif /*#ifndef __HALPHYRF_H__*/
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -23,25 +23,35 @@
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
#ifndef __HAL_PHY_RF_H__
|
||||
#define __HAL_PHY_RF_H__
|
||||
#ifndef __HALPHYRF_H__
|
||||
#define __HALPHYRF_H__
|
||||
|
||||
#include "halrf/halrf_kfree.h"
|
||||
#if (RTL8814A_SUPPORT == 1)
|
||||
#include "halrf/rtl8814a/halrf_iqk_8814a.h"
|
||||
#include "halrf/rtl8814a/halrf_iqk_8814a.h"
|
||||
#endif
|
||||
|
||||
#if (RTL8822B_SUPPORT == 1)
|
||||
#include "halrf/rtl8822b/halrf_iqk_8822b.h"
|
||||
#include "halrf/rtl8822b/halrf_iqk_8822b.h"
|
||||
#endif
|
||||
|
||||
#if (RTL8821C_SUPPORT == 1)
|
||||
#include "halrf/rtl8821c/halrf_iqk_8821c.h"
|
||||
#include "halrf/rtl8821c/halrf_iqk_8821c.h"
|
||||
#endif
|
||||
|
||||
#if (RTL8195B_SUPPORT == 1)
|
||||
/* #include "halrf/rtl8195b/halrf.h" */
|
||||
#include "halrf/rtl8195b/halrf_iqk_8195b.h"
|
||||
#include "halrf/rtl8195b/halrf_txgapk_8195b.h"
|
||||
#include "halrf/rtl8195b/halrf_dpk_8195b.h"
|
||||
#endif
|
||||
|
||||
#if (RTL8814B_SUPPORT == 1)
|
||||
#include "halrf/rtl8814b/halrf_iqk_8814b.h"
|
||||
#endif
|
||||
|
||||
#include "halrf/halrf_powertracking_ce.h"
|
||||
|
||||
|
||||
enum spur_cal_method {
|
||||
PLL_RESET,
|
||||
AFE_PHASE_SEL
|
||||
@@ -56,69 +66,49 @@ enum pwrtrack_method {
|
||||
MIX_5G_TSSI_2G_MODE
|
||||
};
|
||||
|
||||
typedef void (*func_set_pwr)(void *, enum pwrtrack_method, u8, u8);
|
||||
typedef void(*func_iqk)(void *, u8, u8, u8);
|
||||
typedef void (*func_lck)(void *);
|
||||
typedef void (*func_swing)(void *, u8 **, u8 **, u8 **, u8 **);
|
||||
typedef void (*func_swing8814only)(void *, u8 **, u8 **, u8 **, u8 **);
|
||||
typedef void(*func_swing_xtal)(void *, s8 **, s8 **);
|
||||
typedef void(*func_set_xtal)(void *);
|
||||
typedef void (*func_set_pwr)(void *, enum pwrtrack_method, u8, u8);
|
||||
typedef void (*func_iqk)(void *, u8, u8, u8);
|
||||
typedef void (*func_lck)(void *);
|
||||
typedef void (*func_swing)(void *, u8 **, u8 **, u8 **, u8 **);
|
||||
typedef void (*func_swing8814only)(void *, u8 **, u8 **, u8 **, u8 **);
|
||||
typedef void (*func_swing_xtal)(void *, s8 **, s8 **);
|
||||
typedef void (*func_set_xtal)(void *);
|
||||
|
||||
struct txpwrtrack_cfg {
|
||||
u8 swing_table_size_cck;
|
||||
u8 swing_table_size_ofdm;
|
||||
u8 threshold_iqk;
|
||||
u8 threshold_dpk;
|
||||
u8 average_thermal_num;
|
||||
u8 rf_path_count;
|
||||
u32 thermal_reg_addr;
|
||||
func_set_pwr odm_tx_pwr_track_set_pwr;
|
||||
func_iqk do_iqk;
|
||||
func_lck phy_lc_calibrate;
|
||||
func_swing get_delta_swing_table;
|
||||
func_swing8814only get_delta_swing_table8814only;
|
||||
func_swing_xtal get_delta_swing_xtal_table;
|
||||
func_set_xtal odm_txxtaltrack_set_xtal;
|
||||
u8 swing_table_size_cck;
|
||||
u8 swing_table_size_ofdm;
|
||||
u8 threshold_iqk;
|
||||
u8 threshold_dpk;
|
||||
u8 average_thermal_num;
|
||||
u8 rf_path_count;
|
||||
u32 thermal_reg_addr;
|
||||
func_set_pwr odm_tx_pwr_track_set_pwr;
|
||||
func_iqk do_iqk;
|
||||
func_lck phy_lc_calibrate;
|
||||
func_swing get_delta_swing_table;
|
||||
func_swing8814only get_delta_swing_table8814only;
|
||||
func_swing_xtal get_delta_swing_xtal_table;
|
||||
func_set_xtal odm_txxtaltrack_set_xtal;
|
||||
};
|
||||
|
||||
void
|
||||
configure_txpower_track(
|
||||
void *dm_void,
|
||||
struct txpwrtrack_cfg *config
|
||||
);
|
||||
void configure_txpower_track(void *dm_void, struct txpwrtrack_cfg *config);
|
||||
|
||||
void odm_clear_txpowertracking_state(void *dm_void);
|
||||
|
||||
void
|
||||
odm_clear_txpowertracking_state(
|
||||
void *dm_void
|
||||
);
|
||||
|
||||
void
|
||||
odm_txpowertracking_callback_thermal_meter(
|
||||
#if (DM_ODM_SUPPORT_TYPE & ODM_AP)
|
||||
void *dm_void
|
||||
void odm_txpowertracking_callback_thermal_meter(void *dm_void);
|
||||
#elif (DM_ODM_SUPPORT_TYPE & ODM_CE)
|
||||
void *dm
|
||||
void odm_txpowertracking_callback_thermal_meter(void *dm);
|
||||
#else
|
||||
void *adapter
|
||||
void odm_txpowertracking_callback_thermal_meter(void *adapter);
|
||||
#endif
|
||||
);
|
||||
|
||||
#define ODM_TARGET_CHNL_NUM_2G_5G 59
|
||||
|
||||
void odm_reset_iqk_result(void *dm_void);
|
||||
u8 odm_get_right_chnl_place_for_iqk(u8 chnl);
|
||||
|
||||
#define ODM_TARGET_CHNL_NUM_2G_5G 59
|
||||
void phydm_rf_init(void *dm_void);
|
||||
void phydm_rf_watchdog(void *dm_void);
|
||||
|
||||
|
||||
void
|
||||
odm_reset_iqk_result(
|
||||
void *dm_void
|
||||
);
|
||||
u8
|
||||
odm_get_right_chnl_place_for_iqk(
|
||||
u8 chnl
|
||||
);
|
||||
|
||||
void phydm_rf_init(void *dm_void);
|
||||
void phydm_rf_watchdog(void *dm_void);
|
||||
|
||||
#endif /* #ifndef __HAL_PHY_RF_H__ */
|
||||
#endif /*__HALPHYRF_H__*/
|
||||
|
||||
528
hal/phydm/halrf/halphyrf_iot.c
Normal file
528
hal/phydm/halrf/halphyrf_iot.c
Normal file
@@ -0,0 +1,528 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Copyright(c) 2007 - 2017 Realtek Corporation.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of version 2 of the GNU General Public License as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
* more details.
|
||||
*
|
||||
* The full GNU General Public License is included in this distribution in the
|
||||
* file called LICENSE.
|
||||
*
|
||||
* Contact Information:
|
||||
* wlanfae <wlanfae@realtek.com>
|
||||
* Realtek Corporation, No. 2, Innovation Road II, Hsinchu Science Park,
|
||||
* Hsinchu 300, Taiwan.
|
||||
*
|
||||
* Larry Finger <Larry.Finger@lwfinger.net>
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
#include "mp_precomp.h"
|
||||
#include "phydm_precomp.h"
|
||||
|
||||
#define CALCULATE_SWINGTALBE_OFFSET(_offset, _direction, _size, _delta_thermal) \
|
||||
do {\
|
||||
for (_offset = 0; _offset < _size; _offset++) { \
|
||||
if (_delta_thermal < thermal_threshold[_direction][_offset]) { \
|
||||
if (_offset != 0)\
|
||||
_offset--;\
|
||||
break;\
|
||||
} \
|
||||
} \
|
||||
if (_offset >= _size)\
|
||||
_offset = _size-1;\
|
||||
} while (0)
|
||||
|
||||
void configure_txpower_track(
|
||||
void *dm_void,
|
||||
struct txpwrtrack_cfg *config
|
||||
)
|
||||
{
|
||||
struct dm_struct *dm = (struct dm_struct *)dm_void;
|
||||
#if RTL8195B_SUPPORT
|
||||
if (dm->support_ic_type == ODM_RTL8195B)
|
||||
configure_txpower_track_8195b(config);
|
||||
#endif
|
||||
|
||||
#if RTL8721D_SUPPORT
|
||||
if (dm->support_ic_type == ODM_RTL8721D)
|
||||
configure_txpower_track_8721d(config);
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
/* **********************************************************************
|
||||
* <20121113, Kordan> This function should be called when tx_agc changed.
|
||||
* Otherwise the previous compensation is gone, because we record the
|
||||
* delta of temperature between two TxPowerTracking watch dogs.
|
||||
*
|
||||
* NOTE: If Tx BB swing or Tx scaling is varified during run-time, still
|
||||
* need to call this function.
|
||||
* ********************************************************************** */
|
||||
void
|
||||
odm_clear_txpowertracking_state(
|
||||
void *dm_void
|
||||
)
|
||||
{
|
||||
struct dm_struct *dm = (struct dm_struct *)dm_void;
|
||||
struct _hal_rf_ *rf = &dm->rf_table;
|
||||
u8 p = 0;
|
||||
struct dm_rf_calibration_struct *cali_info = &dm->rf_calibrate_info;
|
||||
|
||||
cali_info->bb_swing_idx_cck_base = cali_info->default_cck_index;
|
||||
cali_info->bb_swing_idx_cck = cali_info->default_cck_index;
|
||||
dm->rf_calibrate_info.CCK_index = 0;
|
||||
|
||||
for (p = RF_PATH_A; p < MAX_RF_PATH; ++p) {
|
||||
cali_info->bb_swing_idx_ofdm_base[p] = cali_info->default_ofdm_index;
|
||||
cali_info->bb_swing_idx_ofdm[p] = cali_info->default_ofdm_index;
|
||||
cali_info->OFDM_index[p] = cali_info->default_ofdm_index;
|
||||
|
||||
cali_info->power_index_offset[p] = 0;
|
||||
cali_info->delta_power_index[p] = 0;
|
||||
cali_info->delta_power_index_last[p] = 0;
|
||||
|
||||
cali_info->absolute_ofdm_swing_idx[p] = 0;
|
||||
cali_info->remnant_ofdm_swing_idx[p] = 0;
|
||||
cali_info->kfree_offset[p] = 0;
|
||||
}
|
||||
|
||||
cali_info->modify_tx_agc_flag_path_a = false;
|
||||
cali_info->modify_tx_agc_flag_path_b = false;
|
||||
cali_info->modify_tx_agc_flag_path_c = false;
|
||||
cali_info->modify_tx_agc_flag_path_d = false;
|
||||
cali_info->remnant_cck_swing_idx = 0;
|
||||
cali_info->thermal_value = rf->eeprom_thermal;
|
||||
cali_info->modify_tx_agc_value_cck = 0;
|
||||
cali_info->modify_tx_agc_value_ofdm = 0;
|
||||
}
|
||||
|
||||
void
|
||||
odm_txpowertracking_callback_thermal_meter(
|
||||
void *dm_void
|
||||
)
|
||||
{
|
||||
struct dm_struct *dm = (struct dm_struct *)dm_void;
|
||||
struct _hal_rf_ *rf = &dm->rf_table;
|
||||
struct dm_rf_calibration_struct *cali_info = &dm->rf_calibrate_info;
|
||||
struct dm_iqk_info *iqk_info = &dm->IQK_info;
|
||||
|
||||
u8 thermal_value = 0, delta, delta_LCK, delta_IQK, p = 0, i = 0;
|
||||
u8 thermal_value_avg_count = 0;
|
||||
u32 thermal_value_avg = 0, regc80, regcd0, regcd4, regab4;
|
||||
|
||||
u8 OFDM_min_index = 0; /* OFDM BB Swing should be less than +3.0dB, which is required by Arthur */
|
||||
u8 indexforchannel = 0; /* get_right_chnl_place_for_iqk(hal_data->current_channel) */
|
||||
u8 power_tracking_type = rf->pwt_type;
|
||||
u8 xtal_offset_eanble = 0;
|
||||
s8 thermal_value_temp = 0;
|
||||
|
||||
struct txpwrtrack_cfg c = {0};
|
||||
|
||||
/* 4 1. The following TWO tables decide the final index of OFDM/CCK swing table. */
|
||||
u8 *delta_swing_table_idx_tup_a = NULL;
|
||||
u8 *delta_swing_table_idx_tdown_a = NULL;
|
||||
u8 *delta_swing_table_idx_tup_b = NULL;
|
||||
u8 *delta_swing_table_idx_tdown_b = NULL;
|
||||
/*for Xtal Offset by James.Tung*/
|
||||
s8 *delta_swing_table_xtal_up = NULL;
|
||||
s8 *delta_swing_table_xtal_down = NULL;
|
||||
|
||||
/* 4 2. Initialization ( 7 steps in total ) */
|
||||
|
||||
configure_txpower_track(dm, &c);
|
||||
|
||||
(*c.get_delta_swing_table)(dm, (u8 **)&delta_swing_table_idx_tup_a, (u8 **)&delta_swing_table_idx_tdown_a,
|
||||
(u8 **)&delta_swing_table_idx_tup_b, (u8 **)&delta_swing_table_idx_tdown_b);
|
||||
|
||||
/*for Xtal Offset*/
|
||||
if (dm->support_ic_type & (ODM_RTL8195B | ODM_RTL8721D))
|
||||
(*c.get_delta_swing_xtal_table)(dm,
|
||||
(s8 **)&delta_swing_table_xtal_up,
|
||||
(s8 **)&delta_swing_table_xtal_down);
|
||||
|
||||
cali_info->txpowertracking_callback_cnt++; /*cosa add for debug*/
|
||||
cali_info->is_txpowertracking_init = true;
|
||||
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,
|
||||
"===>odm_txpowertracking_callback_thermal_meter\n cali_info->bb_swing_idx_cck_base: %d, cali_info->bb_swing_idx_ofdm_base[A]: %d, cali_info->default_ofdm_index: %d\n",
|
||||
cali_info->bb_swing_idx_cck_base,
|
||||
cali_info->bb_swing_idx_ofdm_base[RF_PATH_A],
|
||||
cali_info->default_ofdm_index);
|
||||
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,
|
||||
"cali_info->txpowertrack_control = %d, hal_data->eeprom_thermal_meter %d\n",
|
||||
cali_info->txpowertrack_control, rf->eeprom_thermal);
|
||||
|
||||
if (dm->support_ic_type == ODM_RTL8721D)
|
||||
thermal_value = (u8)odm_get_rf_reg(dm, RF_PATH_A,
|
||||
c.thermal_reg_addr, 0x7e0);
|
||||
/* 0x42: RF Reg[10:5] 8721D */
|
||||
else
|
||||
thermal_value = (u8)odm_get_rf_reg(dm, RF_PATH_A,
|
||||
c.thermal_reg_addr, 0xfc00);
|
||||
/* 0x42: RF Reg[15:10] 88E */
|
||||
|
||||
thermal_value_temp = thermal_value + phydm_get_thermal_offset(dm);
|
||||
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,
|
||||
"thermal_value_temp(%d) = thermal_value(%d) + power_trim_thermal(%d)\n", thermal_value_temp, thermal_value, phydm_get_thermal_offset(dm));
|
||||
|
||||
if (thermal_value_temp > 63)
|
||||
thermal_value = 63;
|
||||
else if (thermal_value_temp < 0)
|
||||
thermal_value = 0;
|
||||
else
|
||||
thermal_value = thermal_value_temp;
|
||||
|
||||
if (!cali_info->txpowertrack_control)
|
||||
return;
|
||||
|
||||
if (rf->eeprom_thermal == 0xff) {
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK, "no pg, hal_data->eeprom_thermal_meter = 0x%x\n", rf->eeprom_thermal);
|
||||
return;
|
||||
}
|
||||
#if 0
|
||||
/*4 3. Initialize ThermalValues of rf_calibrate_info*/
|
||||
//if (cali_info->is_reloadtxpowerindex)
|
||||
// RF_DBG(dm, DBG_RF_TX_PWR_TRACK, "reload ofdm index for band switch\n");
|
||||
#endif
|
||||
/*4 4. Calculate average thermal meter*/
|
||||
|
||||
cali_info->thermal_value_avg[cali_info->thermal_value_avg_index] = thermal_value;
|
||||
cali_info->thermal_value_avg_index++;
|
||||
if (cali_info->thermal_value_avg_index == c.average_thermal_num) /*Average times = c.average_thermal_num*/
|
||||
cali_info->thermal_value_avg_index = 0;
|
||||
|
||||
for (i = 0; i < c.average_thermal_num; i++) {
|
||||
if (cali_info->thermal_value_avg[i]) {
|
||||
thermal_value_avg += cali_info->thermal_value_avg[i];
|
||||
thermal_value_avg_count++;
|
||||
}
|
||||
}
|
||||
|
||||
if (thermal_value_avg_count) { /* Calculate Average thermal_value after average enough times */
|
||||
thermal_value = (u8)(thermal_value_avg / thermal_value_avg_count);
|
||||
cali_info->thermal_value_delta = thermal_value - rf->eeprom_thermal;
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,
|
||||
"AVG Thermal Meter = 0x%X, EFUSE Thermal base = 0x%X\n", thermal_value, rf->eeprom_thermal);
|
||||
}
|
||||
|
||||
/* 4 5. Calculate delta, delta_LCK, delta_IQK. */
|
||||
/* "delta" here is used to determine whether thermal value changes or not. */
|
||||
delta = (thermal_value > cali_info->thermal_value) ? (thermal_value - cali_info->thermal_value) : (cali_info->thermal_value - thermal_value);
|
||||
delta_LCK = (thermal_value > cali_info->thermal_value_lck) ? (thermal_value - cali_info->thermal_value_lck) : (cali_info->thermal_value_lck - thermal_value);
|
||||
delta_IQK = (thermal_value > cali_info->thermal_value_iqk) ? (thermal_value - cali_info->thermal_value_iqk) : (cali_info->thermal_value_iqk - thermal_value);
|
||||
|
||||
/*4 6. If necessary, do LCK.*/
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK, "(delta, delta_LCK, delta_IQK) = (%d, %d, %d)\n", delta, delta_LCK, delta_IQK);
|
||||
|
||||
/* Wait sacn to do LCK by RF Jenyu*/
|
||||
if ((!*dm->is_scan_in_process) && !iqk_info->rfk_forbidden &&
|
||||
(!*dm->is_tdma)) {
|
||||
/* Delta temperature is equal to or larger than 20 centigrade.*/
|
||||
if (delta_LCK >= c.threshold_iqk) {
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK, "delta_LCK(%d) >= threshold_iqk(%d)\n", delta_LCK, c.threshold_iqk);
|
||||
cali_info->thermal_value_lck = thermal_value;
|
||||
|
||||
/*Use RTLCK, so close power tracking driver LCK*/
|
||||
(*c.phy_lc_calibrate)(dm);
|
||||
}
|
||||
}
|
||||
|
||||
/*3 7. If necessary, move the index of swing table to adjust Tx power.*/
|
||||
if (delta > 0 && cali_info->txpowertrack_control) {
|
||||
/* "delta" here is used to record the absolute value of difference. */
|
||||
delta = thermal_value > rf->eeprom_thermal ? (thermal_value - rf->eeprom_thermal) : (rf->eeprom_thermal - thermal_value);
|
||||
|
||||
if (delta >= TXPWR_TRACK_TABLE_SIZE)
|
||||
delta = TXPWR_TRACK_TABLE_SIZE - 1;
|
||||
|
||||
/*4 7.1 The Final Power index = BaseIndex + power_index_offset*/
|
||||
if (thermal_value > rf->eeprom_thermal) {
|
||||
for (p = RF_PATH_A; p < c.rf_path_count; p++) {
|
||||
cali_info->delta_power_index_last[p] = cali_info->delta_power_index[p]; /*recording poer index offset*/
|
||||
switch (p) {
|
||||
case RF_PATH_B:
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,
|
||||
"delta_swing_table_idx_tup_b[%d] = %d\n", delta, delta_swing_table_idx_tup_b[delta]);
|
||||
|
||||
cali_info->delta_power_index[p] =
|
||||
delta_swing_table_idx_tup_b
|
||||
[delta];
|
||||
cali_info->absolute_ofdm_swing_idx[p] =
|
||||
delta_swing_table_idx_tup_b
|
||||
[delta];
|
||||
/*Record delta swing for mix mode*/
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,
|
||||
"******Temp is higher and cali_info->absolute_ofdm_swing_idx[RF_PATH_B] = %d\n", cali_info->absolute_ofdm_swing_idx[p]);
|
||||
break;
|
||||
|
||||
default:
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,
|
||||
"delta_swing_table_idx_tup_a[%d] = %d\n", delta, delta_swing_table_idx_tup_a[delta]);
|
||||
|
||||
cali_info->delta_power_index[p] = delta_swing_table_idx_tup_a[delta];
|
||||
cali_info->absolute_ofdm_swing_idx[p] =
|
||||
delta_swing_table_idx_tup_a[delta];
|
||||
/*Record delta swing*/
|
||||
/*for mix mode power tracking*/
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,
|
||||
"******Temp is higher and cali_info->absolute_ofdm_swing_idx[RF_PATH_A] = %d\n", cali_info->absolute_ofdm_swing_idx[p]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
/* JJ ADD 20161014 */
|
||||
if (dm->support_ic_type &
|
||||
(ODM_RTL8195B | ODM_RTL8721D)) {
|
||||
/*Save xtal_offset from Xtal table*/
|
||||
cali_info->xtal_offset_last = cali_info->xtal_offset; /*recording last Xtal offset*/
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,
|
||||
"[Xtal] delta_swing_table_xtal_up[%d] = %d\n", delta, delta_swing_table_xtal_up[delta]);
|
||||
cali_info->xtal_offset = delta_swing_table_xtal_up[delta];
|
||||
xtal_offset_eanble = (cali_info->xtal_offset_last != cali_info->xtal_offset);
|
||||
}
|
||||
|
||||
} else {
|
||||
for (p = RF_PATH_A; p < c.rf_path_count; p++) {
|
||||
cali_info->delta_power_index_last[p] = cali_info->delta_power_index[p]; /*recording poer index offset*/
|
||||
|
||||
switch (p) {
|
||||
case RF_PATH_B:
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,
|
||||
"delta_swing_table_idx_tdown_b[%d] = %d\n", delta, delta_swing_table_idx_tdown_b[delta]);
|
||||
cali_info->delta_power_index[p] = -1 * delta_swing_table_idx_tdown_b[delta];
|
||||
cali_info->absolute_ofdm_swing_idx[p] = -1 * delta_swing_table_idx_tdown_b[delta]; /*Record delta swing for mix mode power tracking*/
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,
|
||||
"******Temp is lower and cali_info->absolute_ofdm_swing_idx[RF_PATH_B] = %d\n", cali_info->absolute_ofdm_swing_idx[p]);
|
||||
break;
|
||||
|
||||
default:
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,
|
||||
"delta_swing_table_idx_tdown_a[%d] = %d\n", delta, delta_swing_table_idx_tdown_a[delta]);
|
||||
cali_info->delta_power_index[p] = -1 * delta_swing_table_idx_tdown_a[delta];
|
||||
cali_info->absolute_ofdm_swing_idx[p] = -1 * delta_swing_table_idx_tdown_a[delta]; /*Record delta swing for mix mode power tracking*/
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,
|
||||
"******Temp is lower and cali_info->absolute_ofdm_swing_idx[RF_PATH_A] = %d\n", cali_info->absolute_ofdm_swing_idx[p]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
/* JJ ADD 20161014 */
|
||||
|
||||
if (dm->support_ic_type &
|
||||
(ODM_RTL8195B | ODM_RTL8721D)) {
|
||||
/*Save xtal_offset from Xtal table*/
|
||||
cali_info->xtal_offset_last = cali_info->xtal_offset; /*recording last Xtal offset*/
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,
|
||||
"[Xtal] delta_swing_table_xtal_down[%d] = %d\n", delta, delta_swing_table_xtal_down[delta]);
|
||||
cali_info->xtal_offset = delta_swing_table_xtal_down[delta];
|
||||
xtal_offset_eanble = (cali_info->xtal_offset_last != cali_info->xtal_offset);
|
||||
}
|
||||
}
|
||||
#if 0
|
||||
for (p = RF_PATH_A; p < c.rf_path_count; p++) {
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,
|
||||
"\n\n=========================== [path-%d] Calculating power_index_offset===========================\n", p);
|
||||
|
||||
if (cali_info->delta_power_index[p] == cali_info->delta_power_index_last[p]) /*If Thermal value changes but lookup table value still the same*/
|
||||
cali_info->power_index_offset[p] = 0;
|
||||
else
|
||||
cali_info->power_index_offset[p] = cali_info->delta_power_index[p] - cali_info->delta_power_index_last[p]; /*Power index diff between 2 times Power Tracking*/
|
||||
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,
|
||||
"[path-%d] power_index_offset(%d) = delta_power_index(%d) - delta_power_index_last(%d)\n", p, cali_info->power_index_offset[p], cali_info->delta_power_index[p], cali_info->delta_power_index_last[p]);
|
||||
|
||||
cali_info->OFDM_index[p] = cali_info->bb_swing_idx_ofdm_base[p] + cali_info->power_index_offset[p];
|
||||
cali_info->CCK_index = cali_info->bb_swing_idx_cck_base + cali_info->power_index_offset[p];
|
||||
|
||||
cali_info->bb_swing_idx_cck = cali_info->CCK_index;
|
||||
cali_info->bb_swing_idx_ofdm[p] = cali_info->OFDM_index[p];
|
||||
|
||||
/*************Print BB Swing base and index Offset*************/
|
||||
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,
|
||||
"The 'CCK' final index(%d) = BaseIndex(%d) + power_index_offset(%d)\n", cali_info->bb_swing_idx_cck, cali_info->bb_swing_idx_cck_base, cali_info->power_index_offset[p]);
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,
|
||||
"The 'OFDM' final index(%d) = BaseIndex[%d](%d) + power_index_offset(%d)\n", cali_info->bb_swing_idx_ofdm[p], p, cali_info->bb_swing_idx_ofdm_base[p], cali_info->power_index_offset[p]);
|
||||
|
||||
/*4 7.1 Handle boundary conditions of index.*/
|
||||
|
||||
if (cali_info->OFDM_index[p] > c.swing_table_size_ofdm - 1)
|
||||
cali_info->OFDM_index[p] = c.swing_table_size_ofdm - 1;
|
||||
else if (cali_info->OFDM_index[p] <= OFDM_min_index)
|
||||
cali_info->OFDM_index[p] = OFDM_min_index;
|
||||
}
|
||||
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,
|
||||
"\n\n========================================================================================================\n");
|
||||
|
||||
if (cali_info->CCK_index > c.swing_table_size_cck - 1)
|
||||
cali_info->CCK_index = c.swing_table_size_cck - 1;
|
||||
else if (cali_info->CCK_index <= 0)
|
||||
cali_info->CCK_index = 0;
|
||||
#endif
|
||||
} else {
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,
|
||||
"The thermal meter is unchanged or TxPowerTracking OFF(%d): thermal_value: %d, cali_info->thermal_value: %d\n",
|
||||
cali_info->txpowertrack_control, thermal_value, cali_info->thermal_value);
|
||||
|
||||
for (p = RF_PATH_A; p < c.rf_path_count; p++)
|
||||
cali_info->power_index_offset[p] = 0;
|
||||
}
|
||||
#if 0
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,
|
||||
"TxPowerTracking: [CCK] Swing Current index: %d, Swing base index: %d\n",
|
||||
cali_info->CCK_index, cali_info->bb_swing_idx_cck_base); /*Print Swing base & current*/
|
||||
|
||||
for (p = RF_PATH_A; p < c.rf_path_count; p++) {
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,
|
||||
"TxPowerTracking: [OFDM] Swing Current index: %d, Swing base index[%d]: %d\n",
|
||||
cali_info->OFDM_index[p], p, cali_info->bb_swing_idx_ofdm_base[p]);
|
||||
}
|
||||
#endif
|
||||
if (thermal_value > rf->eeprom_thermal) {
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,
|
||||
"Temperature(%d) higher than PG value(%d)\n", thermal_value, rf->eeprom_thermal);
|
||||
|
||||
if (dm->support_ic_type == ODM_RTL8188E ||
|
||||
dm->support_ic_type == ODM_RTL8192E ||
|
||||
dm->support_ic_type == ODM_RTL8821 ||
|
||||
dm->support_ic_type == ODM_RTL8812 ||
|
||||
dm->support_ic_type == ODM_RTL8723B ||
|
||||
dm->support_ic_type == ODM_RTL8814A ||
|
||||
dm->support_ic_type == ODM_RTL8703B ||
|
||||
dm->support_ic_type == ODM_RTL8188F ||
|
||||
dm->support_ic_type == ODM_RTL8822B ||
|
||||
dm->support_ic_type == ODM_RTL8723D ||
|
||||
dm->support_ic_type == ODM_RTL8821C ||
|
||||
dm->support_ic_type == ODM_RTL8710B ||
|
||||
dm->support_ic_type == ODM_RTL8192F ||
|
||||
dm->support_ic_type == ODM_RTL8195B ||
|
||||
dm->support_ic_type == ODM_RTL8721D){
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK, "**********Enter POWER Tracking MIX_MODE**********\n");
|
||||
for (p = RF_PATH_A; p < c.rf_path_count; p++)
|
||||
(*c.odm_tx_pwr_track_set_pwr)(dm, MIX_MODE, p, 0);
|
||||
} else {
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK, "**********Enter POWER Tracking BBSWING_MODE**********\n");
|
||||
for (p = RF_PATH_A; p < c.rf_path_count; p++)
|
||||
(*c.odm_tx_pwr_track_set_pwr)(dm, BBSWING, p, indexforchannel);
|
||||
}
|
||||
} else {
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,
|
||||
"Temperature(%d) lower than PG value(%d)\n", thermal_value, rf->eeprom_thermal);
|
||||
|
||||
if (dm->support_ic_type == ODM_RTL8188E ||
|
||||
dm->support_ic_type == ODM_RTL8192E ||
|
||||
dm->support_ic_type == ODM_RTL8821 ||
|
||||
dm->support_ic_type == ODM_RTL8812 ||
|
||||
dm->support_ic_type == ODM_RTL8723B ||
|
||||
dm->support_ic_type == ODM_RTL8814A ||
|
||||
dm->support_ic_type == ODM_RTL8703B ||
|
||||
dm->support_ic_type == ODM_RTL8188F ||
|
||||
dm->support_ic_type == ODM_RTL8822B ||
|
||||
dm->support_ic_type == ODM_RTL8723D ||
|
||||
dm->support_ic_type == ODM_RTL8821C ||
|
||||
dm->support_ic_type == ODM_RTL8710B ||
|
||||
dm->support_ic_type == ODM_RTL8192F ||
|
||||
dm->support_ic_type == ODM_RTL8195B ||
|
||||
dm->support_ic_type == ODM_RTL8721D) {
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK, "**********Enter POWER Tracking MIX_MODE**********\n");
|
||||
for (p = RF_PATH_A; p < c.rf_path_count; p++)
|
||||
(*c.odm_tx_pwr_track_set_pwr)(dm, MIX_MODE, p, indexforchannel);
|
||||
} else {
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK, "**********Enter POWER Tracking BBSWING_MODE**********\n");
|
||||
for (p = RF_PATH_A; p < c.rf_path_count; p++)
|
||||
(*c.odm_tx_pwr_track_set_pwr)(dm, BBSWING, p, indexforchannel);
|
||||
}
|
||||
|
||||
cali_info->bb_swing_idx_cck_base = cali_info->bb_swing_idx_cck; /*Record last time Power Tracking result as base.*/
|
||||
for (p = RF_PATH_A; p < c.rf_path_count; p++)
|
||||
cali_info->bb_swing_idx_ofdm_base[p] = cali_info->bb_swing_idx_ofdm[p];
|
||||
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,
|
||||
"cali_info->thermal_value = %d thermal_value= %d\n", cali_info->thermal_value, thermal_value);
|
||||
|
||||
cali_info->thermal_value = thermal_value; /*Record last Power Tracking Thermal value*/
|
||||
}
|
||||
|
||||
/* JJ ADD 20161014 */
|
||||
if (dm->support_ic_type == (ODM_RTL8195B | ODM_RTL8721D)) {
|
||||
if (xtal_offset_eanble != 0 && cali_info->txpowertrack_control && (rf->eeprom_thermal != 0xff)) {
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK, "**********Enter Xtal Tracking**********\n");
|
||||
|
||||
if (thermal_value > rf->eeprom_thermal) {
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,
|
||||
"Temperature(%d) higher than PG value(%d)\n", thermal_value, rf->eeprom_thermal);
|
||||
(*c.odm_txxtaltrack_set_xtal)(dm);
|
||||
} else {
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,
|
||||
"Temperature(%d) lower than PG value(%d)\n", thermal_value, rf->eeprom_thermal);
|
||||
(*c.odm_txxtaltrack_set_xtal)(dm);
|
||||
}
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK, "**********End Xtal Tracking**********\n");
|
||||
}
|
||||
}
|
||||
|
||||
/* Wait sacn to do IQK by RF Jenyu*/
|
||||
if ((!*dm->is_scan_in_process) && (!iqk_info->rfk_forbidden)) {
|
||||
/*Delta temperature is equal to or larger than 20 centigrade (When threshold is 8).*/
|
||||
if (delta_IQK >= c.threshold_iqk) {
|
||||
cali_info->thermal_value_iqk = thermal_value;
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK, "delta_IQK(%d) >= threshold_iqk(%d)\n", delta_IQK, c.threshold_iqk);
|
||||
if (!cali_info->is_iqk_in_progress)
|
||||
(*c.do_iqk)(dm, delta_IQK, thermal_value, 8);
|
||||
}
|
||||
}
|
||||
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK, "<===odm_txpowertracking_callback_thermal_meter\n");
|
||||
|
||||
cali_info->tx_powercount = 0;
|
||||
}
|
||||
|
||||
/* 3============================================================
|
||||
* 3 IQ Calibration
|
||||
* 3============================================================
|
||||
*/
|
||||
|
||||
void
|
||||
odm_reset_iqk_result(
|
||||
void *dm_void
|
||||
)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
u8 odm_get_right_chnl_place_for_iqk(u8 chnl)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void
|
||||
odm_iq_calibrate(
|
||||
struct dm_struct *dm
|
||||
)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void phydm_rf_init(void *dm_void)
|
||||
{
|
||||
struct dm_struct *dm = (struct dm_struct *)dm_void;
|
||||
|
||||
odm_txpowertracking_init(dm);
|
||||
|
||||
odm_clear_txpowertracking_state(dm);
|
||||
}
|
||||
|
||||
void phydm_rf_watchdog(void *dm_void)
|
||||
{
|
||||
struct dm_struct *dm = (struct dm_struct *)dm_void;
|
||||
|
||||
odm_txpowertracking_check(dm);
|
||||
}
|
||||
124
hal/phydm/halrf/halphyrf_iot.h
Normal file
124
hal/phydm/halrf/halphyrf_iot.h
Normal file
@@ -0,0 +1,124 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Copyright(c) 2007 - 2017 Realtek Corporation.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of version 2 of the GNU General Public License as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
* more details.
|
||||
*
|
||||
* The full GNU General Public License is included in this distribution in the
|
||||
* file called LICENSE.
|
||||
*
|
||||
* Contact Information:
|
||||
* wlanfae <wlanfae@realtek.com>
|
||||
* Realtek Corporation, No. 2, Innovation Road II, Hsinchu Science Park,
|
||||
* Hsinchu 300, Taiwan.
|
||||
*
|
||||
* Larry Finger <Larry.Finger@lwfinger.net>
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
#ifndef __HALPHYRF_H__
|
||||
#define __HALPHYRF_H__
|
||||
|
||||
#include "halrf/halrf_kfree.h"
|
||||
|
||||
#if (RTL8821C_SUPPORT == 1)
|
||||
#include "halrf/rtl8821c/halrf_iqk_8821c.h"
|
||||
#endif
|
||||
|
||||
#if (RTL8195B_SUPPORT == 1)
|
||||
// #include "halrf/rtl8195b/halrf.h"
|
||||
#include "halrf/rtl8195b/halrf_iqk_8195b.h"
|
||||
#include "halrf/rtl8195b/halrf_txgapk_8195b.h"
|
||||
#include "halrf/rtl8195b/halrf_dpk_8195b.h"
|
||||
#endif
|
||||
|
||||
#include "halrf/halrf_powertracking_iot.h"
|
||||
|
||||
|
||||
enum spur_cal_method {
|
||||
PLL_RESET,
|
||||
AFE_PHASE_SEL
|
||||
};
|
||||
|
||||
enum pwrtrack_method {
|
||||
BBSWING,
|
||||
TXAGC,
|
||||
MIX_MODE,
|
||||
TSSI_MODE,
|
||||
MIX_2G_TSSI_5G_MODE,
|
||||
MIX_5G_TSSI_2G_MODE
|
||||
};
|
||||
|
||||
typedef void (*func_set_pwr)(void *, enum pwrtrack_method, u8, u8);
|
||||
typedef void(*func_iqk)(void *, u8, u8, u8);
|
||||
typedef void (*func_lck)(void *);
|
||||
typedef void (*func_swing)(void *, u8 **, u8 **, u8 **, u8 **);
|
||||
typedef void (*func_swing8814only)(void *, u8 **, u8 **, u8 **, u8 **);
|
||||
typedef void(*func_swing_xtal)(void *, s8 **, s8 **);
|
||||
typedef void(*func_set_xtal)(void *);
|
||||
|
||||
struct txpwrtrack_cfg {
|
||||
u8 swing_table_size_cck;
|
||||
u8 swing_table_size_ofdm;
|
||||
u8 threshold_iqk;
|
||||
u8 threshold_dpk;
|
||||
u8 average_thermal_num;
|
||||
u8 rf_path_count;
|
||||
u32 thermal_reg_addr;
|
||||
func_set_pwr odm_tx_pwr_track_set_pwr;
|
||||
func_iqk do_iqk;
|
||||
func_lck phy_lc_calibrate;
|
||||
func_swing get_delta_swing_table;
|
||||
func_swing8814only get_delta_swing_table8814only;
|
||||
func_swing_xtal get_delta_swing_xtal_table;
|
||||
func_set_xtal odm_txxtaltrack_set_xtal;
|
||||
};
|
||||
|
||||
void
|
||||
configure_txpower_track(
|
||||
void *dm_void,
|
||||
struct txpwrtrack_cfg *config
|
||||
);
|
||||
|
||||
|
||||
void
|
||||
odm_clear_txpowertracking_state(
|
||||
void *dm_void
|
||||
);
|
||||
|
||||
void
|
||||
odm_txpowertracking_callback_thermal_meter(
|
||||
#if (DM_ODM_SUPPORT_TYPE & ODM_AP)
|
||||
void *dm_void
|
||||
#elif (DM_ODM_SUPPORT_TYPE & ODM_CE)
|
||||
void *dm
|
||||
#else
|
||||
void *adapter
|
||||
#endif
|
||||
);
|
||||
|
||||
|
||||
|
||||
#define ODM_TARGET_CHNL_NUM_2G_5G 59
|
||||
|
||||
|
||||
void
|
||||
odm_reset_iqk_result(
|
||||
void *dm_void
|
||||
);
|
||||
u8
|
||||
odm_get_right_chnl_place_for_iqk(
|
||||
u8 chnl
|
||||
);
|
||||
|
||||
void phydm_rf_init(void *dm_void);
|
||||
void phydm_rf_watchdog(void *dm_void);
|
||||
|
||||
#endif /*#ifndef __HALPHYRF_H__*/
|
||||
@@ -94,6 +94,16 @@ void configure_txpower_track(
|
||||
configure_txpower_track_8821c(config);
|
||||
#endif
|
||||
|
||||
#if RTL8192F_SUPPORT
|
||||
if (dm->support_ic_type == ODM_RTL8192F)
|
||||
configure_txpower_track_8192f(config);
|
||||
#endif
|
||||
|
||||
#if RTL8822C_SUPPORT
|
||||
if (dm->support_ic_type == ODM_RTL8822C)
|
||||
configure_txpower_track_8822c(config);
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
/* **********************************************************************
|
||||
@@ -166,7 +176,7 @@ odm_txpowertracking_callback_thermal_meter(
|
||||
u8 thermal_value = 0, delta, delta_LCK, delta_IQK, p = 0, i = 0;
|
||||
s8 diff_DPK[4] = {0};
|
||||
u8 thermal_value_avg_count = 0;
|
||||
u32 thermal_value_avg = 0, regc80, regcd0, regcd4, regab4;
|
||||
u32 thermal_value_avg = 0, regc80, regcd0, regcd4, regab4, regc88, rege14, reg848,reg838, reg86c;
|
||||
|
||||
u8 OFDM_min_index = 0; /* OFDM BB Swing should be less than +3.0dB, which is required by Arthur */
|
||||
u8 indexforchannel = 0; /* get_right_chnl_place_for_iqk(hal_data->current_channel) */
|
||||
@@ -201,7 +211,7 @@ odm_txpowertracking_callback_thermal_meter(
|
||||
(*c.get_delta_swing_table8814only)(dm, (u8 **)&delta_swing_table_idx_tup_c, (u8 **)&delta_swing_table_idx_tdown_c,
|
||||
(u8 **)&delta_swing_table_idx_tup_d, (u8 **)&delta_swing_table_idx_tdown_d);
|
||||
/* JJ ADD 20161014 */
|
||||
if (dm->support_ic_type & (ODM_RTL8703B | ODM_RTL8723D | ODM_RTL8710B)) /*for Xtal Offset*/
|
||||
if (dm->support_ic_type & (ODM_RTL8703B | ODM_RTL8723D | ODM_RTL8710B | ODM_RTL8192F)) /*for Xtal Offset*/
|
||||
(*c.get_delta_swing_xtal_table)(dm, (s8 **)&delta_swing_table_xtal_up, (s8 **)&delta_swing_table_xtal_down);
|
||||
|
||||
|
||||
@@ -220,17 +230,17 @@ odm_txpowertracking_callback_thermal_meter(
|
||||
cali_info->rega24 = 0x090e1317;
|
||||
#endif
|
||||
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,
|
||||
"===>odm_txpowertracking_callback_thermal_meter\n cali_info->bb_swing_idx_cck_base: %d, cali_info->bb_swing_idx_ofdm_base[A]: %d, cali_info->default_ofdm_index: %d\n",
|
||||
cali_info->bb_swing_idx_cck_base, cali_info->bb_swing_idx_ofdm_base[RF_PATH_A], cali_info->default_ofdm_index);
|
||||
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,
|
||||
"cali_info->txpowertrack_control=%d, hal_data->eeprom_thermal_meter %d\n", cali_info->txpowertrack_control, hal_data->eeprom_thermal_meter);
|
||||
thermal_value = (u8)odm_get_rf_reg(dm, RF_PATH_A, c.thermal_reg_addr, 0xfc00); /* 0x42: RF Reg[15:10] 88E */
|
||||
|
||||
thermal_value_temp = thermal_value + phydm_get_thermal_offset(dm);
|
||||
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,
|
||||
"thermal_value_temp(%d) = thermal_value(%d) + power_time_thermal(%d)\n", thermal_value_temp, thermal_value, phydm_get_thermal_offset(dm));
|
||||
|
||||
if (thermal_value_temp > 63)
|
||||
@@ -242,34 +252,46 @@ odm_txpowertracking_callback_thermal_meter(
|
||||
|
||||
/*add log by zhao he, check c80/c94/c14/ca0 value*/
|
||||
if (dm->support_ic_type == ODM_RTL8723D) {
|
||||
regc80 = odm_get_bb_reg(dm, 0xc80, MASKDWORD);
|
||||
regcd0 = odm_get_bb_reg(dm, 0xcd0, MASKDWORD);
|
||||
regcd4 = odm_get_bb_reg(dm, 0xcd4, MASKDWORD);
|
||||
regab4 = odm_get_bb_reg(dm, 0xab4, 0x000007FF);
|
||||
PHYDM_DBG(dm, ODM_COMP_CALIBRATION, "0xc80 = 0x%x 0xcd0 = 0x%x 0xcd4 = 0x%x 0xab4 = 0x%x\n", regc80, regcd0, regcd4, regab4);
|
||||
regc80 = odm_get_bb_reg(dm, R_0xc80, MASKDWORD);
|
||||
regcd0 = odm_get_bb_reg(dm, R_0xcd0, MASKDWORD);
|
||||
regcd4 = odm_get_bb_reg(dm, R_0xcd4, MASKDWORD);
|
||||
regab4 = odm_get_bb_reg(dm, R_0xab4, 0x000007FF);
|
||||
RF_DBG(dm, DBG_RF_IQK, "0xc80 = 0x%x 0xcd0 = 0x%x 0xcd4 = 0x%x 0xab4 = 0x%x\n", regc80, regcd0, regcd4, regab4);
|
||||
}
|
||||
|
||||
/* JJ ADD 20161014 */
|
||||
if (dm->support_ic_type == ODM_RTL8710B) {
|
||||
regc80 = odm_get_bb_reg(dm, 0xc80, MASKDWORD);
|
||||
regcd0 = odm_get_bb_reg(dm, 0xcd0, MASKDWORD);
|
||||
regcd4 = odm_get_bb_reg(dm, 0xcd4, MASKDWORD);
|
||||
regab4 = odm_get_bb_reg(dm, 0xab4, 0x000007FF);
|
||||
PHYDM_DBG(dm, ODM_COMP_CALIBRATION, "0xc80 = 0x%x 0xcd0 = 0x%x 0xcd4 = 0x%x 0xab4 = 0x%x\n", regc80, regcd0, regcd4, regab4);
|
||||
regc80 = odm_get_bb_reg(dm, R_0xc80, MASKDWORD);
|
||||
regcd0 = odm_get_bb_reg(dm, R_0xcd0, MASKDWORD);
|
||||
regcd4 = odm_get_bb_reg(dm, R_0xcd4, MASKDWORD);
|
||||
regab4 = odm_get_bb_reg(dm, R_0xab4, 0x000007FF);
|
||||
RF_DBG(dm, DBG_RF_IQK, "0xc80 = 0x%x 0xcd0 = 0x%x 0xcd4 = 0x%x 0xab4 = 0x%x\n", regc80, regcd0, regcd4, regab4);
|
||||
}
|
||||
/* Winnita add 20171205 */
|
||||
if (dm->support_ic_type == ODM_RTL8192F) {
|
||||
regc80 = odm_get_bb_reg(dm, R_0xc80, MASKDWORD);
|
||||
regc88 = odm_get_bb_reg(dm, R_0xc88, MASKDWORD);
|
||||
regab4 = odm_get_bb_reg(dm, R_0xab4, MASKDWORD);
|
||||
rege14 = odm_get_bb_reg(dm, R_0xe14, MASKDWORD);
|
||||
reg848 = odm_get_bb_reg(dm, R_0x848, MASKDWORD);
|
||||
reg838 = odm_get_bb_reg(dm, R_0x838, MASKDWORD);
|
||||
reg86c = odm_get_bb_reg(dm, R_0x86c, MASKDWORD);
|
||||
RF_DBG(dm, DBG_RF_IQK, "0xc80 = 0x%x 0xc88 = 0x%x 0xab4 = 0x%x 0xe14 = 0x%x\n", regc80, regc88, regab4, rege14);
|
||||
RF_DBG(dm, DBG_RF_IQK, "0x848 = 0x%x 0x838 = 0x%x 0x86c = 0x%x\n", reg848, reg838, reg86c);
|
||||
}
|
||||
|
||||
if (!cali_info->txpowertrack_control)
|
||||
return;
|
||||
|
||||
if (hal_data->eeprom_thermal_meter == 0xff) {
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK, "no pg, hal_data->eeprom_thermal_meter = 0x%x\n", hal_data->eeprom_thermal_meter);
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK, "no pg, hal_data->eeprom_thermal_meter = 0x%x\n", hal_data->eeprom_thermal_meter);
|
||||
return;
|
||||
}
|
||||
|
||||
/*4 3. Initialize ThermalValues of rf_calibrate_info*/
|
||||
|
||||
if (cali_info->is_reloadtxpowerindex)
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK, "reload ofdm index for band switch\n");
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK, "reload ofdm index for band switch\n");
|
||||
|
||||
/*4 4. Calculate average thermal meter*/
|
||||
|
||||
@@ -288,7 +310,7 @@ odm_txpowertracking_callback_thermal_meter(
|
||||
if (thermal_value_avg_count) { /* Calculate Average thermal_value after average enough times */
|
||||
thermal_value = (u8)(thermal_value_avg / thermal_value_avg_count);
|
||||
cali_info->thermal_value_delta = thermal_value - hal_data->eeprom_thermal_meter;
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,
|
||||
"AVG Thermal Meter = 0x%X, EFUSE Thermal base = 0x%X\n", thermal_value, hal_data->eeprom_thermal_meter);
|
||||
}
|
||||
|
||||
@@ -302,7 +324,7 @@ odm_txpowertracking_callback_thermal_meter(
|
||||
if (cali_info->thermal_value_iqk == 0xff) { /*no PG, use thermal value for IQK*/
|
||||
cali_info->thermal_value_iqk = thermal_value;
|
||||
delta_IQK = (thermal_value > cali_info->thermal_value_iqk) ? (thermal_value - cali_info->thermal_value_iqk) : (cali_info->thermal_value_iqk - thermal_value);
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK, "no PG, use thermal_value for IQK\n");
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK, "no PG, use thermal_value for IQK\n");
|
||||
}
|
||||
|
||||
for (p = RF_PATH_A; p < c.rf_path_count; p++)
|
||||
@@ -312,7 +334,7 @@ odm_txpowertracking_callback_thermal_meter(
|
||||
|
||||
if (!(dm->support_ic_type & ODM_RTL8821)) { /*no PG, do LCK at initial status*/
|
||||
if (cali_info->thermal_value_lck == 0xff) {
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK, "no PG, do LCK\n");
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK, "no PG, do LCK\n");
|
||||
cali_info->thermal_value_lck = thermal_value;
|
||||
|
||||
/*Use RTLCK, so close power tracking driver LCK*/
|
||||
@@ -324,13 +346,13 @@ odm_txpowertracking_callback_thermal_meter(
|
||||
delta_LCK = (thermal_value > cali_info->thermal_value_lck) ? (thermal_value - cali_info->thermal_value_lck) : (cali_info->thermal_value_lck - thermal_value);
|
||||
}
|
||||
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK, "(delta, delta_LCK, delta_IQK) = (%d, %d, %d)\n", delta, delta_LCK, delta_IQK);
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK, "(delta, delta_LCK, delta_IQK) = (%d, %d, %d)\n", delta, delta_LCK, delta_IQK);
|
||||
|
||||
/* Wait sacn to do LCK by RF Jenyu*/
|
||||
if( (*dm->is_scan_in_process == false) && (!iqk_info->rfk_forbidden)) {
|
||||
/* Delta temperature is equal to or larger than 20 centigrade.*/
|
||||
if (delta_LCK >= c.threshold_iqk) {
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK, "delta_LCK(%d) >= threshold_iqk(%d)\n", delta_LCK, c.threshold_iqk);
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK, "delta_LCK(%d) >= threshold_iqk(%d)\n", delta_LCK, c.threshold_iqk);
|
||||
cali_info->thermal_value_lck = thermal_value;
|
||||
|
||||
/*Use RTLCK, so close power tracking driver LCK*/
|
||||
@@ -366,51 +388,51 @@ odm_txpowertracking_callback_thermal_meter(
|
||||
cali_info->delta_power_index_last[p] = cali_info->delta_power_index[p]; /*recording poer index offset*/
|
||||
switch (p) {
|
||||
case RF_PATH_B:
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,
|
||||
"delta_swing_table_idx_tup_b[%d] = %d\n", delta, delta_swing_table_idx_tup_b[delta]);
|
||||
|
||||
cali_info->delta_power_index[p] = delta_swing_table_idx_tup_b[delta];
|
||||
cali_info->absolute_ofdm_swing_idx[p] = delta_swing_table_idx_tup_b[delta]; /*Record delta swing for mix mode power tracking*/
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,
|
||||
"******Temp is higher and cali_info->absolute_ofdm_swing_idx[RF_PATH_B] = %d\n", cali_info->absolute_ofdm_swing_idx[p]);
|
||||
break;
|
||||
|
||||
case RF_PATH_C:
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,
|
||||
"delta_swing_table_idx_tup_c[%d] = %d\n", delta, delta_swing_table_idx_tup_c[delta]);
|
||||
|
||||
cali_info->delta_power_index[p] = delta_swing_table_idx_tup_c[delta];
|
||||
cali_info->absolute_ofdm_swing_idx[p] = delta_swing_table_idx_tup_c[delta]; /*Record delta swing for mix mode power tracking*/
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,
|
||||
"******Temp is higher and cali_info->absolute_ofdm_swing_idx[RF_PATH_C] = %d\n", cali_info->absolute_ofdm_swing_idx[p]);
|
||||
break;
|
||||
|
||||
case RF_PATH_D:
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,
|
||||
"delta_swing_table_idx_tup_d[%d] = %d\n", delta, delta_swing_table_idx_tup_d[delta]);
|
||||
|
||||
cali_info->delta_power_index[p] = delta_swing_table_idx_tup_d[delta];
|
||||
cali_info->absolute_ofdm_swing_idx[p] = delta_swing_table_idx_tup_d[delta]; /*Record delta swing for mix mode power tracking*/
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,
|
||||
"******Temp is higher and cali_info->absolute_ofdm_swing_idx[RF_PATH_D] = %d\n", cali_info->absolute_ofdm_swing_idx[p]);
|
||||
break;
|
||||
|
||||
default:
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,
|
||||
"delta_swing_table_idx_tup_a[%d] = %d\n", delta, delta_swing_table_idx_tup_a[delta]);
|
||||
|
||||
cali_info->delta_power_index[p] = delta_swing_table_idx_tup_a[delta];
|
||||
cali_info->absolute_ofdm_swing_idx[p] = delta_swing_table_idx_tup_a[delta]; /*Record delta swing for mix mode power tracking*/
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,
|
||||
"******Temp is higher and cali_info->absolute_ofdm_swing_idx[RF_PATH_A] = %d\n", cali_info->absolute_ofdm_swing_idx[p]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
/* JJ ADD 20161014 */
|
||||
if (dm->support_ic_type & (ODM_RTL8703B | ODM_RTL8723D | ODM_RTL8710B)) {
|
||||
if (dm->support_ic_type & (ODM_RTL8703B | ODM_RTL8723D | ODM_RTL8710B | ODM_RTL8192F)) {
|
||||
/*Save xtal_offset from Xtal table*/
|
||||
cali_info->xtal_offset_last = cali_info->xtal_offset; /*recording last Xtal offset*/
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,
|
||||
"[Xtal] delta_swing_table_xtal_up[%d] = %d\n", delta, delta_swing_table_xtal_up[delta]);
|
||||
cali_info->xtal_offset = delta_swing_table_xtal_up[delta];
|
||||
|
||||
@@ -426,47 +448,47 @@ odm_txpowertracking_callback_thermal_meter(
|
||||
|
||||
switch (p) {
|
||||
case RF_PATH_B:
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,
|
||||
"delta_swing_table_idx_tdown_b[%d] = %d\n", delta, delta_swing_table_idx_tdown_b[delta]);
|
||||
cali_info->delta_power_index[p] = -1 * delta_swing_table_idx_tdown_b[delta];
|
||||
cali_info->absolute_ofdm_swing_idx[p] = -1 * delta_swing_table_idx_tdown_b[delta]; /*Record delta swing for mix mode power tracking*/
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,
|
||||
"******Temp is lower and cali_info->absolute_ofdm_swing_idx[RF_PATH_B] = %d\n", cali_info->absolute_ofdm_swing_idx[p]);
|
||||
break;
|
||||
|
||||
case RF_PATH_C:
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,
|
||||
"delta_swing_table_idx_tdown_c[%d] = %d\n", delta, delta_swing_table_idx_tdown_c[delta]);
|
||||
cali_info->delta_power_index[p] = -1 * delta_swing_table_idx_tdown_c[delta];
|
||||
cali_info->absolute_ofdm_swing_idx[p] = -1 * delta_swing_table_idx_tdown_c[delta]; /*Record delta swing for mix mode power tracking*/
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,
|
||||
"******Temp is lower and cali_info->absolute_ofdm_swing_idx[RF_PATH_C] = %d\n", cali_info->absolute_ofdm_swing_idx[p]);
|
||||
break;
|
||||
|
||||
case RF_PATH_D:
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,
|
||||
"delta_swing_table_idx_tdown_d[%d] = %d\n", delta, delta_swing_table_idx_tdown_d[delta]);
|
||||
cali_info->delta_power_index[p] = -1 * delta_swing_table_idx_tdown_d[delta];
|
||||
cali_info->absolute_ofdm_swing_idx[p] = -1 * delta_swing_table_idx_tdown_d[delta]; /*Record delta swing for mix mode power tracking*/
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,
|
||||
"******Temp is lower and cali_info->absolute_ofdm_swing_idx[RF_PATH_D] = %d\n", cali_info->absolute_ofdm_swing_idx[p]);
|
||||
break;
|
||||
|
||||
default:
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,
|
||||
"delta_swing_table_idx_tdown_a[%d] = %d\n", delta, delta_swing_table_idx_tdown_a[delta]);
|
||||
cali_info->delta_power_index[p] = -1 * delta_swing_table_idx_tdown_a[delta];
|
||||
cali_info->absolute_ofdm_swing_idx[p] = -1 * delta_swing_table_idx_tdown_a[delta]; /*Record delta swing for mix mode power tracking*/
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,
|
||||
"******Temp is lower and cali_info->absolute_ofdm_swing_idx[RF_PATH_A] = %d\n", cali_info->absolute_ofdm_swing_idx[p]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
/* JJ ADD 20161014 */
|
||||
if (dm->support_ic_type & (ODM_RTL8703B | ODM_RTL8723D | ODM_RTL8710B)) {
|
||||
if (dm->support_ic_type & (ODM_RTL8703B | ODM_RTL8723D | ODM_RTL8710B | ODM_RTL8192F)) {
|
||||
/*Save xtal_offset from Xtal table*/
|
||||
cali_info->xtal_offset_last = cali_info->xtal_offset; /*recording last Xtal offset*/
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,
|
||||
"[Xtal] delta_swing_table_xtal_down[%d] = %d\n", delta, delta_swing_table_xtal_down[delta]);
|
||||
cali_info->xtal_offset = delta_swing_table_xtal_down[delta];
|
||||
|
||||
@@ -479,7 +501,7 @@ odm_txpowertracking_callback_thermal_meter(
|
||||
}
|
||||
|
||||
for (p = RF_PATH_A; p < c.rf_path_count; p++) {
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,
|
||||
"\n\n=========================== [path-%d] Calculating power_index_offset===========================\n", p);
|
||||
|
||||
if (cali_info->delta_power_index[p] == cali_info->delta_power_index_last[p]) /*If Thermal value changes but lookup table value still the same*/
|
||||
@@ -487,7 +509,7 @@ odm_txpowertracking_callback_thermal_meter(
|
||||
else
|
||||
cali_info->power_index_offset[p] = cali_info->delta_power_index[p] - cali_info->delta_power_index_last[p]; /*Power index diff between 2 times Power Tracking*/
|
||||
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,
|
||||
"[path-%d] power_index_offset(%d) = delta_power_index(%d) - delta_power_index_last(%d)\n", p, cali_info->power_index_offset[p], cali_info->delta_power_index[p], cali_info->delta_power_index_last[p]);
|
||||
|
||||
cali_info->OFDM_index[p] = cali_info->bb_swing_idx_ofdm_base[p] + cali_info->power_index_offset[p];
|
||||
@@ -498,9 +520,9 @@ odm_txpowertracking_callback_thermal_meter(
|
||||
|
||||
/*************Print BB Swing base and index Offset*************/
|
||||
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,
|
||||
"The 'CCK' final index(%d) = BaseIndex(%d) + power_index_offset(%d)\n", cali_info->bb_swing_idx_cck, cali_info->bb_swing_idx_cck_base, cali_info->power_index_offset[p]);
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,
|
||||
"The 'OFDM' final index(%d) = BaseIndex[%d](%d) + power_index_offset(%d)\n", cali_info->bb_swing_idx_ofdm[p], p, cali_info->bb_swing_idx_ofdm_base[p], cali_info->power_index_offset[p]);
|
||||
|
||||
/*4 7.1 Handle boundary conditions of index.*/
|
||||
@@ -511,7 +533,7 @@ odm_txpowertracking_callback_thermal_meter(
|
||||
cali_info->OFDM_index[p] = OFDM_min_index;
|
||||
}
|
||||
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,
|
||||
"\n\n========================================================================================================\n");
|
||||
|
||||
if (cali_info->CCK_index > c.swing_table_size_cck - 1)
|
||||
@@ -519,7 +541,7 @@ odm_txpowertracking_callback_thermal_meter(
|
||||
else if (cali_info->CCK_index <= 0)
|
||||
cali_info->CCK_index = 0;
|
||||
} else {
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,
|
||||
"The thermal meter is unchanged or TxPowerTracking OFF(%d): thermal_value: %d, cali_info->thermal_value: %d\n",
|
||||
cali_info->txpowertrack_control, thermal_value, cali_info->thermal_value);
|
||||
|
||||
@@ -527,33 +549,33 @@ odm_txpowertracking_callback_thermal_meter(
|
||||
cali_info->power_index_offset[p] = 0;
|
||||
}
|
||||
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,
|
||||
"TxPowerTracking: [CCK] Swing Current index: %d, Swing base index: %d\n",
|
||||
cali_info->CCK_index, cali_info->bb_swing_idx_cck_base); /*Print Swing base & current*/
|
||||
|
||||
for (p = RF_PATH_A; p < c.rf_path_count; p++) {
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,
|
||||
"TxPowerTracking: [OFDM] Swing Current index: %d, Swing base index[%d]: %d\n",
|
||||
cali_info->OFDM_index[p], p, cali_info->bb_swing_idx_ofdm_base[p]);
|
||||
}
|
||||
|
||||
if ((dm->support_ic_type & ODM_RTL8814A)) {
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK, "power_tracking_type=%d\n", power_tracking_type);
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK, "power_tracking_type=%d\n", power_tracking_type);
|
||||
|
||||
if (power_tracking_type == 0) {
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK, "**********Enter POWER Tracking MIX_MODE**********\n");
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK, "**********Enter POWER Tracking MIX_MODE**********\n");
|
||||
for (p = RF_PATH_A; p < c.rf_path_count; p++)
|
||||
(*c.odm_tx_pwr_track_set_pwr)(dm, MIX_MODE, p, 0);
|
||||
} else if (power_tracking_type == 1) {
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK, "**********Enter POWER Tracking MIX(2G) TSSI(5G) MODE**********\n");
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK, "**********Enter POWER Tracking MIX(2G) TSSI(5G) MODE**********\n");
|
||||
for (p = RF_PATH_A; p < c.rf_path_count; p++)
|
||||
(*c.odm_tx_pwr_track_set_pwr)(dm, MIX_2G_TSSI_5G_MODE, p, 0);
|
||||
} else if (power_tracking_type == 2) {
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK, "**********Enter POWER Tracking MIX(5G) TSSI(2G)MODE**********\n");
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK, "**********Enter POWER Tracking MIX(5G) TSSI(2G)MODE**********\n");
|
||||
for (p = RF_PATH_A; p < c.rf_path_count; p++)
|
||||
(*c.odm_tx_pwr_track_set_pwr)(dm, MIX_5G_TSSI_2G_MODE, p, 0);
|
||||
} else if (power_tracking_type == 3) {
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK, "**********Enter POWER Tracking TSSI MODE**********\n");
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK, "**********Enter POWER Tracking TSSI MODE**********\n");
|
||||
for (p = RF_PATH_A; p < c.rf_path_count; p++)
|
||||
(*c.odm_tx_pwr_track_set_pwr)(dm, TSSI_MODE, p, 0);
|
||||
}
|
||||
@@ -574,13 +596,13 @@ odm_txpowertracking_callback_thermal_meter(
|
||||
/* 2012/04/25 MH Add for tx power tracking to set tx power in tx agc for 88E. */
|
||||
if (thermal_value > cali_info->thermal_value) {
|
||||
for (p = RF_PATH_A; p < c.rf_path_count; p++) {
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,
|
||||
"Temperature Increasing(%d): delta_pi: %d, delta_t: %d, Now_t: %d, EFUSE_t: %d, Last_t: %d\n",
|
||||
p, cali_info->power_index_offset[p], delta, thermal_value, hal_data->eeprom_thermal_meter, cali_info->thermal_value);
|
||||
}
|
||||
} else if (thermal_value < cali_info->thermal_value) { /*Low temperature*/
|
||||
for (p = RF_PATH_A; p < c.rf_path_count; p++) {
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,
|
||||
"Temperature Decreasing(%d): delta_pi: %d, delta_t: %d, Now_t: %d, EFUSE_t: %d, Last_t: %d\n",
|
||||
p, cali_info->power_index_offset[p], delta, thermal_value, hal_data->eeprom_thermal_meter, cali_info->thermal_value);
|
||||
}
|
||||
@@ -592,36 +614,37 @@ odm_txpowertracking_callback_thermal_meter(
|
||||
if (thermal_value > dm->priv->pmib->dot11RFEntry.ther)
|
||||
#endif
|
||||
{
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,
|
||||
"Temperature(%d) higher than PG value(%d)\n", thermal_value, hal_data->eeprom_thermal_meter);
|
||||
|
||||
if (dm->support_ic_type == ODM_RTL8188E || dm->support_ic_type == ODM_RTL8192E || dm->support_ic_type == ODM_RTL8821 ||
|
||||
dm->support_ic_type == ODM_RTL8812 || dm->support_ic_type == ODM_RTL8723B || dm->support_ic_type == ODM_RTL8814A ||
|
||||
dm->support_ic_type == ODM_RTL8703B || dm->support_ic_type == ODM_RTL8188F || dm->support_ic_type == ODM_RTL8822B ||
|
||||
dm->support_ic_type == ODM_RTL8723D || dm->support_ic_type == ODM_RTL8821C || dm->support_ic_type == ODM_RTL8710B) {/* JJ ADD 20161014 */
|
||||
dm->support_ic_type == ODM_RTL8723D || dm->support_ic_type == ODM_RTL8821C || dm->support_ic_type == ODM_RTL8710B ||
|
||||
dm->support_ic_type == ODM_RTL8192F) {
|
||||
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK, "**********Enter POWER Tracking MIX_MODE**********\n");
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK, "**********Enter POWER Tracking MIX_MODE**********\n");
|
||||
for (p = RF_PATH_A; p < c.rf_path_count; p++)
|
||||
(*c.odm_tx_pwr_track_set_pwr)(dm, MIX_MODE, p, 0);
|
||||
} else {
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK, "**********Enter POWER Tracking BBSWING_MODE**********\n");
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK, "**********Enter POWER Tracking BBSWING_MODE**********\n");
|
||||
for (p = RF_PATH_A; p < c.rf_path_count; p++)
|
||||
(*c.odm_tx_pwr_track_set_pwr)(dm, BBSWING, p, indexforchannel);
|
||||
}
|
||||
} else {
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,
|
||||
"Temperature(%d) lower than PG value(%d)\n", thermal_value, hal_data->eeprom_thermal_meter);
|
||||
|
||||
if (dm->support_ic_type == ODM_RTL8188E || dm->support_ic_type == ODM_RTL8192E || dm->support_ic_type == ODM_RTL8821 ||
|
||||
dm->support_ic_type == ODM_RTL8812 || dm->support_ic_type == ODM_RTL8723B || dm->support_ic_type == ODM_RTL8814A ||
|
||||
dm->support_ic_type == ODM_RTL8703B || dm->support_ic_type == ODM_RTL8188F || dm->support_ic_type == ODM_RTL8822B ||
|
||||
dm->support_ic_type == ODM_RTL8723D || dm->support_ic_type == ODM_RTL8821C || dm->support_ic_type == ODM_RTL8710B) {/* JJ ADD 20161014 */
|
||||
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK, "**********Enter POWER Tracking MIX_MODE**********\n");
|
||||
dm->support_ic_type == ODM_RTL8723D || dm->support_ic_type == ODM_RTL8821C || dm->support_ic_type == ODM_RTL8710B ||
|
||||
dm->support_ic_type == ODM_RTL8192F) {
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK, "**********Enter POWER Tracking MIX_MODE**********\n");
|
||||
for (p = RF_PATH_A; p < c.rf_path_count; p++)
|
||||
(*c.odm_tx_pwr_track_set_pwr)(dm, MIX_MODE, p, indexforchannel);
|
||||
} else {
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK, "**********Enter POWER Tracking BBSWING_MODE**********\n");
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK, "**********Enter POWER Tracking BBSWING_MODE**********\n");
|
||||
for (p = RF_PATH_A; p < c.rf_path_count; p++)
|
||||
(*c.odm_tx_pwr_track_set_pwr)(dm, BBSWING, p, indexforchannel);
|
||||
}
|
||||
@@ -632,7 +655,7 @@ odm_txpowertracking_callback_thermal_meter(
|
||||
for (p = RF_PATH_A; p < c.rf_path_count; p++)
|
||||
cali_info->bb_swing_idx_ofdm_base[p] = cali_info->bb_swing_idx_ofdm[p];
|
||||
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,
|
||||
"cali_info->thermal_value = %d thermal_value= %d\n", cali_info->thermal_value, thermal_value);
|
||||
|
||||
cali_info->thermal_value = thermal_value; /*Record last Power Tracking Thermal value*/
|
||||
@@ -640,27 +663,28 @@ odm_txpowertracking_callback_thermal_meter(
|
||||
}
|
||||
|
||||
|
||||
if (dm->support_ic_type == ODM_RTL8703B || dm->support_ic_type == ODM_RTL8723D || dm->support_ic_type == ODM_RTL8710B) {/* JJ ADD 20161014 */
|
||||
if (dm->support_ic_type == ODM_RTL8703B || dm->support_ic_type == ODM_RTL8723D ||
|
||||
dm->support_ic_type == ODM_RTL8192F || dm->support_ic_type == ODM_RTL8710B) {/* JJ ADD 20161014 */
|
||||
|
||||
if (xtal_offset_eanble != 0 && cali_info->txpowertrack_control && (hal_data->eeprom_thermal_meter != 0xff)) {
|
||||
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK, "**********Enter Xtal Tracking**********\n");
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK, "**********Enter Xtal Tracking**********\n");
|
||||
|
||||
#if !(DM_ODM_SUPPORT_TYPE & ODM_AP)
|
||||
if (thermal_value > hal_data->eeprom_thermal_meter) {
|
||||
#else
|
||||
if (thermal_value > dm->priv->pmib->dot11RFEntry.ther) {
|
||||
#endif
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,
|
||||
"Temperature(%d) higher than PG value(%d)\n", thermal_value, hal_data->eeprom_thermal_meter);
|
||||
(*c.odm_txxtaltrack_set_xtal)(dm);
|
||||
} else {
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,
|
||||
"Temperature(%d) lower than PG value(%d)\n", thermal_value, hal_data->eeprom_thermal_meter);
|
||||
(*c.odm_txxtaltrack_set_xtal)(dm);
|
||||
}
|
||||
}
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK, "**********End Xtal Tracking**********\n");
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK, "**********End Xtal Tracking**********\n");
|
||||
}
|
||||
|
||||
#if !(DM_ODM_SUPPORT_TYPE & ODM_AP)
|
||||
@@ -671,7 +695,7 @@ odm_txpowertracking_callback_thermal_meter(
|
||||
/*Delta temperature is equal to or larger than 20 centigrade (When threshold is 8).*/
|
||||
if (delta_IQK >= c.threshold_iqk) {
|
||||
cali_info->thermal_value_iqk = thermal_value;
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK, "delta_IQK(%d) >= threshold_iqk(%d)\n", delta_IQK, c.threshold_iqk);
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK, "delta_IQK(%d) >= threshold_iqk(%d)\n", delta_IQK, c.threshold_iqk);
|
||||
if (!cali_info->is_iqk_in_progress)
|
||||
(*c.do_iqk)(dm, delta_IQK, thermal_value, 8);
|
||||
}
|
||||
@@ -679,42 +703,42 @@ odm_txpowertracking_callback_thermal_meter(
|
||||
}
|
||||
if (cali_info->dpk_thermal[RF_PATH_A] != 0) {
|
||||
if (diff_DPK[RF_PATH_A] >= c.threshold_dpk) {
|
||||
odm_set_bb_reg(dm, 0x82c, BIT(31), 0x1);
|
||||
odm_set_bb_reg(dm, 0xcc4, BIT(14) | BIT(13) | BIT(12) | BIT(11) | BIT(10), (diff_DPK[RF_PATH_A] / c.threshold_dpk));
|
||||
odm_set_bb_reg(dm, 0x82c, BIT(31), 0x0);
|
||||
odm_set_bb_reg(dm, R_0x82c, BIT(31), 0x1);
|
||||
odm_set_bb_reg(dm, R_0xcc4, BIT(14) | BIT(13) | BIT(12) | BIT(11) | BIT(10), (diff_DPK[RF_PATH_A] / c.threshold_dpk));
|
||||
odm_set_bb_reg(dm, R_0x82c, BIT(31), 0x0);
|
||||
} else if ((diff_DPK[RF_PATH_A] <= -1 * c.threshold_dpk)) {
|
||||
s32 value = 0x20 + (diff_DPK[RF_PATH_A] / c.threshold_dpk);
|
||||
|
||||
odm_set_bb_reg(dm, 0x82c, BIT(31), 0x1);
|
||||
odm_set_bb_reg(dm, 0xcc4, BIT(14) | BIT(13) | BIT(12) | BIT(11) | BIT(10), value);
|
||||
odm_set_bb_reg(dm, 0x82c, BIT(31), 0x0);
|
||||
odm_set_bb_reg(dm, R_0x82c, BIT(31), 0x1);
|
||||
odm_set_bb_reg(dm, R_0xcc4, BIT(14) | BIT(13) | BIT(12) | BIT(11) | BIT(10), value);
|
||||
odm_set_bb_reg(dm, R_0x82c, BIT(31), 0x0);
|
||||
} else {
|
||||
odm_set_bb_reg(dm, 0x82c, BIT(31), 0x1);
|
||||
odm_set_bb_reg(dm, 0xcc4, BIT(14) | BIT(13) | BIT(12) | BIT(11) | BIT(10), 0);
|
||||
odm_set_bb_reg(dm, 0x82c, BIT(31), 0x0);
|
||||
odm_set_bb_reg(dm, R_0x82c, BIT(31), 0x1);
|
||||
odm_set_bb_reg(dm, R_0xcc4, BIT(14) | BIT(13) | BIT(12) | BIT(11) | BIT(10), 0);
|
||||
odm_set_bb_reg(dm, R_0x82c, BIT(31), 0x0);
|
||||
}
|
||||
}
|
||||
if (cali_info->dpk_thermal[RF_PATH_B] != 0) {
|
||||
if (diff_DPK[RF_PATH_B] >= c.threshold_dpk) {
|
||||
odm_set_bb_reg(dm, 0x82c, BIT(31), 0x1);
|
||||
odm_set_bb_reg(dm, 0xec4, BIT(14) | BIT(13) | BIT(12) | BIT(11) | BIT(10), (diff_DPK[RF_PATH_B] / c.threshold_dpk));
|
||||
odm_set_bb_reg(dm, 0x82c, BIT(31), 0x0);
|
||||
odm_set_bb_reg(dm, R_0x82c, BIT(31), 0x1);
|
||||
odm_set_bb_reg(dm, R_0xec4, BIT(14) | BIT(13) | BIT(12) | BIT(11) | BIT(10), (diff_DPK[RF_PATH_B] / c.threshold_dpk));
|
||||
odm_set_bb_reg(dm, R_0x82c, BIT(31), 0x0);
|
||||
} else if ((diff_DPK[RF_PATH_B] <= -1 * c.threshold_dpk)) {
|
||||
s32 value = 0x20 + (diff_DPK[RF_PATH_B] / c.threshold_dpk);
|
||||
|
||||
odm_set_bb_reg(dm, 0x82c, BIT(31), 0x1);
|
||||
odm_set_bb_reg(dm, 0xec4, BIT(14) | BIT(13) | BIT(12) | BIT(11) | BIT(10), value);
|
||||
odm_set_bb_reg(dm, 0x82c, BIT(31), 0x0);
|
||||
odm_set_bb_reg(dm, R_0x82c, BIT(31), 0x1);
|
||||
odm_set_bb_reg(dm, R_0xec4, BIT(14) | BIT(13) | BIT(12) | BIT(11) | BIT(10), value);
|
||||
odm_set_bb_reg(dm, R_0x82c, BIT(31), 0x0);
|
||||
} else {
|
||||
odm_set_bb_reg(dm, 0x82c, BIT(31), 0x1);
|
||||
odm_set_bb_reg(dm, 0xec4, BIT(14) | BIT(13) | BIT(12) | BIT(11) | BIT(10), 0);
|
||||
odm_set_bb_reg(dm, 0x82c, BIT(31), 0x0);
|
||||
odm_set_bb_reg(dm, R_0x82c, BIT(31), 0x1);
|
||||
odm_set_bb_reg(dm, R_0xec4, BIT(14) | BIT(13) | BIT(12) | BIT(11) | BIT(10), 0);
|
||||
odm_set_bb_reg(dm, R_0x82c, BIT(31), 0x0);
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK, "<===odm_txpowertracking_callback_thermal_meter\n");
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK, "<===odm_txpowertracking_callback_thermal_meter\n");
|
||||
|
||||
cali_info->tx_powercount = 0;
|
||||
}
|
||||
@@ -760,7 +784,7 @@ odm_iq_calibrate(
|
||||
void *adapter = dm->adapter;
|
||||
struct dm_iqk_info *iqk_info = &dm->IQK_info;
|
||||
|
||||
RT_TRACE(COMP_SCAN, ODM_DBG_LOUD, ("=>%s\n" , __FUNCTION__));
|
||||
RF_DBG(dm, DBG_RF_IQK, "=>%s\n",__FUNCTION__);
|
||||
|
||||
#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
|
||||
if (*dm->is_fcs_mode_enable)
|
||||
@@ -768,8 +792,8 @@ odm_iq_calibrate(
|
||||
#endif
|
||||
|
||||
if ((dm->is_linked) && (!iqk_info->rfk_forbidden)) {
|
||||
RT_TRACE(COMP_SCAN, ODM_DBG_LOUD, ("interval=%d ch=%d prech=%d scan=%s\n", dm->linked_interval,
|
||||
*dm->channel, dm->pre_channel, *dm->is_scan_in_process == TRUE ? "TRUE":"FALSE"));
|
||||
RF_DBG(dm, DBG_RF_IQK, "interval=%d ch=%d prech=%d scan=%s\n", dm->linked_interval,
|
||||
*dm->channel, dm->pre_channel, *dm->is_scan_in_process == TRUE ? "TRUE":"FALSE");
|
||||
|
||||
if (*dm->channel != dm->pre_channel) {
|
||||
dm->pre_channel = *dm->channel;
|
||||
@@ -780,12 +804,12 @@ odm_iq_calibrate(
|
||||
dm->linked_interval++;
|
||||
|
||||
if (dm->linked_interval == 2)
|
||||
PHY_IQCalibrate((PADAPTER)adapter, false);
|
||||
PHY_IQCalibrate(adapter, false);
|
||||
} else
|
||||
dm->linked_interval = 0;
|
||||
|
||||
RT_TRACE(COMP_SCAN, ODM_DBG_LOUD, ("<=%s interval=%d ch=%d prech=%d scan=%s\n", __FUNCTION__, dm->linked_interval,
|
||||
*dm->channel, dm->pre_channel, *dm->is_scan_in_process == TRUE?"TRUE":"FALSE"));
|
||||
RF_DBG(dm, DBG_RF_IQK, "<=%s interval=%d ch=%d prech=%d scan=%s\n", __FUNCTION__, dm->linked_interval,
|
||||
*dm->channel, dm->pre_channel, *dm->is_scan_in_process == TRUE?"TRUE":"FALSE");
|
||||
}
|
||||
|
||||
void phydm_rf_init(struct dm_struct *dm)
|
||||
|
||||
@@ -13,43 +13,33 @@
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
#ifndef __HAL_PHY_RF_H__
|
||||
#define __HAL_PHY_RF_H__
|
||||
#ifndef __HALPHYRF_H__
|
||||
#define __HALPHYRF_H__
|
||||
|
||||
#if (RTL8814A_SUPPORT == 1)
|
||||
#if RT_PLATFORM == PLATFORM_MACOSX
|
||||
#include "rtl8814a/halrf_iqk_8814a.h"
|
||||
#else
|
||||
#include "halrf/rtl8814a/halrf_iqk_8814a.h"
|
||||
#endif
|
||||
#include "halrf/rtl8814a/halrf_iqk_8814a.h"
|
||||
#endif
|
||||
|
||||
#if (RTL8822B_SUPPORT == 1)
|
||||
#if RT_PLATFORM == PLATFORM_MACOSX
|
||||
#include "rtl8822b/halrf_iqk_8822b.h"
|
||||
#include "../../MAC/Halmac_type.h"
|
||||
#else
|
||||
#include "halrf/rtl8822b/halrf_iqk_8822b.h"
|
||||
#include "../mac/Halmac_type.h"
|
||||
#endif
|
||||
#include "halrf/rtl8822b/halrf_iqk_8822b.h"
|
||||
#include "../mac/Halmac_type.h"
|
||||
#endif
|
||||
|
||||
#if RT_PLATFORM == PLATFORM_MACOSX
|
||||
#include "halrf_powertracking_win.h"
|
||||
#include "halrf_kfree.h"
|
||||
#include "halrf_txgapcal.h"
|
||||
#else
|
||||
#include "halrf/halrf_powertracking_win.h"
|
||||
#include "halrf/halrf_kfree.h"
|
||||
#include "halrf/halrf_txgapcal.h"
|
||||
#endif
|
||||
|
||||
#include "halrf/halrf_powertracking_win.h"
|
||||
#include "halrf/halrf_kfree.h"
|
||||
#include "halrf/halrf_txgapcal.h"
|
||||
#if (RTL8821C_SUPPORT == 1)
|
||||
#if RT_PLATFORM == PLATFORM_MACOSX
|
||||
#include "rtl8821c/halrf_iqk_8821c.h"
|
||||
#else
|
||||
#include "halrf/rtl8821c/halrf_iqk_8821c.h"
|
||||
#endif
|
||||
#include "halrf/rtl8821c/halrf_iqk_8821c.h"
|
||||
#endif
|
||||
|
||||
#if (RTL8195B_SUPPORT == 1)
|
||||
// #include "halrf/rtl8195b/halrf.h"
|
||||
#include "halrf/rtl8195b/halrf_iqk_8195b.h"
|
||||
#include "halrf/rtl8195b/halrf_txgapk_8195b.h"
|
||||
#include "halrf/rtl8195b/halrf_dpk_8195b.h"
|
||||
#endif
|
||||
|
||||
#if (RTL8814B_SUPPORT == 1)
|
||||
#include "halrf/rtl8814b/halrf_iqk_8814b.h"
|
||||
#endif
|
||||
|
||||
enum spur_cal_method {
|
||||
@@ -132,4 +122,4 @@ void odm_iq_calibrate(struct dm_struct *dm);
|
||||
void phydm_rf_init(struct dm_struct *dm);
|
||||
void phydm_rf_watchdog(struct dm_struct *dm);
|
||||
|
||||
#endif /* #ifndef __HAL_PHY_RF_H__ */
|
||||
#endif /*#ifndef __HALPHYRF_H__*/
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -23,242 +23,385 @@
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
#ifndef __HALRF_H__
|
||||
#define __HALRF_H__
|
||||
|
||||
#ifndef _HALRF_H__
|
||||
#define _HALRF_H__
|
||||
|
||||
/*============================================================*/
|
||||
/*include files*/
|
||||
/*============================================================*/
|
||||
/*@============================================================*/
|
||||
/*@include files*/
|
||||
/*@============================================================*/
|
||||
#include "halrf/halrf_psd.h"
|
||||
#if (RTL8822B_SUPPORT == 1)
|
||||
#include "halrf/rtl8822b/halrf_rfk_init_8822b.h"
|
||||
#endif
|
||||
#if (RTL8822C_SUPPORT == 1)
|
||||
#include "halrf/rtl8822c/halrf_rfk_init_8822c.h"
|
||||
#include "halrf/rtl8822c/halrf_iqk_8822c.h"
|
||||
#include "halrf/rtl8822c/halrf_tssi_8822c.h"
|
||||
#include "halrf/rtl8822c/halrf_dpk_8822c.h"
|
||||
#endif
|
||||
|
||||
#if (DM_ODM_SUPPORT_TYPE & ODM_AP)
|
||||
#if (RTL8198F_SUPPORT == 1)
|
||||
#include "halrf/rtl8198f/halrf_rfk_init_8198f.h"
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/*============================================================*/
|
||||
/*Definition */
|
||||
/*============================================================*/
|
||||
#if (RTL8814B_SUPPORT == 1)
|
||||
#include "halrf/rtl8814b/halrf_rfk_init_8814b.h"
|
||||
#include "halrf/rtl8814b/halrf_iqk_8814b.h"
|
||||
#endif
|
||||
|
||||
/*@============================================================*/
|
||||
/*@Definition */
|
||||
/*@============================================================*/
|
||||
/*IQK version*/
|
||||
#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN))
|
||||
#define IQK_VERSION_8188E "0x14"
|
||||
#define IQK_VERSION_8192E "0x01"
|
||||
#define IQK_VERSION_8723B "0x1e"
|
||||
#define IQK_VERSION_8812A "0x01"
|
||||
#define IQK_VERSION_8821A "0x01"
|
||||
#define IQK_VER_8188E "0x14"
|
||||
#define IQK_VER_8192E "0x01"
|
||||
#define IQK_VER_8192F "0x01"
|
||||
#define IQK_VER_8723B "0x1e"
|
||||
#define IQK_VER_8812A "0x02"
|
||||
#define IQK_VER_8821A "0x01"
|
||||
#elif (DM_ODM_SUPPORT_TYPE & (ODM_CE))
|
||||
#define IQK_VERSION_8188E "0x01"
|
||||
#define IQK_VERSION_8192E "0x01"
|
||||
#define IQK_VERSION_8723B "0x1e"
|
||||
#define IQK_VERSION_8812A "0x01"
|
||||
#define IQK_VERSION_8821A "0x01"
|
||||
#define IQK_VER_8188E "0x01"
|
||||
#define IQK_VER_8192E "0x01"
|
||||
#define IQK_VER_8192F "0x01"
|
||||
#define IQK_VER_8723B "0x1e"
|
||||
#define IQK_VER_8812A "0x01"
|
||||
#define IQK_VER_8821A "0x01"
|
||||
#elif (DM_ODM_SUPPORT_TYPE & (ODM_AP))
|
||||
#define IQK_VERSION_8188E "0x01"
|
||||
#define IQK_VERSION_8192E "0x01"
|
||||
#define IQK_VERSION_8723B "0x1e"
|
||||
#define IQK_VERSION_8812A "0x01"
|
||||
#define IQK_VERSION_8821A "0x01"
|
||||
#define IQK_VER_8188E "0x01"
|
||||
#define IQK_VER_8192E "0x01"
|
||||
#define IQK_VER_8192F "0x01"
|
||||
#define IQK_VER_8723B "0x1e"
|
||||
#define IQK_VER_8812A "0x01"
|
||||
#define IQK_VER_8821A "0x01"
|
||||
#elif (DM_ODM_SUPPORT_TYPE & (ODM_IOT))
|
||||
#define IQK_VER_8188E "0x01"
|
||||
#define IQK_VER_8192E "0x01"
|
||||
#define IQK_VER_8192F "0x01"
|
||||
#define IQK_VER_8723B "0x1e"
|
||||
#define IQK_VER_8812A "0x01"
|
||||
#define IQK_VER_8821A "0x01"
|
||||
#endif
|
||||
#define IQK_VERSION_8814A "0x0f"
|
||||
#define IQK_VERSION_8188F "0x01"
|
||||
#define IQK_VERSION_8197F "0x01"
|
||||
#define IQK_VERSION_8703B "0x05"
|
||||
#define IQK_VERSION_8710B "0x01"
|
||||
#define IQK_VERSION_8723D "0x02"
|
||||
#define IQK_VERSION_8822B "0x2f"
|
||||
#define IQK_VERSION_8821C "0x23"
|
||||
#define IQK_VER_8814A "0x0f"
|
||||
#define IQK_VER_8188F "0x01"
|
||||
#define IQK_VER_8197F "0x1d"
|
||||
#define IQK_VER_8703B "0x05"
|
||||
#define IQK_VER_8710B "0x01"
|
||||
#define IQK_VER_8723D "0x02"
|
||||
#define IQK_VER_8822B "0x2f"
|
||||
#define IQK_VER_8822C "0x03"
|
||||
#define IQK_VER_8821C "0x23"
|
||||
#define IQK_VER_8198F "0x09"
|
||||
#define IQK_VER_8814B "0x06"
|
||||
|
||||
/*LCK version*/
|
||||
#define LCK_VERSION_8188E "0x01"
|
||||
#define LCK_VERSION_8192E "0x01"
|
||||
#define LCK_VERSION_8723B "0x01"
|
||||
#define LCK_VERSION_8812A "0x01"
|
||||
#define LCK_VERSION_8821A "0x01"
|
||||
#define LCK_VERSION_8814A "0x01"
|
||||
#define LCK_VERSION_8188F "0x01"
|
||||
#define LCK_VERSION_8197F "0x01"
|
||||
#define LCK_VERSION_8703B "0x01"
|
||||
#define LCK_VERSION_8710B "0x01"
|
||||
#define LCK_VERSION_8723D "0x01"
|
||||
#define LCK_VERSION_8822B "0x01"
|
||||
#define LCK_VERSION_8821C "0x01"
|
||||
#define LCK_VER_8188E "0x01"
|
||||
#define LCK_VER_8192E "0x01"
|
||||
#define LCK_VER_8192F "0x01"
|
||||
#define LCK_VER_8723B "0x01"
|
||||
#define LCK_VER_8812A "0x01"
|
||||
#define LCK_VER_8821A "0x01"
|
||||
#define LCK_VER_8814A "0x01"
|
||||
#define LCK_VER_8188F "0x01"
|
||||
#define LCK_VER_8197F "0x01"
|
||||
#define LCK_VER_8703B "0x01"
|
||||
#define LCK_VER_8710B "0x01"
|
||||
#define LCK_VER_8723D "0x01"
|
||||
#define LCK_VER_8822B "0x02"
|
||||
#define LCK_VER_8822C "0x00"
|
||||
#define LCK_VER_8821C "0x02"
|
||||
#define LCK_VER_8814B "0x00"
|
||||
#define LCK_VER_8195B "0x02"
|
||||
|
||||
/*power tracking version*/
|
||||
#define POWERTRACKING_VERSION_8188E "0x01"
|
||||
#define POWERTRACKING_VERSION_8192E "0x01"
|
||||
#define POWERTRACKING_VERSION_8723B "0x01"
|
||||
#define POWERTRACKING_VERSION_8812A "0x01"
|
||||
#define POWERTRACKING_VERSION_8821A "0x01"
|
||||
#define POWERTRACKING_VERSION_8814A "0x01"
|
||||
#define POWERTRACKING_VERSION_8188F "0x01"
|
||||
#define POWERTRACKING_VERSION_8197F "0x01"
|
||||
#define POWERTRACKING_VERSION_8703B "0x01"
|
||||
#define POWERTRACKING_VERSION_8710B "0x01"
|
||||
#define POWERTRACKING_VERSION_8723D "0x01"
|
||||
#define POWERTRACKING_VERSION_8822B "0x01"
|
||||
#define POWERTRACKING_VERSION_8821C "0x01"
|
||||
#define PWRTRK_VER_8188E "0x01"
|
||||
#define PWRTRK_VER_8192E "0x01"
|
||||
#define PWRTRK_VER_8192F "0x01"
|
||||
#define PWRTRK_VER_8723B "0x01"
|
||||
#define PWRTRK_VER_8812A "0x01"
|
||||
#define PWRTRK_VER_8821A "0x01"
|
||||
#define PWRTRK_VER_8814A "0x01"
|
||||
#define PWRTRK_VER_8188F "0x01"
|
||||
#define PWRTRK_VER_8197F "0x01"
|
||||
#define PWRTRK_VER_8703B "0x01"
|
||||
#define PWRTRK_VER_8710B "0x01"
|
||||
#define PWRTRK_VER_8723D "0x01"
|
||||
#define PWRTRK_VER_8822B "0x01"
|
||||
#define PWRTRK_VER_8822C "0x00"
|
||||
#define PWRTRK_VER_8821C "0x01"
|
||||
#define PWRTRK_VER_8814B "0x00"
|
||||
|
||||
/*DPK tracking version*/
|
||||
#define DPK_VERSION_8188E "NONE"
|
||||
#define DPK_VERSION_8192E "NONE"
|
||||
#define DPK_VERSION_8723B "NONE"
|
||||
#define DPK_VERSION_8812A "NONE"
|
||||
#define DPK_VERSION_8821A "NONE"
|
||||
#define DPK_VERSION_8814A "NONE"
|
||||
#define DPK_VERSION_8188F "NONE"
|
||||
#define DPK_VERSION_8197F "NONE"
|
||||
#define DPK_VERSION_8703B "NONE"
|
||||
#define DPK_VERSION_8710B "NONE"
|
||||
#define DPK_VERSION_8723D "NONE"
|
||||
#define DPK_VERSION_8822B "NONE"
|
||||
#define DPK_VERSION_8821C "NONE"
|
||||
/*DPK version*/
|
||||
#define DPK_VER_8188E "NONE"
|
||||
#define DPK_VER_8192E "NONE"
|
||||
#define DPK_VER_8723B "NONE"
|
||||
#define DPK_VER_8812A "NONE"
|
||||
#define DPK_VER_8821A "NONE"
|
||||
#define DPK_VER_8814A "NONE"
|
||||
#define DPK_VER_8188F "NONE"
|
||||
#define DPK_VER_8197F "0x08"
|
||||
#define DPK_VER_8703B "NONE"
|
||||
#define DPK_VER_8710B "NONE"
|
||||
#define DPK_VER_8723D "NONE"
|
||||
#define DPK_VER_8822B "NONE"
|
||||
#define DPK_VER_8822C "0x04"
|
||||
#define DPK_VER_8821C "NONE"
|
||||
#define DPK_VER_8192F "0x0c"
|
||||
#define DPK_VER_8198F "0x0a"
|
||||
#define DPK_VER_8814B "0x00"
|
||||
#define DPK_VER_8195B "0x06"
|
||||
|
||||
/*RFK_INIT version*/
|
||||
#define RFK_INIT_VER_8822B "0x8"
|
||||
#define RFK_INIT_VER_8822C "0x3"
|
||||
#define RFK_INIT_VER_8195B "0x1"
|
||||
#define RFK_INIT_VER_8198F "0x5"
|
||||
#define RFK_INIT_VER_8814B "0x5"
|
||||
|
||||
/*DACK version*/
|
||||
#define DACK_VER_8822C "0x3"
|
||||
|
||||
/*Kfree tracking version*/
|
||||
#define KFREE_VERSION_8188E (dm->power_trim_data.flag & KFREE_FLAG_ON)? "0x01" : "NONE"
|
||||
#define KFREE_VERSION_8192E (dm->power_trim_data.flag & KFREE_FLAG_ON)? "0x01" : "NONE"
|
||||
#define KFREE_VERSION_8723B (dm->power_trim_data.flag & KFREE_FLAG_ON)? "0x01" : "NONE"
|
||||
#define KFREE_VERSION_8812A (dm->power_trim_data.flag & KFREE_FLAG_ON)? "0x01" : "NONE"
|
||||
#define KFREE_VERSION_8821A (dm->power_trim_data.flag & KFREE_FLAG_ON)? "0x01" : "NONE"
|
||||
#define KFREE_VERSION_8814A (dm->power_trim_data.flag & KFREE_FLAG_ON)? "0x01" : "NONE"
|
||||
#define KFREE_VERSION_8188F (dm->power_trim_data.flag & KFREE_FLAG_ON)? "0x01" : "NONE"
|
||||
#define KFREE_VERSION_8197F (dm->power_trim_data.flag & KFREE_FLAG_ON)? "0x01" : "NONE"
|
||||
#define KFREE_VERSION_8703B (dm->power_trim_data.flag & KFREE_FLAG_ON)? "0x01" : "NONE"
|
||||
#define KFREE_VERSION_8710B (dm->power_trim_data.flag & KFREE_FLAG_ON)? "0x01" : "NONE"
|
||||
#define KFREE_VERSION_8723D (dm->power_trim_data.flag & KFREE_FLAG_ON)? "0x01" : "NONE"
|
||||
#define KFREE_VERSION_8822B (dm->power_trim_data.flag & KFREE_FLAG_ON)? "0x01" : "NONE"
|
||||
#define KFREE_VERSION_8821C (dm->power_trim_data.flag & KFREE_FLAG_ON)? "0x01" : "NONE"
|
||||
#define KFREE_VER_8188E \
|
||||
(dm->power_trim_data.flag & KFREE_FLAG_ON) ? "0x01" : "NONE"
|
||||
#define KFREE_VER_8192E \
|
||||
(dm->power_trim_data.flag & KFREE_FLAG_ON) ? "0x01" : "NONE"
|
||||
#define KFREE_VER_8192F \
|
||||
(dm->power_trim_data.flag & KFREE_FLAG_ON) ? "0x01" : "NONE"
|
||||
#define KFREE_VER_8723B \
|
||||
(dm->power_trim_data.flag & KFREE_FLAG_ON) ? "0x01" : "NONE"
|
||||
#define KFREE_VER_8812A \
|
||||
(dm->power_trim_data.flag & KFREE_FLAG_ON) ? "0x01" : "NONE"
|
||||
#define KFREE_VER_8821A \
|
||||
(dm->power_trim_data.flag & KFREE_FLAG_ON) ? "0x01" : "NONE"
|
||||
#define KFREE_VER_8814A \
|
||||
(dm->power_trim_data.flag & KFREE_FLAG_ON) ? "0x01" : "NONE"
|
||||
#define KFREE_VER_8188F \
|
||||
(dm->power_trim_data.flag & KFREE_FLAG_ON) ? "0x01" : "NONE"
|
||||
#define KFREE_VER_8197F \
|
||||
(dm->power_trim_data.flag & KFREE_FLAG_ON) ? "0x01" : "NONE"
|
||||
#define KFREE_VER_8703B \
|
||||
(dm->power_trim_data.flag & KFREE_FLAG_ON) ? "0x01" : "NONE"
|
||||
#define KFREE_VER_8710B \
|
||||
(dm->power_trim_data.flag & KFREE_FLAG_ON) ? "0x01" : "NONE"
|
||||
#define KFREE_VER_8723D \
|
||||
(dm->power_trim_data.flag & KFREE_FLAG_ON) ? "0x01" : "NONE"
|
||||
#define KFREE_VER_8822B \
|
||||
(dm->power_trim_data.flag & KFREE_FLAG_ON) ? "0x01" : "NONE"
|
||||
#define KFREE_VER_8822C \
|
||||
(dm->power_trim_data.flag & KFREE_FLAG_ON) ? "0x01" : "NONE"
|
||||
#define KFREE_VER_8821C \
|
||||
(dm->power_trim_data.flag & KFREE_FLAG_ON) ? "0x01" : "NONE"
|
||||
#define KFREE_VER_8814B \
|
||||
(dm->power_trim_data.flag & KFREE_FLAG_ON) ? "0x01" : "NONE"
|
||||
|
||||
/*PA Bias Calibration version*/
|
||||
#define PABIASK_VERSION_8188E (dm->power_trim_data.pa_bias_flag & PA_BIAS_FLAG_ON)? "0x01" : "NONE"
|
||||
#define PABIASK_VERSION_8192E (dm->power_trim_data.pa_bias_flag & PA_BIAS_FLAG_ON)? "0x01" : "NONE"
|
||||
#define PABIASK_VERSION_8723B (dm->power_trim_data.pa_bias_flag & PA_BIAS_FLAG_ON)? "0x01" : "NONE"
|
||||
#define PABIASK_VERSION_8812A (dm->power_trim_data.pa_bias_flag & PA_BIAS_FLAG_ON)? "0x01" : "NONE"
|
||||
#define PABIASK_VERSION_8821A (dm->power_trim_data.pa_bias_flag & PA_BIAS_FLAG_ON)? "0x01" : "NONE"
|
||||
#define PABIASK_VERSION_8814A (dm->power_trim_data.pa_bias_flag & PA_BIAS_FLAG_ON)? "0x01" : "NONE"
|
||||
#define PABIASK_VERSION_8188F (dm->power_trim_data.pa_bias_flag & PA_BIAS_FLAG_ON)? "0x01" : "NONE"
|
||||
#define PABIASK_VERSION_8197F (dm->power_trim_data.pa_bias_flag & PA_BIAS_FLAG_ON)? "0x01" : "NONE"
|
||||
#define PABIASK_VERSION_8703B (dm->power_trim_data.pa_bias_flag & PA_BIAS_FLAG_ON)? "0x01" : "NONE"
|
||||
#define PABIASK_VERSION_8710B (dm->power_trim_data.pa_bias_flag & PA_BIAS_FLAG_ON)? "0x01" : "NONE"
|
||||
#define PABIASK_VERSION_8723D (dm->power_trim_data.pa_bias_flag & PA_BIAS_FLAG_ON)? "0x01" : "NONE"
|
||||
#define PABIASK_VERSION_8822B (dm->power_trim_data.pa_bias_flag & PA_BIAS_FLAG_ON)? "0x01" : "NONE"
|
||||
#define PABIASK_VERSION_8821C (dm->power_trim_data.pa_bias_flag & PA_BIAS_FLAG_ON)? "0x01" : "NONE"
|
||||
#define PABIASK_VER_8188E \
|
||||
(dm->power_trim_data.pa_bias_flag & PA_BIAS_FLAG_ON) ? "0x01" : "NONE"
|
||||
#define PABIASK_VER_8192E \
|
||||
(dm->power_trim_data.pa_bias_flag & PA_BIAS_FLAG_ON) ? "0x01" : "NONE"
|
||||
#define PABIASK_VER_8192F \
|
||||
(dm->power_trim_data.pa_bias_flag & PA_BIAS_FLAG_ON) ? "0x01" : "NONE"
|
||||
#define PABIASK_VER_8723B \
|
||||
(dm->power_trim_data.pa_bias_flag & PA_BIAS_FLAG_ON) ? "0x01" : "NONE"
|
||||
#define PABIASK_VER_8812A \
|
||||
(dm->power_trim_data.pa_bias_flag & PA_BIAS_FLAG_ON) ? "0x01" : "NONE"
|
||||
#define PABIASK_VER_8821A \
|
||||
(dm->power_trim_data.pa_bias_flag & PA_BIAS_FLAG_ON) ? "0x01" : "NONE"
|
||||
#define PABIASK_VER_8814A \
|
||||
(dm->power_trim_data.pa_bias_flag & PA_BIAS_FLAG_ON) ? "0x01" : "NONE"
|
||||
#define PABIASK_VER_8188F \
|
||||
(dm->power_trim_data.pa_bias_flag & PA_BIAS_FLAG_ON) ? "0x01" : "NONE"
|
||||
#define PABIASK_VER_8197F \
|
||||
(dm->power_trim_data.pa_bias_flag & PA_BIAS_FLAG_ON) ? "0x01" : "NONE"
|
||||
#define PABIASK_VER_8703B \
|
||||
(dm->power_trim_data.pa_bias_flag & PA_BIAS_FLAG_ON) ? "0x01" : "NONE"
|
||||
#define PABIASK_VER_8710B \
|
||||
(dm->power_trim_data.pa_bias_flag & PA_BIAS_FLAG_ON) ? "0x01" : "NONE"
|
||||
#define PABIASK_VER_8723D \
|
||||
(dm->power_trim_data.pa_bias_flag & PA_BIAS_FLAG_ON) ? "0x01" : "NONE"
|
||||
#define PABIASK_VER_8822B \
|
||||
(dm->power_trim_data.pa_bias_flag & PA_BIAS_FLAG_ON) ? "0x01" : "NONE"
|
||||
#define PABIASK_VER_8822C \
|
||||
(dm->power_trim_data.pa_bias_flag & PA_BIAS_FLAG_ON) ? "0x01" : "NONE"
|
||||
#define PABIASK_VER_8821C \
|
||||
(dm->power_trim_data.pa_bias_flag & PA_BIAS_FLAG_ON) ? "0x01" : "NONE"
|
||||
#define PABIASK_VER_8814B \
|
||||
(dm->power_trim_data.pa_bias_flag & PA_BIAS_FLAG_ON) ? "0x01" : "NONE"
|
||||
|
||||
#define HALRF_IQK_VER \
|
||||
(dm->support_ic_type == ODM_RTL8188E) ? IQK_VER_8188E : \
|
||||
(dm->support_ic_type == ODM_RTL8192E) ? IQK_VER_8192E : \
|
||||
(dm->support_ic_type == ODM_RTL8192F) ? IQK_VER_8192F : \
|
||||
(dm->support_ic_type == ODM_RTL8723B) ? IQK_VER_8723B : \
|
||||
(dm->support_ic_type == ODM_RTL8812) ? IQK_VER_8812A : \
|
||||
(dm->support_ic_type == ODM_RTL8821) ? IQK_VER_8821A : \
|
||||
(dm->support_ic_type == ODM_RTL8814A) ? IQK_VER_8814A : \
|
||||
(dm->support_ic_type == ODM_RTL8188F) ? IQK_VER_8188F : \
|
||||
(dm->support_ic_type == ODM_RTL8197F) ? IQK_VER_8197F : \
|
||||
(dm->support_ic_type == ODM_RTL8703B) ? IQK_VER_8703B : \
|
||||
(dm->support_ic_type == ODM_RTL8710B) ? IQK_VER_8710B : \
|
||||
(dm->support_ic_type == ODM_RTL8723D) ? IQK_VER_8723D : \
|
||||
(dm->support_ic_type == ODM_RTL8822B) ? IQK_VER_8822B : \
|
||||
(dm->support_ic_type == ODM_RTL8822C) ? IQK_VER_8822C : \
|
||||
(dm->support_ic_type == ODM_RTL8821C) ? IQK_VER_8821C : \
|
||||
(dm->support_ic_type == ODM_RTL8814B) ? IQK_VER_8814B : "unknown"
|
||||
|
||||
#define HALRF_LCK_VER \
|
||||
(dm->support_ic_type == ODM_RTL8188E) ? LCK_VER_8188E : \
|
||||
(dm->support_ic_type == ODM_RTL8192E) ? LCK_VER_8192E : \
|
||||
(dm->support_ic_type == ODM_RTL8192F) ? LCK_VER_8192F : \
|
||||
(dm->support_ic_type == ODM_RTL8723B) ? LCK_VER_8723B : \
|
||||
(dm->support_ic_type == ODM_RTL8812) ? LCK_VER_8812A : \
|
||||
(dm->support_ic_type == ODM_RTL8821) ? LCK_VER_8821A : \
|
||||
(dm->support_ic_type == ODM_RTL8814A) ? LCK_VER_8814A : \
|
||||
(dm->support_ic_type == ODM_RTL8188F) ? LCK_VER_8188F : \
|
||||
(dm->support_ic_type == ODM_RTL8197F) ? LCK_VER_8197F : \
|
||||
(dm->support_ic_type == ODM_RTL8703B) ? LCK_VER_8703B : \
|
||||
(dm->support_ic_type == ODM_RTL8710B) ? LCK_VER_8710B : \
|
||||
(dm->support_ic_type == ODM_RTL8723D) ? LCK_VER_8723D : \
|
||||
(dm->support_ic_type == ODM_RTL8822B) ? LCK_VER_8822B : \
|
||||
(dm->support_ic_type == ODM_RTL8822C) ? LCK_VER_8822C : \
|
||||
(dm->support_ic_type == ODM_RTL8821C) ? LCK_VER_8821C : \
|
||||
(dm->support_ic_type == ODM_RTL8814B) ? LCK_VER_8814B : "unknown"
|
||||
|
||||
#define HALRF_IQK_VER (dm->support_ic_type == ODM_RTL8188E)? IQK_VERSION_8188E :\
|
||||
(dm->support_ic_type == ODM_RTL8192E)? IQK_VERSION_8192E :\
|
||||
(dm->support_ic_type == ODM_RTL8723B)? IQK_VERSION_8723B :\
|
||||
(dm->support_ic_type == ODM_RTL8812)? IQK_VERSION_8812A :\
|
||||
(dm->support_ic_type == ODM_RTL8821)? IQK_VERSION_8821A :\
|
||||
(dm->support_ic_type == ODM_RTL8814A)? IQK_VERSION_8814A :\
|
||||
(dm->support_ic_type == ODM_RTL8188F)? IQK_VERSION_8188F :\
|
||||
(dm->support_ic_type == ODM_RTL8197F)? IQK_VERSION_8197F :\
|
||||
(dm->support_ic_type == ODM_RTL8703B)? IQK_VERSION_8703B :\
|
||||
(dm->support_ic_type == ODM_RTL8710B)? IQK_VERSION_8710B :\
|
||||
(dm->support_ic_type == ODM_RTL8723D)? IQK_VERSION_8723D :\
|
||||
(dm->support_ic_type == ODM_RTL8822B)? IQK_VERSION_8822B :\
|
||||
(dm->support_ic_type == ODM_RTL8821C)? IQK_VERSION_8821C :"unknown"
|
||||
#define HALRF_POWRTRACKING_VER \
|
||||
(dm->support_ic_type == ODM_RTL8188E) ? PWRTRK_VER_8188E : \
|
||||
(dm->support_ic_type == ODM_RTL8192E) ? PWRTRK_VER_8192E : \
|
||||
(dm->support_ic_type == ODM_RTL8192F) ? PWRTRK_VER_8192F : \
|
||||
(dm->support_ic_type == ODM_RTL8723B) ? PWRTRK_VER_8723B : \
|
||||
(dm->support_ic_type == ODM_RTL8812) ? PWRTRK_VER_8812A : \
|
||||
(dm->support_ic_type == ODM_RTL8821) ? PWRTRK_VER_8821A : \
|
||||
(dm->support_ic_type == ODM_RTL8814A) ? PWRTRK_VER_8814A : \
|
||||
(dm->support_ic_type == ODM_RTL8188F) ? PWRTRK_VER_8188F : \
|
||||
(dm->support_ic_type == ODM_RTL8197F) ? PWRTRK_VER_8197F : \
|
||||
(dm->support_ic_type == ODM_RTL8703B) ? PWRTRK_VER_8703B : \
|
||||
(dm->support_ic_type == ODM_RTL8710B) ? PWRTRK_VER_8710B : \
|
||||
(dm->support_ic_type == ODM_RTL8723D) ? PWRTRK_VER_8723D : \
|
||||
(dm->support_ic_type == ODM_RTL8822B) ? PWRTRK_VER_8822B : \
|
||||
(dm->support_ic_type == ODM_RTL8822C) ? PWRTRK_VER_8822C : \
|
||||
(dm->support_ic_type == ODM_RTL8821C) ? PWRTRK_VER_8821C : \
|
||||
(dm->support_ic_type == ODM_RTL8814B) ? PWRTRK_VER_8814B : "unknown"
|
||||
|
||||
#define HALRF_DPK_VER \
|
||||
(dm->support_ic_type == ODM_RTL8188E) ? DPK_VER_8188E : \
|
||||
(dm->support_ic_type == ODM_RTL8192E) ? DPK_VER_8192E : \
|
||||
(dm->support_ic_type == ODM_RTL8192F) ? DPK_VER_8192F : \
|
||||
(dm->support_ic_type == ODM_RTL8723B) ? DPK_VER_8723B : \
|
||||
(dm->support_ic_type == ODM_RTL8812) ? DPK_VER_8812A : \
|
||||
(dm->support_ic_type == ODM_RTL8821) ? DPK_VER_8821A : \
|
||||
(dm->support_ic_type == ODM_RTL8814A) ? DPK_VER_8814A : \
|
||||
(dm->support_ic_type == ODM_RTL8188F) ? DPK_VER_8188F : \
|
||||
(dm->support_ic_type == ODM_RTL8197F) ? DPK_VER_8197F : \
|
||||
(dm->support_ic_type == ODM_RTL8198F) ? DPK_VER_8198F : \
|
||||
(dm->support_ic_type == ODM_RTL8703B) ? DPK_VER_8703B : \
|
||||
(dm->support_ic_type == ODM_RTL8710B) ? DPK_VER_8710B : \
|
||||
(dm->support_ic_type == ODM_RTL8723D) ? DPK_VER_8723D : \
|
||||
(dm->support_ic_type == ODM_RTL8822B) ? DPK_VER_8822B : \
|
||||
(dm->support_ic_type == ODM_RTL8822C) ? DPK_VER_8822C : \
|
||||
(dm->support_ic_type == ODM_RTL8821C) ? DPK_VER_8821C : \
|
||||
(dm->support_ic_type == ODM_RTL8814B) ? DPK_VER_8814B : "unknown"
|
||||
|
||||
#define HALRF_LCK_VER (dm->support_ic_type == ODM_RTL8188E)? LCK_VERSION_8188E :\
|
||||
(dm->support_ic_type == ODM_RTL8192E)? LCK_VERSION_8192E :\
|
||||
(dm->support_ic_type == ODM_RTL8723B)? LCK_VERSION_8723B :\
|
||||
(dm->support_ic_type == ODM_RTL8812)? LCK_VERSION_8812A :\
|
||||
(dm->support_ic_type == ODM_RTL8821)? LCK_VERSION_8821A :\
|
||||
(dm->support_ic_type == ODM_RTL8814A)? LCK_VERSION_8814A :\
|
||||
(dm->support_ic_type == ODM_RTL8188F)? LCK_VERSION_8188F :\
|
||||
(dm->support_ic_type == ODM_RTL8197F)? LCK_VERSION_8197F :\
|
||||
(dm->support_ic_type == ODM_RTL8703B)? LCK_VERSION_8703B :\
|
||||
(dm->support_ic_type == ODM_RTL8710B)? LCK_VERSION_8710B :\
|
||||
(dm->support_ic_type == ODM_RTL8723D)? LCK_VERSION_8723D :\
|
||||
(dm->support_ic_type == ODM_RTL8822B)? LCK_VERSION_8822B :\
|
||||
(dm->support_ic_type == ODM_RTL8821C)? LCK_VERSION_8821C :"unknown"
|
||||
#define HALRF_KFREE_VER \
|
||||
(dm->support_ic_type == ODM_RTL8188E) ? KFREE_VER_8188E : \
|
||||
(dm->support_ic_type == ODM_RTL8192E) ? KFREE_VER_8192E : \
|
||||
(dm->support_ic_type == ODM_RTL8192F) ? KFREE_VER_8192F : \
|
||||
(dm->support_ic_type == ODM_RTL8723B) ? KFREE_VER_8723B : \
|
||||
(dm->support_ic_type == ODM_RTL8812) ? KFREE_VER_8812A : \
|
||||
(dm->support_ic_type == ODM_RTL8821) ? KFREE_VER_8821A : \
|
||||
(dm->support_ic_type == ODM_RTL8814A) ? KFREE_VER_8814A : \
|
||||
(dm->support_ic_type == ODM_RTL8188F) ? KFREE_VER_8188F : \
|
||||
(dm->support_ic_type == ODM_RTL8197F) ? KFREE_VER_8197F : \
|
||||
(dm->support_ic_type == ODM_RTL8703B) ? KFREE_VER_8703B : \
|
||||
(dm->support_ic_type == ODM_RTL8710B) ? KFREE_VER_8710B : \
|
||||
(dm->support_ic_type == ODM_RTL8723D) ? KFREE_VER_8723D : \
|
||||
(dm->support_ic_type == ODM_RTL8822B) ? KFREE_VER_8822B : \
|
||||
(dm->support_ic_type == ODM_RTL8822C) ? KFREE_VER_8822C : \
|
||||
(dm->support_ic_type == ODM_RTL8821C) ? KFREE_VER_8821C : \
|
||||
(dm->support_ic_type == ODM_RTL8814B) ? KFREE_VER_8814B : "unknown"
|
||||
|
||||
#define HALRF_PABIASK_VER \
|
||||
(dm->support_ic_type == ODM_RTL8188E) ? PABIASK_VER_8188E : \
|
||||
(dm->support_ic_type == ODM_RTL8192E) ? PABIASK_VER_8192E : \
|
||||
(dm->support_ic_type == ODM_RTL8192F) ? PABIASK_VER_8192F : \
|
||||
(dm->support_ic_type == ODM_RTL8723B) ? PABIASK_VER_8723B : \
|
||||
(dm->support_ic_type == ODM_RTL8812) ? PABIASK_VER_8812A : \
|
||||
(dm->support_ic_type == ODM_RTL8821) ? PABIASK_VER_8821A : \
|
||||
(dm->support_ic_type == ODM_RTL8814A) ? PABIASK_VER_8814A : \
|
||||
(dm->support_ic_type == ODM_RTL8188F) ? PABIASK_VER_8188F : \
|
||||
(dm->support_ic_type == ODM_RTL8197F) ? PABIASK_VER_8197F : \
|
||||
(dm->support_ic_type == ODM_RTL8703B) ? PABIASK_VER_8703B : \
|
||||
(dm->support_ic_type == ODM_RTL8710B) ? PABIASK_VER_8710B : \
|
||||
(dm->support_ic_type == ODM_RTL8723D) ? PABIASK_VER_8723D : \
|
||||
(dm->support_ic_type == ODM_RTL8822B) ? PABIASK_VER_8822B : \
|
||||
(dm->support_ic_type == ODM_RTL8822C) ? PABIASK_VER_8822C : \
|
||||
(dm->support_ic_type == ODM_RTL8821C) ? PABIASK_VER_8821C : \
|
||||
(dm->support_ic_type == ODM_RTL8814B) ? PABIASK_VER_8814B : "unknown"
|
||||
|
||||
#define HALRF_POWRTRACKING_VER (dm->support_ic_type == ODM_RTL8188E)? POWERTRACKING_VERSION_8188E :\
|
||||
(dm->support_ic_type == ODM_RTL8192E)? POWERTRACKING_VERSION_8192E :\
|
||||
(dm->support_ic_type == ODM_RTL8723B)? POWERTRACKING_VERSION_8723B :\
|
||||
(dm->support_ic_type == ODM_RTL8812)? POWERTRACKING_VERSION_8812A :\
|
||||
(dm->support_ic_type == ODM_RTL8821)? POWERTRACKING_VERSION_8821A :\
|
||||
(dm->support_ic_type == ODM_RTL8814A)? POWERTRACKING_VERSION_8814A :\
|
||||
(dm->support_ic_type == ODM_RTL8188F)? POWERTRACKING_VERSION_8188F :\
|
||||
(dm->support_ic_type == ODM_RTL8197F)? POWERTRACKING_VERSION_8197F :\
|
||||
(dm->support_ic_type == ODM_RTL8703B)? POWERTRACKING_VERSION_8703B :\
|
||||
(dm->support_ic_type == ODM_RTL8710B)? POWERTRACKING_VERSION_8710B :\
|
||||
(dm->support_ic_type == ODM_RTL8723D)? POWERTRACKING_VERSION_8723D :\
|
||||
(dm->support_ic_type == ODM_RTL8822B)? POWERTRACKING_VERSION_8822B :\
|
||||
(dm->support_ic_type == ODM_RTL8821C)? POWERTRACKING_VERSION_8821C :"unknown"
|
||||
#define HALRF_RFK_INIT_VER \
|
||||
(dm->support_ic_type == ODM_RTL8822B) ? RFK_INIT_VER_8822B : \
|
||||
(dm->support_ic_type == ODM_RTL8822C) ? RFK_INIT_VER_8822C : \
|
||||
(dm->support_ic_type == ODM_RTL8198F) ? RFK_INIT_VER_8198F : \
|
||||
(dm->support_ic_type == ODM_RTL8814B) ? RFK_INIT_VER_8814B : "unknown"
|
||||
|
||||
#define HALRF_DPK_VER (dm->support_ic_type == ODM_RTL8188E)? DPK_VERSION_8188E :\
|
||||
(dm->support_ic_type == ODM_RTL8192E)? DPK_VERSION_8192E :\
|
||||
(dm->support_ic_type == ODM_RTL8723B)? DPK_VERSION_8723B :\
|
||||
(dm->support_ic_type == ODM_RTL8812)? DPK_VERSION_8812A :\
|
||||
(dm->support_ic_type == ODM_RTL8821)? DPK_VERSION_8821A :\
|
||||
(dm->support_ic_type == ODM_RTL8814A)? DPK_VERSION_8814A :\
|
||||
(dm->support_ic_type == ODM_RTL8188F)? DPK_VERSION_8188F :\
|
||||
(dm->support_ic_type == ODM_RTL8197F)? DPK_VERSION_8197F :\
|
||||
(dm->support_ic_type == ODM_RTL8703B)? DPK_VERSION_8703B :\
|
||||
(dm->support_ic_type == ODM_RTL8710B)? DPK_VERSION_8710B :\
|
||||
(dm->support_ic_type == ODM_RTL8723D)? DPK_VERSION_8723D :\
|
||||
(dm->support_ic_type == ODM_RTL8822B)? DPK_VERSION_8822B :\
|
||||
(dm->support_ic_type == ODM_RTL8821C)? DPK_VERSION_8821C :"unknown"
|
||||
#define HALRF_DACK_VER \
|
||||
(dm->support_ic_type == ODM_RTL8822C) ? DACK_VER_8822C : "unknown"
|
||||
|
||||
#define HALRF_KFREE_VER (dm->support_ic_type == ODM_RTL8188E)? KFREE_VERSION_8188E :\
|
||||
(dm->support_ic_type == ODM_RTL8192E)? KFREE_VERSION_8192E :\
|
||||
(dm->support_ic_type == ODM_RTL8723B)? KFREE_VERSION_8723B :\
|
||||
(dm->support_ic_type == ODM_RTL8812)? KFREE_VERSION_8812A :\
|
||||
(dm->support_ic_type == ODM_RTL8821)? KFREE_VERSION_8821A :\
|
||||
(dm->support_ic_type == ODM_RTL8814A)? KFREE_VERSION_8814A :\
|
||||
(dm->support_ic_type == ODM_RTL8188F)? KFREE_VERSION_8188F :\
|
||||
(dm->support_ic_type == ODM_RTL8197F)? KFREE_VERSION_8197F :\
|
||||
(dm->support_ic_type == ODM_RTL8703B)? KFREE_VERSION_8703B :\
|
||||
(dm->support_ic_type == ODM_RTL8710B)? KFREE_VERSION_8710B :\
|
||||
(dm->support_ic_type == ODM_RTL8723D)? KFREE_VERSION_8723D :\
|
||||
(dm->support_ic_type == ODM_RTL8822B)? KFREE_VERSION_8822B :\
|
||||
(dm->support_ic_type == ODM_RTL8821C)? KFREE_VERSION_8821C :"unknown"
|
||||
|
||||
#define HALRF_PABIASK_VER (dm->support_ic_type == ODM_RTL8188E)? PABIASK_VERSION_8188E :\
|
||||
(dm->support_ic_type == ODM_RTL8192E)? PABIASK_VERSION_8192E :\
|
||||
(dm->support_ic_type == ODM_RTL8723B)? PABIASK_VERSION_8723B :\
|
||||
(dm->support_ic_type == ODM_RTL8812)? PABIASK_VERSION_8812A :\
|
||||
(dm->support_ic_type == ODM_RTL8821)? PABIASK_VERSION_8821A :\
|
||||
(dm->support_ic_type == ODM_RTL8814A)? PABIASK_VERSION_8814A :\
|
||||
(dm->support_ic_type == ODM_RTL8188F)? PABIASK_VERSION_8188F :\
|
||||
(dm->support_ic_type == ODM_RTL8197F)? PABIASK_VERSION_8197F :\
|
||||
(dm->support_ic_type == ODM_RTL8703B)? PABIASK_VERSION_8703B :\
|
||||
(dm->support_ic_type == ODM_RTL8710B)? PABIASK_VERSION_8710B :\
|
||||
(dm->support_ic_type == ODM_RTL8723D)? PABIASK_VERSION_8723D :\
|
||||
(dm->support_ic_type == ODM_RTL8822B)? PABIASK_VERSION_8822B :\
|
||||
(dm->support_ic_type == ODM_RTL8821C)? PABIASK_VERSION_8821C :"unknown"
|
||||
|
||||
|
||||
|
||||
#define IQK_THRESHOLD 8
|
||||
#define DPK_THRESHOLD 4
|
||||
|
||||
/*===========================================================*/
|
||||
#define IQK_THRESHOLD 8
|
||||
#define DPK_THRESHOLD 4
|
||||
#define HALRF_ABS(a,b) ((a>b) ? (a-b) : (b-a))
|
||||
#define SN 100
|
||||
/*@===========================================================*/
|
||||
/*AGC RX High Power mode*/
|
||||
/*===========================================================*/
|
||||
#define lna_low_gain_1 0x64
|
||||
#define lna_low_gain_2 0x5A
|
||||
#define lna_low_gain_3 0x58
|
||||
/*@===========================================================*/
|
||||
#define lna_low_gain_1 0x64
|
||||
#define lna_low_gain_2 0x5A
|
||||
#define lna_low_gain_3 0x58
|
||||
|
||||
/*@============================================================*/
|
||||
/*@ enumeration */
|
||||
/*@============================================================*/
|
||||
|
||||
enum halrf_func_idx { /*F_XXX = PHYDM XXX function*/
|
||||
RF00_PWR_TRK = 0,
|
||||
RF01_IQK = 1,
|
||||
RF02_LCK = 2,
|
||||
RF03_DPK = 3,
|
||||
RF04_TXGAPK = 4,
|
||||
RF05_DACK = 5,
|
||||
};
|
||||
|
||||
/*============================================================*/
|
||||
/* enumeration */
|
||||
/*============================================================*/
|
||||
enum halrf_ability {
|
||||
HAL_RF_TX_PWR_TRACK = BIT(0),
|
||||
HAL_RF_IQK = BIT(1),
|
||||
HAL_RF_LCK = BIT(2),
|
||||
HAL_RF_DPK = BIT(3),
|
||||
HAL_RF_TXGAPK = BIT(4)
|
||||
HAL_RF_TX_PWR_TRACK = BIT(RF00_PWR_TRK),
|
||||
HAL_RF_IQK = BIT(RF01_IQK),
|
||||
HAL_RF_LCK = BIT(RF02_LCK),
|
||||
HAL_RF_DPK = BIT(RF03_DPK),
|
||||
HAL_RF_TXGAPK = BIT(RF04_TXGAPK),
|
||||
HAL_RF_DACK = BIT(RF05_DACK)
|
||||
};
|
||||
|
||||
enum halrf_dbg_comp {
|
||||
DBG_RF_TX_PWR_TRACK = BIT(RF00_PWR_TRK),
|
||||
DBG_RF_IQK = BIT(RF01_IQK),
|
||||
DBG_RF_LCK = BIT(RF02_LCK),
|
||||
DBG_RF_DPK = BIT(RF03_DPK),
|
||||
DBG_RF_TXGAPK = BIT(RF04_TXGAPK),
|
||||
DBG_RF_DACK = BIT(RF05_DACK),
|
||||
DBG_RF_MP = BIT(29),
|
||||
DBG_RF_TMP = BIT(30),
|
||||
DBG_RF_INIT = BIT(31)
|
||||
};
|
||||
|
||||
enum halrf_cmninfo_init {
|
||||
HALRF_CMNINFO_ABILITY = 0,
|
||||
HALRF_CMNINFO_DPK_EN = 1,
|
||||
HALRF_CMNINFO_EEPROM_THERMAL_VALUE,
|
||||
HALRF_CMNINFO_FW_VER,
|
||||
HALRF_CMNINFO_RFK_FORBIDDEN,
|
||||
HALRF_CMNINFO_IQK_SEGMENT,
|
||||
HALRF_CMNINFO_RATE_INDEX,
|
||||
HALRF_CMNINFO_PWT_TYPE,
|
||||
HALRF_CMNINFO_MP_PSD_POINT,
|
||||
HALRF_CMNINFO_MP_PSD_START_POINT,
|
||||
HALRF_CMNINFO_MP_PSD_STOP_POINT,
|
||||
@@ -268,188 +411,152 @@ enum halrf_cmninfo_init {
|
||||
enum halrf_cmninfo_hook {
|
||||
HALRF_CMNINFO_CON_TX,
|
||||
HALRF_CMNINFO_SINGLE_TONE,
|
||||
HALRF_CMNINFO_CARRIER_SUPPRESSION,
|
||||
HALRF_CMNINFO_CARRIER_SUPPRESSION,
|
||||
HALRF_CMNINFO_MP_RATE_INDEX
|
||||
};
|
||||
|
||||
enum phydm_lna_set {
|
||||
phydm_lna_disable = 0,
|
||||
phydm_lna_enable = 1,
|
||||
enum halrf_lna_set {
|
||||
HALRF_LNA_DISABLE = 0,
|
||||
HALRF_LNA_ENABLE = 1,
|
||||
};
|
||||
|
||||
|
||||
/*============================================================*/
|
||||
/* structure */
|
||||
/*============================================================*/
|
||||
/*@============================================================*/
|
||||
/*@ structure */
|
||||
/*@============================================================*/
|
||||
|
||||
struct _hal_rf_ {
|
||||
/*hook*/
|
||||
u8 *test1;
|
||||
u8 *test1;
|
||||
|
||||
/*update*/
|
||||
u32 rf_supportability;
|
||||
u32 rf_supportability;
|
||||
|
||||
u8 eeprom_thermal;
|
||||
u8 dpk_en; /*Enable Function DPK OFF/ON = 0/1*/
|
||||
boolean dpk_done;
|
||||
u32 fw_ver;
|
||||
u8 eeprom_thermal;
|
||||
u8 dpk_en; /*Enable Function DPK OFF/ON = 0/1*/
|
||||
boolean dpk_done;
|
||||
u64 dpk_progressing_time;
|
||||
u32 fw_ver;
|
||||
|
||||
boolean *is_con_tx;
|
||||
boolean *is_single_tone;
|
||||
boolean *is_carrier_suppresion;
|
||||
boolean *is_con_tx;
|
||||
boolean *is_single_tone;
|
||||
boolean *is_carrier_suppresion;
|
||||
boolean is_dpk_in_progress;
|
||||
|
||||
u8 *mp_rate_index;
|
||||
u32 p_rate_index;
|
||||
u8 *mp_rate_index;
|
||||
u32 p_rate_index;
|
||||
u8 pwt_type;
|
||||
u32 rf_dbg_comp;
|
||||
#if (DM_ODM_SUPPORT_TYPE & ODM_WIN)
|
||||
struct _halrf_psd_data halrf_psd_data;
|
||||
struct _halrf_psd_data halrf_psd_data;
|
||||
#endif
|
||||
};
|
||||
|
||||
/*============================================================*/
|
||||
/* function prototype */
|
||||
/*============================================================*/
|
||||
/*@============================================================*/
|
||||
/*@ function prototype */
|
||||
/*@============================================================*/
|
||||
|
||||
void halrf_basic_profile(
|
||||
void *dm_void,
|
||||
u32 *_used,
|
||||
char *output,
|
||||
u32 *_out_len
|
||||
);
|
||||
#if (RTL8822B_SUPPORT == 1 || RTL8821C_SUPPORT == 1)
|
||||
void halrf_iqk_info_dump(
|
||||
void *dm_void,
|
||||
u32 *_used,
|
||||
char *output,
|
||||
u32 *_out_len
|
||||
);
|
||||
#if (RTL8822B_SUPPORT == 1 || RTL8821C_SUPPORT == 1 ||\
|
||||
RTL8195B_SUPPORT == 1 || RTL8198F_SUPPORT == 1 ||\
|
||||
RTL8814B_SUPPORT == 1 || RTL8822C_SUPPORT == 1)
|
||||
void halrf_iqk_info_dump(void *dm_void, u32 *_used, char *output,
|
||||
u32 *_out_len);
|
||||
|
||||
void
|
||||
halrf_iqk_hwtx_check(
|
||||
void *dm_void,
|
||||
boolean is_check
|
||||
);
|
||||
void halrf_iqk_hwtx_check(void *dm_void, boolean is_check);
|
||||
#endif
|
||||
|
||||
u8
|
||||
halrf_match_iqk_version(
|
||||
void *dm_void
|
||||
);
|
||||
u8 halrf_match_iqk_version(void *dm_void);
|
||||
|
||||
void
|
||||
halrf_support_ability_debug(
|
||||
void *dm_void,
|
||||
char input[][16],
|
||||
u32 *_used,
|
||||
char *output,
|
||||
u32 *_out_len
|
||||
);
|
||||
void halrf_support_ability_debug(void *dm_void, char input[][16], u32 *_used,
|
||||
char *output, u32 *_out_len);
|
||||
|
||||
void
|
||||
halrf_cmn_info_init(
|
||||
void *dm_void,
|
||||
enum halrf_cmninfo_init cmn_info,
|
||||
u32 value
|
||||
);
|
||||
void halrf_cmn_info_init(void *dm_void, enum halrf_cmninfo_init cmn_info,
|
||||
u32 value);
|
||||
|
||||
void
|
||||
halrf_cmn_info_hook(
|
||||
void *dm_void,
|
||||
u32 cmn_info,
|
||||
void *value
|
||||
);
|
||||
void halrf_cmn_info_hook(void *dm_void, enum halrf_cmninfo_hook cmn_info,
|
||||
void *value);
|
||||
|
||||
void
|
||||
halrf_cmn_info_set(
|
||||
void *dm_void,
|
||||
u32 cmn_info,
|
||||
u64 value
|
||||
);
|
||||
void halrf_cmn_info_set(void *dm_void, u32 cmn_info, u64 value);
|
||||
|
||||
u64
|
||||
halrf_cmn_info_get(
|
||||
void *dm_void,
|
||||
u32 cmn_info
|
||||
);
|
||||
u64 halrf_cmn_info_get(void *dm_void, u32 cmn_info);
|
||||
|
||||
void
|
||||
halrf_watchdog(
|
||||
void *dm_void
|
||||
);
|
||||
void halrf_watchdog(void *dm_void);
|
||||
|
||||
void
|
||||
halrf_supportability_init(
|
||||
void *dm_void
|
||||
);
|
||||
void halrf_supportability_init(void *dm_void);
|
||||
|
||||
void
|
||||
halrf_init(
|
||||
void *dm_void
|
||||
);
|
||||
void halrf_init(void *dm_void);
|
||||
|
||||
void
|
||||
halrf_iqk_trigger(
|
||||
void *dm_void,
|
||||
boolean is_recovery
|
||||
);
|
||||
void halrf_iqk_trigger(void *dm_void, boolean is_recovery);
|
||||
|
||||
void
|
||||
halrf_segment_iqk_trigger(
|
||||
void *dm_void,
|
||||
boolean clear,
|
||||
boolean segment_iqk
|
||||
);
|
||||
void halrf_segment_iqk_trigger(void *dm_void, boolean clear,
|
||||
boolean segment_iqk);
|
||||
|
||||
void
|
||||
halrf_lck_trigger(
|
||||
void *dm_void
|
||||
);
|
||||
void halrf_lck_trigger(void *dm_void);
|
||||
|
||||
void
|
||||
halrf_iqk_debug(
|
||||
void *dm_void,
|
||||
u32 *const dm_value,
|
||||
u32 *_used,
|
||||
char *output,
|
||||
u32 *_out_len
|
||||
);
|
||||
void halrf_iqk_debug(void *dm_void, u32 *const dm_value, u32 *_used,
|
||||
char *output, u32 *_out_len);
|
||||
|
||||
void
|
||||
phydm_get_iqk_cfir(
|
||||
void *dm_void,
|
||||
u8 idx,
|
||||
u8 path,
|
||||
boolean debug
|
||||
);
|
||||
void phydm_get_iqk_cfir(void *dm_void, u8 idx, u8 path, boolean debug);
|
||||
|
||||
void
|
||||
halrf_iqk_xym_read(
|
||||
void *dm_void,
|
||||
u8 path,
|
||||
u8 xym_type
|
||||
);
|
||||
void halrf_iqk_xym_read(void *dm_void, u8 path, u8 xym_type);
|
||||
|
||||
void
|
||||
halrf_rf_lna_setting(
|
||||
void *dm_void,
|
||||
enum phydm_lna_set type
|
||||
);
|
||||
void halrf_rf_lna_setting(void *dm_void, enum halrf_lna_set type);
|
||||
|
||||
void halrf_do_imr_test(void *dm_void, u8 data);
|
||||
|
||||
void
|
||||
halrf_do_imr_test(
|
||||
void *dm_void,
|
||||
u8 data
|
||||
);
|
||||
u32 halrf_psd_log2base(u32 val);
|
||||
|
||||
u32
|
||||
halrf_psd_log2base(
|
||||
u32 val
|
||||
);
|
||||
void halrf_dpk_trigger(void *dm_void);
|
||||
|
||||
u8 halrf_dpk_result_check(void *dm_void);
|
||||
|
||||
#if (RTL8822B_SUPPORT == 1 || RTL8821C_SUPPORT == 1)
|
||||
void halrf_iqk_dbg(void *dm_void);
|
||||
#endif
|
||||
void halrf_dpk_sram_read(void *dm_void);
|
||||
|
||||
void halrf_dpk_enable_disable(void *dm_void);
|
||||
|
||||
void halrf_dpk_track(void *dm_void);
|
||||
|
||||
void halrf_dpk_reload(void *dm_void);
|
||||
|
||||
/*Global function*/
|
||||
|
||||
void halrf_reload_bp(void *dm_void, u32 *bp_reg, u32 *bp, u32 num);
|
||||
|
||||
void halrf_reload_bprf(void *dm_void, u32 *bp_reg, u32 bp[][4], u32 num,
|
||||
u8 ss);
|
||||
|
||||
void halrf_bp(void *dm_void, u32 *bp_reg, u32 *bp, u32 num);
|
||||
|
||||
void halrf_bprf(void *dm_void, u32 *bp_reg, u32 bp[][4], u32 num, u8 ss);
|
||||
|
||||
void halrf_mode(void *dm_void, u32 *i_value, u32 *q_value);
|
||||
|
||||
boolean halrf_compare(void *dm_void, u32 value);
|
||||
|
||||
u32 halrf_delta(void *dm_void, u32 v1, u32 v2);
|
||||
|
||||
void halrf_minmax_compare(void *dm_void, u32 value, u32 *min, u32 *max);
|
||||
|
||||
void halrf_b_sort(void *dm_void, u32 *iv, u32 *qv);
|
||||
|
||||
void halrf_bubble(void *dm_void, u32 *v1, u32 *v2);
|
||||
|
||||
void halrf_swap(void *dm_void, u32 *v1, u32 *v2);
|
||||
|
||||
enum hal_status
|
||||
halrf_config_rfk_with_header_file(void *dm_void, u32 config_type);
|
||||
|
||||
#if (RTL8822B_SUPPORT == 1 || RTL8821C_SUPPORT == 1 ||\
|
||||
RTL8195B_SUPPORT == 1 || RTL8198F_SUPPORT == 1 ||\
|
||||
RTL8814B_SUPPORT == 1 || RTL8822C_SUPPORT == 1)
|
||||
void halrf_iqk_dbg(void *dm_void);
|
||||
#endif
|
||||
|
||||
void halrf_tssi_init(void *dm_void);
|
||||
|
||||
void halrf_do_tssi(void *dm_void);
|
||||
|
||||
void halrf_set_tssi_value(void *dm_void, u32 tssi_value);
|
||||
|
||||
u32 halrf_query_tssi_value(void *dm_void);
|
||||
|
||||
#endif /*__HALRF_H__*/
|
||||
|
||||
261
hal/phydm/halrf/halrf_debug.c
Normal file
261
hal/phydm/halrf/halrf_debug.c
Normal file
@@ -0,0 +1,261 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Copyright(c) 2007 - 2017 Realtek Corporation.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of version 2 of the GNU General Public License as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
* more details.
|
||||
*
|
||||
* The full GNU General Public License is included in this distribution in the
|
||||
* file called LICENSE.
|
||||
*
|
||||
* Contact Information:
|
||||
* wlanfae <wlanfae@realtek.com>
|
||||
* Realtek Corporation, No. 2, Innovation Road II, Hsinchu Science Park,
|
||||
* Hsinchu 300, Taiwan.
|
||||
*
|
||||
* Larry Finger <Larry.Finger@lwfinger.net>
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
/*@************************************************************
|
||||
* include files
|
||||
* ************************************************************
|
||||
*/
|
||||
|
||||
#include "mp_precomp.h"
|
||||
#include "phydm_precomp.h"
|
||||
|
||||
void halrf_basic_profile(void *dm_void, u32 *_used, char *output, u32 *_out_len)
|
||||
{
|
||||
#ifdef CONFIG_PHYDM_DEBUG_FUNCTION
|
||||
struct dm_struct *dm = (struct dm_struct *)dm_void;
|
||||
u32 used = *_used;
|
||||
u32 out_len = *_out_len;
|
||||
|
||||
/* HAL RF version List */
|
||||
PDM_SNPF(out_len, used, output + used, out_len - used, "%-35s\n",
|
||||
"% HAL RF version %");
|
||||
PDM_SNPF(out_len, used, output + used, out_len - used, " %-35s: %s\n",
|
||||
"Power Tracking", HALRF_POWRTRACKING_VER);
|
||||
PDM_SNPF(out_len, used, output + used, out_len - used,
|
||||
" %-35s: %s %s\n", "IQK",
|
||||
(dm->fw_offload_ability & PHYDM_RF_IQK_OFFLOAD) ? "FW" :
|
||||
HALRF_IQK_VER,
|
||||
(halrf_match_iqk_version(dm_void)) ? "(match)" : "(mismatch)");
|
||||
|
||||
PDM_SNPF(out_len, used, output + used, out_len - used, " %-35s: %s\n",
|
||||
"LCK", HALRF_LCK_VER);
|
||||
PDM_SNPF(out_len, used, output + used, out_len - used, " %-35s: %s\n",
|
||||
"DPK", HALRF_DPK_VER);
|
||||
PDM_SNPF(out_len, used, output + used, out_len - used, " %-35s: %s\n",
|
||||
"KFREE", HALRF_KFREE_VER);
|
||||
PDM_SNPF(out_len, used, output + used, out_len - used, " %-35s: %s\n",
|
||||
"TX 2G Current Calibration", HALRF_PABIASK_VER);
|
||||
PDM_SNPF(out_len, used, output + used, out_len - used, " %-35s: %s\n",
|
||||
"RFK Init. Parameter", HALRF_RFK_INIT_VER);
|
||||
|
||||
*_used = used;
|
||||
*_out_len = out_len;
|
||||
#endif
|
||||
}
|
||||
|
||||
void halrf_debug_trace(void *dm_void, char input[][16], u32 *_used,
|
||||
char *output, u32 *_out_len)
|
||||
{
|
||||
struct dm_struct *dm = (struct dm_struct *)dm_void;
|
||||
struct _hal_rf_ *rf = &dm->rf_table;
|
||||
u32 one = 1;
|
||||
u32 used = *_used;
|
||||
u32 out_len = *_out_len;
|
||||
u32 rf_var[10] = {0};
|
||||
u8 i;
|
||||
|
||||
for (i = 0; i < 5; i++)
|
||||
if (input[i + 1])
|
||||
PHYDM_SSCANF(input[i + 2], DCMD_DECIMAL, &rf_var[i]);
|
||||
|
||||
if (rf_var[0] == 100) {
|
||||
PDM_SNPF(out_len, used, output + used, out_len - used,
|
||||
"\n[DBG MSG] RF Selection\n");
|
||||
PDM_SNPF(out_len, used, output + used, out_len - used,
|
||||
"00. (( %s ))TX_PWR_TRACK\n",
|
||||
((rf->rf_dbg_comp & DBG_RF_TX_PWR_TRACK) ? ("V") :
|
||||
(".")));
|
||||
PDM_SNPF(out_len, used, output + used, out_len - used,
|
||||
"01. (( %s ))IQK\n",
|
||||
((rf->rf_dbg_comp & DBG_RF_IQK) ? ("V") : (".")));
|
||||
PDM_SNPF(out_len, used, output + used, out_len - used,
|
||||
"02. (( %s ))LCK\n",
|
||||
((rf->rf_dbg_comp & DBG_RF_LCK) ? ("V") : (".")));
|
||||
PDM_SNPF(out_len, used, output + used, out_len - used,
|
||||
"03. (( %s ))DPK\n",
|
||||
((rf->rf_dbg_comp & DBG_RF_DPK) ? ("V") : (".")));
|
||||
PDM_SNPF(out_len, used, output + used, out_len - used,
|
||||
"04. (( %s ))TXGAPK\n",
|
||||
((rf->rf_dbg_comp & DBG_RF_TXGAPK) ? ("V") : (".")));
|
||||
PDM_SNPF(out_len, used, output + used, out_len - used,
|
||||
"29. (( %s ))MP\n",
|
||||
((rf->rf_dbg_comp & DBG_RF_MP) ? ("V") : (".")));
|
||||
PDM_SNPF(out_len, used, output + used, out_len - used,
|
||||
"30. (( %s ))TMP\n",
|
||||
((rf->rf_dbg_comp & DBG_RF_TMP) ? ("V") : (".")));
|
||||
PDM_SNPF(out_len, used, output + used, out_len - used,
|
||||
"31. (( %s ))INIT\n",
|
||||
((rf->rf_dbg_comp & DBG_RF_INIT) ? ("V") : (".")));
|
||||
|
||||
} else if (rf_var[0] == 101) {
|
||||
rf->rf_dbg_comp = 0;
|
||||
PDM_SNPF(out_len, used, output + used, out_len - used,
|
||||
"Disable all DBG COMP\n");
|
||||
} else {
|
||||
if (rf_var[1] == 1) /*enable*/
|
||||
rf->rf_dbg_comp |= (one << rf_var[0]);
|
||||
else if (rf_var[1] == 2) /*disable*/
|
||||
rf->rf_dbg_comp &= ~(one << rf_var[0]);
|
||||
}
|
||||
PDM_SNPF(out_len, used, output + used, out_len - used,
|
||||
"\nCurr-RF_Dbg_Comp = 0x%x\n", rf->rf_dbg_comp);
|
||||
|
||||
*_used = used;
|
||||
*_out_len = out_len;
|
||||
}
|
||||
|
||||
struct halrf_command {
|
||||
char name[16];
|
||||
u8 id;
|
||||
};
|
||||
|
||||
enum halrf_CMD_ID {
|
||||
HALRF_HELP,
|
||||
HALRF_SUPPORTABILITY,
|
||||
HALRF_DBG_COMP,
|
||||
HALRF_PROFILE,
|
||||
HALRF_IQK_INFO,
|
||||
HALRF_IQK,
|
||||
HALRF_IQK_DEBUG,
|
||||
};
|
||||
|
||||
struct halrf_command halrf_cmd_ary[] = {
|
||||
{"-h", HALRF_HELP},
|
||||
{"ability", HALRF_SUPPORTABILITY},
|
||||
{"dbg", HALRF_DBG_COMP},
|
||||
{"profile", HALRF_PROFILE},
|
||||
{"iqk_info", HALRF_IQK_INFO},
|
||||
{"iqk", HALRF_IQK},
|
||||
{"iqk_dbg", HALRF_IQK_DEBUG},
|
||||
};
|
||||
|
||||
void halrf_cmd_parser(void *dm_void, char input[][16], u32 *_used, char *output,
|
||||
u32 *_out_len, u32 input_num)
|
||||
{
|
||||
struct dm_struct *dm = (struct dm_struct *)dm_void;
|
||||
#ifdef CONFIG_PHYDM_DEBUG_FUNCTION
|
||||
u8 id = 0;
|
||||
u32 rf_var[10] = {0};
|
||||
u32 i, input_idx = 0;
|
||||
u32 halrf_ary_size =
|
||||
sizeof(halrf_cmd_ary) / sizeof(struct halrf_command);
|
||||
u32 used = *_used;
|
||||
u32 out_len = *_out_len;
|
||||
|
||||
/* Parsing Cmd ID */
|
||||
for (i = 0; i < halrf_ary_size; i++) {
|
||||
if (strcmp(halrf_cmd_ary[i].name, input[1]) == 0) {
|
||||
id = halrf_cmd_ary[i].id;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (i == halrf_ary_size) {
|
||||
PDM_SNPF(out_len, used, output + used, out_len - used,
|
||||
"RF Cmd not found\n");
|
||||
return;
|
||||
}
|
||||
|
||||
switch (id) {
|
||||
case HALRF_HELP:
|
||||
PDM_SNPF(out_len, used, output + used, out_len - used,
|
||||
"RF cmd ==>\n");
|
||||
|
||||
for (i = 0; i < halrf_ary_size - 1; i++) {
|
||||
PDM_SNPF(out_len, used, output + used, out_len - used,
|
||||
" %-5d: %s\n", i, halrf_cmd_ary[i + 1].name);
|
||||
}
|
||||
break;
|
||||
case HALRF_SUPPORTABILITY:
|
||||
halrf_support_ability_debug(dm, &input[0], &used, output,
|
||||
&out_len);
|
||||
break;
|
||||
case HALRF_DBG_COMP:
|
||||
halrf_debug_trace(dm, &input[0], &used, output, &out_len);
|
||||
break;
|
||||
case HALRF_PROFILE:
|
||||
halrf_basic_profile(dm, &used, output, &out_len);
|
||||
break;
|
||||
case HALRF_IQK_INFO:
|
||||
#if (RTL8822B_SUPPORT == 1 || RTL8821C_SUPPORT == 1)
|
||||
halrf_iqk_info_dump(dm, &used, output, &out_len);
|
||||
#endif
|
||||
break;
|
||||
case HALRF_IQK:
|
||||
PDM_SNPF(out_len, used, output + used, out_len - used,
|
||||
"TRX IQK Trigger\n");
|
||||
halrf_iqk_trigger(dm, false);
|
||||
#if (RTL8822B_SUPPORT == 1 || RTL8821C_SUPPORT == 1)
|
||||
halrf_iqk_info_dump(dm, &used, output, &out_len);
|
||||
#endif
|
||||
break;
|
||||
case HALRF_IQK_DEBUG:
|
||||
|
||||
for (i = 0; i < 5; i++) {
|
||||
if (input[i + 1]) {
|
||||
PHYDM_SSCANF(input[i + 2], DCMD_HEX,
|
||||
&rf_var[i]);
|
||||
input_idx++;
|
||||
}
|
||||
}
|
||||
|
||||
if (input_idx >= 1) {
|
||||
#if (RTL8822B_SUPPORT == 1 || RTL8821C_SUPPORT == 1)
|
||||
if (dm->support_ic_type & (ODM_RTL8822B | ODM_RTL8821C))
|
||||
halrf_iqk_debug(dm, (u32 *)rf_var, &used,
|
||||
output, &out_len);
|
||||
#endif
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
*_used = used;
|
||||
*_out_len = out_len;
|
||||
#endif
|
||||
}
|
||||
|
||||
void halrf_init_debug_setting(void *dm_void)
|
||||
{
|
||||
struct dm_struct *dm = (struct dm_struct *)dm_void;
|
||||
struct _hal_rf_ *rf = &dm->rf_table;
|
||||
|
||||
rf->rf_dbg_comp =
|
||||
#if DBG
|
||||
#if 0
|
||||
/*DBG_RF_TX_PWR_TRACK |*/
|
||||
/*DBG_RF_IQK | */
|
||||
/*DBG_RF_LCK | */
|
||||
/*DBG_RF_DPK | */
|
||||
/*DBG_RF_DACK | */
|
||||
/*DBG_RF_TXGAPK | */
|
||||
/*DBG_RF_MP | */
|
||||
/*DBG_RF_TMP | */
|
||||
/*DBG_RF_INIT | */
|
||||
#endif
|
||||
#endif
|
||||
0;
|
||||
}
|
||||
123
hal/phydm/halrf/halrf_debug.h
Normal file
123
hal/phydm/halrf/halrf_debug.h
Normal file
@@ -0,0 +1,123 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Copyright(c) 2007 - 2017 Realtek Corporation.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of version 2 of the GNU General Public License as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
* more details.
|
||||
*
|
||||
* The full GNU General Public License is included in this distribution in the
|
||||
* file called LICENSE.
|
||||
*
|
||||
* Contact Information:
|
||||
* wlanfae <wlanfae@realtek.com>
|
||||
* Realtek Corporation, No. 2, Innovation Road II, Hsinchu Science Park,
|
||||
* Hsinchu 300, Taiwan.
|
||||
*
|
||||
* Larry Finger <Larry.Finger@lwfinger.net>
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
#ifndef __HALRF_DEBUG_H__
|
||||
#define __HALRF_DEBUG_H__
|
||||
|
||||
/*@============================================================*/
|
||||
/*@include files*/
|
||||
/*@============================================================*/
|
||||
|
||||
/*@============================================================*/
|
||||
/*@Definition */
|
||||
/*@============================================================*/
|
||||
|
||||
#if DBG
|
||||
|
||||
#if (DM_ODM_SUPPORT_TYPE == ODM_AP)
|
||||
#define RF_DBG(dm, comp, fmt, args...) \
|
||||
do { \
|
||||
if ((comp) & dm->rf_table.rf_dbg_comp) { \
|
||||
pr_debug("[RF] "); \
|
||||
RT_PRINTK(fmt, ##args); \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
#elif (DM_ODM_SUPPORT_TYPE == ODM_WIN)
|
||||
|
||||
static __inline void RF_DBG(PDM_ODM_T dm, int comp, char *fmt, ...)
|
||||
{
|
||||
RT_STATUS rt_status;
|
||||
va_list args;
|
||||
char buf[PRINT_MAX_SIZE] = {0};
|
||||
|
||||
if ((comp & dm->rf_table.rf_dbg_comp) == 0)
|
||||
return;
|
||||
|
||||
if (fmt == NULL)
|
||||
return;
|
||||
|
||||
va_start(args, fmt);
|
||||
rt_status = (RT_STATUS)RtlStringCbVPrintfA(buf, PRINT_MAX_SIZE, fmt, args);
|
||||
va_end(args);
|
||||
|
||||
if (rt_status != RT_STATUS_SUCCESS) {
|
||||
DbgPrint("Failed (%d) to print message to buffer\n", rt_status);
|
||||
return;
|
||||
}
|
||||
|
||||
DbgPrint("[RF] %s", buf);
|
||||
}
|
||||
|
||||
#elif (DM_ODM_SUPPORT_TYPE == ODM_IOT)
|
||||
|
||||
#define RF_DBG(dm, comp, fmt, args...) \
|
||||
do { \
|
||||
if ((comp) & dm->rf_table.rf_dbg_comp) { \
|
||||
RT_DEBUG(COMP_PHYDM, DBG_DMESG, "[RF] " fmt, ##args); \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
#else
|
||||
#define RF_DBG(dm, comp, fmt, args...) \
|
||||
do { \
|
||||
struct dm_struct *__dm = dm; \
|
||||
if ((comp) & __dm->rf_table.rf_dbg_comp) { \
|
||||
RT_TRACE(((struct rtl_priv *)__dm->adapter), \
|
||||
COMP_PHYDM, DBG_DMESG, "[RF] " fmt, ##args); \
|
||||
} \
|
||||
} while (0)
|
||||
#endif
|
||||
|
||||
#else /*#if DBG*/
|
||||
|
||||
#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
|
||||
static __inline void RF_DBG(struct dm_struct *dm, int comp, char *fmt, ...)
|
||||
{
|
||||
}
|
||||
#else
|
||||
#define RF_DBG(dm, comp, fmt, args...)
|
||||
#endif
|
||||
|
||||
#endif /*#if DBG*/
|
||||
|
||||
/*@============================================================*/
|
||||
/*@ enumeration */
|
||||
/*@============================================================*/
|
||||
|
||||
/*@============================================================*/
|
||||
/*@ structure */
|
||||
/*@============================================================*/
|
||||
|
||||
/*@============================================================*/
|
||||
/*@ function prototype */
|
||||
/*@============================================================*/
|
||||
|
||||
void halrf_cmd_parser(void *dm_void, char input[][16], u32 *_used, char *output,
|
||||
u32 *_out_len, u32 input_num);
|
||||
|
||||
void halrf_init_debug_setting(void *dm_void);
|
||||
|
||||
#endif /*__HALRF_H__*/
|
||||
86
hal/phydm/halrf/halrf_dpk.h
Normal file
86
hal/phydm/halrf/halrf_dpk.h
Normal file
@@ -0,0 +1,86 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Copyright(c) 2007 - 2017 Realtek Corporation.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of version 2 of the GNU General Public License as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
* more details.
|
||||
*
|
||||
* The full GNU General Public License is included in this distribution in the
|
||||
* file called LICENSE.
|
||||
*
|
||||
* Contact Information:
|
||||
* wlanfae <wlanfae@realtek.com>
|
||||
* Realtek Corporation, No. 2, Innovation Road II, Hsinchu Science Park,
|
||||
* Hsinchu 300, Taiwan.
|
||||
*
|
||||
* Larry Finger <Larry.Finger@lwfinger.net>
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
#ifndef __HALRF_DPK_H__
|
||||
#define __HALRF_DPK_H__
|
||||
|
||||
/*@--------------------------Define Parameters-------------------------------*/
|
||||
#define GAIN_LOSS 1
|
||||
#define DO_DPK 2
|
||||
#define DPK_ON 3
|
||||
#define DPK_LOK 4
|
||||
#define DPK_TXK 5
|
||||
|
||||
#define DAGC 4
|
||||
#define LOSS_CHK 0
|
||||
#define GAIN_CHK 1
|
||||
#define PAS_READ 2
|
||||
#define AVG_THERMAL_NUM 8
|
||||
#define AVG_THERMAL_NUM_DPK 8
|
||||
#define THERMAL_DPK_AVG_NUM 4
|
||||
|
||||
/*@---------------------------End Define Parameters---------------------------*/
|
||||
|
||||
struct dm_dpk_info {
|
||||
|
||||
boolean is_dpk_enable;
|
||||
boolean is_dpk_pwr_on;
|
||||
boolean is_dpk_by_channel;
|
||||
u16 dpk_path_ok;
|
||||
/*@BIT(15)~BIT(12) : 5G reserved, BIT(11)~BIT(8) 5G_S3~5G_S0*/
|
||||
/*@BIT(7)~BIT(4) : 2G reserved, BIT(3)~BIT(0) 2G_S3~2G_S0*/
|
||||
u8 thermal_dpk;
|
||||
u8 thermal_dpk_avg[AVG_THERMAL_NUM_DPK];
|
||||
u8 thermal_dpk_avg_index;
|
||||
|
||||
#if (RTL8822C_SUPPORT == 1)
|
||||
u8 result[2][1]; /*path/group*/
|
||||
u8 tx_agc[2][1]; /*path/group*/
|
||||
u32 coef[2][1][20]; /*path/group/MDPD coefficient*/
|
||||
#endif
|
||||
|
||||
#if (RTL8198F_SUPPORT == 1 || RTL8192F_SUPPORT == 1 || RTL8197F_SUPPORT == 1)
|
||||
/*2G DPK data*/
|
||||
u8 dpk_result[4][3]; /*path/group*/
|
||||
u8 pwsf_2g[4][3]; /*path/group*/
|
||||
u32 lut_2g_even[4][3][64]; /*path/group/LUT data*/
|
||||
u32 lut_2g_odd[4][3][64]; /*path/group/LUT data*/
|
||||
#endif
|
||||
|
||||
#if (RTL8195B_SUPPORT == 1)
|
||||
/*2G DPK data*/
|
||||
u8 dpk_2g_result[1][3]; /*path/group*/
|
||||
u8 pwsf_2g[1][3]; /*path/group*/
|
||||
u32 lut_2g_even[1][3][16]; /*path/group/LUT data*/
|
||||
u32 lut_2g_odd[1][3][16]; /*path/group/LUT data*/
|
||||
/*5G DPK data*/
|
||||
u8 dpk_5g_result[1][6]; /*path/group*/
|
||||
u8 pwsf_5g[1][6]; /*path/group*/
|
||||
u32 lut_5g_even[1][6][16]; /*path/group/LUT data*/
|
||||
u32 lut_5g_odd[1][6][16]; /*path/group/LUT data*/
|
||||
#endif
|
||||
};
|
||||
|
||||
#endif /*__HALRF_DPK_H__*/
|
||||
@@ -23,21 +23,21 @@
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
#ifndef __HALRF_FEATURES_H__
|
||||
#define __HALRF_FEATURES
|
||||
#ifndef __HALRF_FEATURES_H__
|
||||
#define __HALRF_FEATURES_H__
|
||||
|
||||
#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
|
||||
|
||||
#define CONFIG_HALRF_POWERTRACKING 1
|
||||
#define CONFIG_HALRF_POWERTRACKING 1
|
||||
|
||||
#elif (DM_ODM_SUPPORT_TYPE == ODM_AP)
|
||||
|
||||
#define CONFIG_HALRF_POWERTRACKING 1
|
||||
#define CONFIG_HALRF_POWERTRACKING 1
|
||||
|
||||
#elif (DM_ODM_SUPPORT_TYPE == ODM_CE)
|
||||
|
||||
#define CONFIG_HALRF_POWERTRACKING 1
|
||||
#define CONFIG_HALRF_POWERTRACKING 1
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
#endif /*#ifndef __HALRF_FEATURES_H__*/
|
||||
|
||||
@@ -23,63 +23,81 @@
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
#ifndef __PHYDMIQK_H__
|
||||
#define __PHYDMIQK_H__
|
||||
#ifndef __HALRF_IQK_H__
|
||||
#define __HALRF_IQK_H__
|
||||
|
||||
/*--------------------------Define Parameters-------------------------------*/
|
||||
#define LOK_delay 1
|
||||
#define WBIQK_delay 10
|
||||
#define TX_IQK 0
|
||||
#define RX_IQK 1
|
||||
#define TXIQK 0
|
||||
#define RXIQK1 1
|
||||
#define RXIQK2 2
|
||||
/*@--------------------------Define Parameters-------------------------------*/
|
||||
#define LOK_delay 1
|
||||
#define WBIQK_delay 10
|
||||
#define TX_IQK 0
|
||||
#define RX_IQK 1
|
||||
#define TXIQK 0
|
||||
#define RXIQK1 1
|
||||
#define RXIQK2 2
|
||||
#define kcount_limit_80m 2
|
||||
#define kcount_limit_others 4
|
||||
#define rxiqk_gs_limit 10
|
||||
#define TXWBIQK_EN 1
|
||||
#define RXWBIQK_EN 1
|
||||
#define NUM 4
|
||||
/*@-----------------------End Define Parameters-----------------------*/
|
||||
|
||||
#define NUM 4
|
||||
/*---------------------------End Define Parameters-------------------------------*/
|
||||
struct dm_dack_info {
|
||||
u32 ic_a;
|
||||
u32 qc_a;
|
||||
u32 ic_b;
|
||||
u32 qc_b;
|
||||
};
|
||||
|
||||
struct dm_iqk_info {
|
||||
boolean lok_fail[NUM];
|
||||
boolean iqk_fail[2][NUM];
|
||||
u32 iqc_matrix[2][NUM];
|
||||
u8 iqk_times;
|
||||
u32 rf_reg18;
|
||||
u32 lna_idx;
|
||||
u8 rxiqk_step;
|
||||
u8 tmp1bcc;
|
||||
u8 kcount;
|
||||
u8 rfk_ing; /*bit0:IQKing, bit1:LCKing, bit2:DPKing*/
|
||||
boolean rfk_forbidden;
|
||||
#if (RTL8814A_SUPPORT == 1 || RTL8822B_SUPPORT == 1 || RTL8821C_SUPPORT == 1)
|
||||
u32 iqk_channel[2];
|
||||
boolean iqk_fail_report[2][4][2]; /*channel/path/TRX(TX:0, RX:1) */
|
||||
u32 iqk_cfir_real[3][4][2][8]; /*channel / path / TRX(TX:0, RX:1) / CFIR_real*/ /*channel index = 2 is just for debug*/
|
||||
u32 iqk_cfir_imag[3][4][2][8]; /*channel / path / TRX(TX:0, RX:1) / CFIR_imag*/ /*channel index = 2 is just for debug*/
|
||||
u8 retry_count[2][4][3]; /* channel / path / (TXK:0, RXK1:1, RXK2:2) */
|
||||
u8 gs_retry_count[2][4][2]; /* channel / path / (GSRXK1:0, GSRXK2:1) */
|
||||
u8 rxiqk_fail_code[2][4]; /* channel / path 0:SRXK1 fail, 1:RXK1 fail 2:RXK2 fail */
|
||||
u32 lok_idac[2][4]; /*channel / path*/
|
||||
u16 rxiqk_agc[2][4]; /*channel / path*/
|
||||
u32 bypass_iqk[2][4]; /*channel / 0xc94/0xe94*/
|
||||
u32 txgap_result[8]; /*txagpK result */
|
||||
u32 tmp_gntwl;
|
||||
boolean is_btg;
|
||||
boolean isbnd;
|
||||
boolean lok_fail[NUM];
|
||||
boolean iqk_fail[2][NUM];
|
||||
u32 iqc_matrix[2][NUM];
|
||||
u8 iqk_times;
|
||||
u32 rf_reg18;
|
||||
u32 rf_reg08;
|
||||
u32 lna_idx;
|
||||
u8 iqk_step;
|
||||
u8 rxiqk_step;
|
||||
u8 tmp1bcc;
|
||||
u8 txgain;
|
||||
u8 kcount;
|
||||
u8 rfk_ing; /*bit0:IQKing, bit1:LCKing, bit2:DPKing*/
|
||||
boolean rfk_forbidden;
|
||||
u8 rxbb;
|
||||
#if (RTL8814A_SUPPORT == 1 || RTL8822B_SUPPORT == 1 || RTL8821C_SUPPORT == 1 ||\
|
||||
RTL8195B_SUPPORT == 1 || RTL8198F_SUPPORT == 1 ||\
|
||||
RTL8814B_SUPPORT == 1 || RTL8822C_SUPPORT == 1)
|
||||
u32 iqk_channel[2];
|
||||
boolean iqk_fail_report[2][4][2]; /*channel/path/TRX(TX:0, RX:1) */
|
||||
/*channel / path / TRX(TX:0, RX:1) / CFIR_real*/
|
||||
/*channel index = 2 is just for debug*/
|
||||
u32 iqk_cfir_real[3][4][2][8];
|
||||
/*channel / path / TRX(TX:0, RX:1) / CFIR_imag*/
|
||||
/*channel index = 2 is just for debug*/
|
||||
u32 iqk_cfir_imag[3][4][2][8];
|
||||
u8 retry_count[2][4][3]; /* channel / path / (TXK:0, RXK1:1, RXK2:2) */
|
||||
u8 gs_retry_count[2][4][2]; /* channel / path / (GSRXK1:0, GSRXK2:1) */
|
||||
/* channel / path 0:SRXK1 fail, 1:RXK1 fail 2:RXK2 fail */
|
||||
u8 rxiqk_fail_code[2][4];
|
||||
u32 lok_idac[2][4]; /*channel / path*/
|
||||
u16 rxiqk_agc[2][4]; /*channel / path*/
|
||||
u32 bypass_iqk[2][4]; /*channel / 0xc94/0xe94*/
|
||||
u32 txgap_result[8]; /*txagpK result */
|
||||
u32 tmp_gntwl;
|
||||
boolean is_btg;
|
||||
boolean isbnd;
|
||||
boolean is_reload;
|
||||
boolean segment_iqk;
|
||||
boolean is_hwtx;
|
||||
|
||||
boolean xym_read;
|
||||
boolean xym_read;
|
||||
boolean trximr_enable;
|
||||
u32 rx_xym[2][10];
|
||||
u32 tx_xym[2][10];
|
||||
u32 gs1_xym[2][6];
|
||||
u32 gs2_xym[2][6];
|
||||
u32 rxk1_xym[2][6];
|
||||
u32 rx_xym[2][10];
|
||||
u32 tx_xym[2][10];
|
||||
u32 gs1_xym[2][6];
|
||||
u32 gs2_xym[2][6];
|
||||
u32 rxk1_xym[2][6];
|
||||
#endif
|
||||
};
|
||||
|
||||
#endif
|
||||
#endif /*__HALRF_IQK_H__*/
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -23,66 +23,70 @@
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
#ifndef __HALRF_KFREE_H__
|
||||
#define __HALRF_KFREE_H__
|
||||
|
||||
#ifndef __PHYDMKFREE_H__
|
||||
#define __PHYDKFREE_H__
|
||||
#define KFREE_VERSION "1.0"
|
||||
|
||||
#define KFREE_VERSION "1.0"
|
||||
|
||||
#define KFREE_BAND_NUM 6
|
||||
#define KFREE_BAND_NUM 6
|
||||
#define KFREE_CH_NUM 3
|
||||
|
||||
#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN | ODM_AP))
|
||||
|
||||
#define BB_GAIN_NUM 6
|
||||
#define BB_GAIN_NUM 6
|
||||
|
||||
#endif
|
||||
|
||||
#define KFREE_FLAG_ON BIT(0)
|
||||
#define KFREE_FLAG_THERMAL_K_ON BIT(1)
|
||||
#define KFREE_FLAG_ON BIT(0)
|
||||
#define KFREE_FLAG_THERMAL_K_ON BIT(1)
|
||||
|
||||
#define KFREE_FLAG_ON_2G BIT(2)
|
||||
#define KFREE_FLAG_ON_5G BIT(3)
|
||||
#define KFREE_FLAG_ON_2G BIT(2)
|
||||
#define KFREE_FLAG_ON_5G BIT(3)
|
||||
|
||||
#define PA_BIAS_FLAG_ON BIT(4)
|
||||
#define PA_BIAS_FLAG_ON BIT(4)
|
||||
|
||||
#define PPG_THERMAL_OFFSET_8821C 0x1EF
|
||||
#define PPG_BB_GAIN_2G_TXAB_OFFSET_8821C 0x1EE
|
||||
#define PPG_BB_GAIN_5GL1_TXA_OFFSET_8821C 0x1EC
|
||||
#define PPG_BB_GAIN_5GL2_TXA_OFFSET_8821C 0x1E8
|
||||
#define PPG_BB_GAIN_5GM1_TXA_OFFSET_8821C 0x1E4
|
||||
#define PPG_BB_GAIN_5GM2_TXA_OFFSET_8821C 0x1E0
|
||||
#define PPG_BB_GAIN_5GH1_TXA_OFFSET_8821C 0x1DC
|
||||
#define PPG_THERMAL_OFFSET_98F 0x50
|
||||
#define PPG_2GM_TXAB_98F 0x51
|
||||
#define PPG_2GM_TXCD_98F 0x52
|
||||
#define PPG_2GL_TXAB_98F 0x53
|
||||
#define PPG_2GL_TXCD_98F 0x54
|
||||
#define PPG_5GH_TXAB_98F 0x55
|
||||
#define PPG_5GH_TXCD_98F 0x56
|
||||
|
||||
#define PPG_THERMAL_OFFSET_21C 0x1EF
|
||||
#define PPG_2G_TXAB_21C 0x1EE
|
||||
#define PPG_5GL1_TXA_21C 0x1EC
|
||||
#define PPG_5GL2_TXA_21C 0x1E8
|
||||
#define PPG_5GM1_TXA_21C 0x1E4
|
||||
#define PPG_5GM2_TXA_21C 0x1E0
|
||||
#define PPG_5GH1_TXA_21C 0x1DC
|
||||
|
||||
#define PPG_THERMAL_OFFSET_22B 0x3EF
|
||||
#define PPG_2G_TXAB_22B 0x3EE
|
||||
#define PPG_2G_TXCD_22B 0x3ED
|
||||
#define PPG_5GL1_TXA_22B 0x3EC
|
||||
#define PPG_5GL1_TXB_22B 0x3EB
|
||||
#define PPG_5GL1_TXC_22B 0x3EA
|
||||
#define PPG_5GL1_TXD_22B 0x3E9
|
||||
#define PPG_5GL2_TXA_22B 0x3E8
|
||||
#define PPG_5GL2_TXB_22B 0x3E7
|
||||
#define PPG_5GL2_TXC_22B 0x3E6
|
||||
#define PPG_5GL2_TXD_22B 0x3E5
|
||||
#define PPG_5GM1_TXA_22B 0x3E4
|
||||
#define PPG_5GM1_TXB_22B 0x3E3
|
||||
#define PPG_5GM1_TXC_22B 0x3E2
|
||||
#define PPG_5GM1_TXD_22B 0x3E1
|
||||
#define PPG_5GM2_TXA_22B 0x3E0
|
||||
#define PPG_5GM2_TXB_22B 0x3DF
|
||||
#define PPG_5GM2_TXC_22B 0x3DE
|
||||
#define PPG_5GM2_TXD_22B 0x3DD
|
||||
#define PPG_5GH1_TXA_22B 0x3DC
|
||||
#define PPG_5GH1_TXB_22B 0x3DB
|
||||
#define PPG_5GH1_TXC_22B 0x3DA
|
||||
#define PPG_5GH1_TXD_22B 0x3D9
|
||||
|
||||
#define PPG_THERMAL_OFFSET 0x3EF
|
||||
#define PPG_BB_GAIN_2G_TXAB_OFFSET 0x3EE
|
||||
#define PPG_BB_GAIN_2G_TXCD_OFFSET 0x3ED
|
||||
#define PPG_BB_GAIN_5GL1_TXA_OFFSET 0x3EC
|
||||
#define PPG_BB_GAIN_5GL1_TXB_OFFSET 0x3EB
|
||||
#define PPG_BB_GAIN_5GL1_TXC_OFFSET 0x3EA
|
||||
#define PPG_BB_GAIN_5GL1_TXD_OFFSET 0x3E9
|
||||
#define PPG_BB_GAIN_5GL2_TXA_OFFSET 0x3E8
|
||||
#define PPG_BB_GAIN_5GL2_TXB_OFFSET 0x3E7
|
||||
#define PPG_BB_GAIN_5GL2_TXC_OFFSET 0x3E6
|
||||
#define PPG_BB_GAIN_5GL2_TXD_OFFSET 0x3E5
|
||||
#define PPG_BB_GAIN_5GM1_TXA_OFFSET 0x3E4
|
||||
#define PPG_BB_GAIN_5GM1_TXB_OFFSET 0x3E3
|
||||
#define PPG_BB_GAIN_5GM1_TXC_OFFSET 0x3E2
|
||||
#define PPG_BB_GAIN_5GM1_TXD_OFFSET 0x3E1
|
||||
#define PPG_BB_GAIN_5GM2_TXA_OFFSET 0x3E0
|
||||
#define PPG_BB_GAIN_5GM2_TXB_OFFSET 0x3DF
|
||||
#define PPG_BB_GAIN_5GM2_TXC_OFFSET 0x3DE
|
||||
#define PPG_BB_GAIN_5GM2_TXD_OFFSET 0x3DD
|
||||
#define PPG_BB_GAIN_5GH1_TXA_OFFSET 0x3DC
|
||||
#define PPG_BB_GAIN_5GH1_TXB_OFFSET 0x3DB
|
||||
#define PPG_BB_GAIN_5GH1_TXC_OFFSET 0x3DA
|
||||
#define PPG_BB_GAIN_5GH1_TXD_OFFSET 0x3D9
|
||||
|
||||
#define PPG_PA_BIAS_2G_TXA_OFFSET 0x3D5
|
||||
#define PPG_PA_BIAS_2G_TXB_OFFSET 0x3D6
|
||||
|
||||
|
||||
#define PPG_PABIAS_2GA_22B 0x3D5
|
||||
#define PPG_PABIAS_2GB_22B 0x3D6
|
||||
|
||||
struct odm_power_trim_data {
|
||||
u8 flag;
|
||||
@@ -91,8 +95,6 @@ struct odm_power_trim_data {
|
||||
s8 thermal;
|
||||
};
|
||||
|
||||
|
||||
|
||||
enum phydm_kfree_channeltosw {
|
||||
PHYDM_2G = 0,
|
||||
PHYDM_5GLB1 = 1,
|
||||
@@ -102,41 +104,16 @@ enum phydm_kfree_channeltosw {
|
||||
PHYDM_5GHB = 5,
|
||||
};
|
||||
|
||||
void phydm_get_thermal_trim_offset(void *dm_void);
|
||||
|
||||
void phydm_get_power_trim_offset(void *dm_void);
|
||||
|
||||
void
|
||||
phydm_get_thermal_trim_offset(
|
||||
void *dm_void
|
||||
);
|
||||
void phydm_get_pa_bias_offset(void *dm_void);
|
||||
|
||||
void
|
||||
phydm_get_power_trim_offset(
|
||||
void *dm_void
|
||||
);
|
||||
s8 phydm_get_thermal_offset(void *dm_void);
|
||||
|
||||
void
|
||||
phydm_get_pa_bias_offset(
|
||||
void *dm_void
|
||||
);
|
||||
void phydm_clear_kfree_to_rf(void *dm_void, u8 e_rf_path, u8 data);
|
||||
|
||||
s8
|
||||
phydm_get_thermal_offset(
|
||||
void *dm_void
|
||||
);
|
||||
void phydm_config_kfree(void *dm_void, u8 channel_to_sw);
|
||||
|
||||
void
|
||||
phydm_clear_kfree_to_rf(
|
||||
void *dm_void,
|
||||
u8 e_rf_path,
|
||||
u8 data
|
||||
);
|
||||
|
||||
|
||||
void
|
||||
phydm_config_kfree(
|
||||
void *dm_void,
|
||||
u8 channel_to_sw
|
||||
);
|
||||
|
||||
|
||||
#endif
|
||||
#endif /*__HALRF_KFREE_H__*/
|
||||
|
||||
@@ -23,58 +23,55 @@
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
/* ************************************************************
|
||||
/*@************************************************************
|
||||
* include files
|
||||
* ************************************************************ */
|
||||
* ************************************************************
|
||||
*/
|
||||
#include "mp_precomp.h"
|
||||
#include "phydm_precomp.h"
|
||||
|
||||
|
||||
boolean
|
||||
odm_check_power_status(
|
||||
void *dm_void
|
||||
)
|
||||
odm_check_power_status(void *dm_void)
|
||||
{
|
||||
#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
|
||||
struct dm_struct *dm = (struct dm_struct *)dm_void;
|
||||
PADAPTER adapter = (PADAPTER)dm->adapter;
|
||||
struct dm_struct *dm = (struct dm_struct *)dm_void;
|
||||
PADAPTER *adapter = dm->adapter;
|
||||
|
||||
RT_RF_POWER_STATE rt_state;
|
||||
MGNT_INFO *mgnt_info = &adapter->MgntInfo;
|
||||
RT_RF_POWER_STATE rt_state;
|
||||
MGNT_INFO *mgnt_info = &((PADAPTER)adapter)->MgntInfo;
|
||||
|
||||
/* 2011/07/27 MH We are not testing ready~~!! We may fail to get correct value when init sequence. */
|
||||
if (mgnt_info->init_adpt_in_progress == true) {
|
||||
PHYDM_DBG(dm, ODM_COMP_INIT, "check_pow_status Return true, due to initadapter\n");
|
||||
return true;
|
||||
RF_DBG(dm, DBG_RF_INIT,
|
||||
"check_pow_status Return true, due to initadapter\n");
|
||||
return true;
|
||||
}
|
||||
|
||||
/* */
|
||||
/* 2011/07/19 MH We can not execute tx pwoer tracking/ LLC calibrate or IQK. */
|
||||
/* */
|
||||
adapter->HalFunc.GetHwRegHandler(adapter, HW_VAR_RF_STATE, (u8 *)(&rt_state));
|
||||
if (adapter->bDriverStopped || adapter->bDriverIsGoingToPnpSetPowerSleep || rt_state == eRfOff) {
|
||||
PHYDM_DBG(dm, ODM_COMP_INIT, "check_pow_status Return false, due to %d/%d/%d\n",
|
||||
adapter->bDriverStopped, adapter->bDriverIsGoingToPnpSetPowerSleep, rt_state);
|
||||
return false;
|
||||
/*
|
||||
* 2011/07/19 MH We can not execute tx pwoer tracking/ LLC calibrate or IQK.
|
||||
*/
|
||||
((PADAPTER)adapter)->HalFunc.GetHwRegHandler((PADAPTER)adapter, HW_VAR_RF_STATE, (u8 *)(&rt_state));
|
||||
if (((PADAPTER)adapter)->bDriverStopped || ((PADAPTER)adapter)->bDriverIsGoingToPnpSetPowerSleep || rt_state == eRfOff) {
|
||||
RF_DBG(dm, DBG_RF_INIT,
|
||||
"check_pow_status Return false, due to %d/%d/%d\n",
|
||||
((PADAPTER)adapter)->bDriverStopped,
|
||||
((PADAPTER)adapter)->bDriverIsGoingToPnpSetPowerSleep,
|
||||
rt_state);
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
return true;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN | ODM_CE))
|
||||
void
|
||||
halrf_update_pwr_track(
|
||||
void *dm_void,
|
||||
u8 rate
|
||||
)
|
||||
void halrf_update_pwr_track(void *dm_void, u8 rate)
|
||||
{
|
||||
struct dm_struct *dm = (struct dm_struct *)dm_void;
|
||||
struct dm_struct *dm = (struct dm_struct *)dm_void;
|
||||
#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
|
||||
u8 path_idx = 0;
|
||||
u8 path_idx = 0;
|
||||
#endif
|
||||
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK, "Pwr Track Get rate=0x%x\n", rate);
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK, "Pwr Track Get rate=0x%x\n", rate);
|
||||
|
||||
dm->tx_rate = rate;
|
||||
|
||||
@@ -113,47 +110,43 @@ halrf_update_pwr_track(
|
||||
odm_schedule_work_item(&dm->ra_rpt_workitem);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
|
||||
void
|
||||
halrf_update_init_rate_work_item_callback(
|
||||
void *context
|
||||
)
|
||||
void halrf_update_init_rate_work_item_callback(
|
||||
void *context)
|
||||
{
|
||||
void *adapter = (void *)context;
|
||||
HAL_DATA_TYPE *hal_data = GET_HAL_DATA(((PADAPTER)adapter));
|
||||
struct dm_struct *dm = &hal_data->DM_OutSrc;
|
||||
u8 p = 0;
|
||||
void *adapter = (void *)context;
|
||||
HAL_DATA_TYPE *hal_data = GET_HAL_DATA(((PADAPTER)adapter));
|
||||
struct dm_struct *dm = &hal_data->DM_OutSrc;
|
||||
u8 p = 0;
|
||||
|
||||
if (dm->support_ic_type == ODM_RTL8821) {
|
||||
#if (RTL8821A_SUPPORT == 1)
|
||||
odm_tx_pwr_track_set_pwr8821a(dm, MIX_MODE, RF_PATH_A, 0);
|
||||
/**/
|
||||
#endif
|
||||
} else if (dm->support_ic_type == ODM_RTL8812) {
|
||||
for (p = RF_PATH_A; p < MAX_PATH_NUM_8812A; p++) { /*DOn't know how to include &c*/
|
||||
|
||||
#if (RTL8812A_SUPPORT == 1)
|
||||
/*Don't know how to include &c*/
|
||||
for (p = RF_PATH_A; p < MAX_PATH_NUM_8812A; p++)
|
||||
odm_tx_pwr_track_set_pwr8812a(dm, MIX_MODE, p, 0);
|
||||
/**/
|
||||
}
|
||||
#endif
|
||||
} else if (dm->support_ic_type == ODM_RTL8723B) {
|
||||
#if (RTL8723B_SUPPORT == 1)
|
||||
odm_tx_pwr_track_set_pwr_8723b(dm, MIX_MODE, RF_PATH_A, 0);
|
||||
/**/
|
||||
#endif
|
||||
} else if (dm->support_ic_type == ODM_RTL8192E) {
|
||||
for (p = RF_PATH_A; p < MAX_PATH_NUM_8192E; p++) { /*DOn't know how to include &c*/
|
||||
#if (RTL8192E_SUPPORT == 1)
|
||||
/*Don't know how to include &c*/
|
||||
for (p = RF_PATH_A; p < MAX_PATH_NUM_8192E; p++)
|
||||
odm_tx_pwr_track_set_pwr92_e(dm, MIX_MODE, p, 0);
|
||||
/**/
|
||||
}
|
||||
#endif
|
||||
} else if (dm->support_ic_type == ODM_RTL8188E) {
|
||||
#if (RTL8188E_SUPPORT == 1)
|
||||
odm_tx_pwr_track_set_pwr88_e(dm, MIX_MODE, RF_PATH_A, 0);
|
||||
/**/
|
||||
#endif
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -23,28 +23,19 @@
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
#ifndef __HALRF_POWER_TRACKING_H__
|
||||
#define __HALRF_POWER_TRACKING_H__
|
||||
|
||||
#ifndef __HALRF_POWER_TRACKING_H__
|
||||
#define __HALRF_POWER_TRACKING_H__
|
||||
|
||||
boolean
|
||||
odm_check_power_status(
|
||||
void *dm_void
|
||||
);
|
||||
odm_check_power_status(void *dm_void);
|
||||
|
||||
#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN | ODM_CE))
|
||||
void
|
||||
halrf_update_pwr_track(
|
||||
void *dm_void,
|
||||
u8 rate
|
||||
);
|
||||
void halrf_update_pwr_track(void *dm_void, u8 rate);
|
||||
#endif
|
||||
|
||||
#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
|
||||
void
|
||||
halrf_update_init_rate_work_item_callback(
|
||||
void *context
|
||||
);
|
||||
void halrf_update_init_rate_work_item_callback(
|
||||
void *context);
|
||||
#endif
|
||||
|
||||
#endif
|
||||
#endif /*#ifndef __HALRF_POWERTRACKING_H__*/
|
||||
|
||||
@@ -338,6 +338,50 @@ u8 cck_swing_table_ch14_88f[CCK_TABLE_SIZE_88F][16] = {
|
||||
{0xD8, 0xD1, 0xBD, 0x7D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} /*-6dB*/
|
||||
};
|
||||
|
||||
/* Winnita ADD 20171113 PathA 0xAB4[10:0],PathB 0xAB4[21:11]*/
|
||||
u32 cck_swing_table_ch1_ch14_8192f[CCK_TABLE_SIZE_8192F] = {
|
||||
0x0CD, /*0 , -20dB*/
|
||||
0x0D9,
|
||||
0x0E6,
|
||||
0x0F3,
|
||||
0x102,
|
||||
0x111,
|
||||
0x121,
|
||||
0x132,
|
||||
0x144,
|
||||
0x158,
|
||||
0x16C,
|
||||
0x182,
|
||||
0x198,
|
||||
0x1B1,
|
||||
0x1CA,
|
||||
0x1E5,
|
||||
0x202,
|
||||
0x221,
|
||||
0x241,
|
||||
0x263, /*19*/
|
||||
0x287, /*20*/
|
||||
0x2AE, /*21*/
|
||||
0x2D6, /*22*/
|
||||
0x301, /*23*/
|
||||
0x32F, /*24*/
|
||||
0x35F, /*25*/
|
||||
0x392, /*26*/
|
||||
0x3C9, /*27*/
|
||||
0x402, /*28*/
|
||||
0x43F, /*29*/
|
||||
0x47F, /*30*/
|
||||
0x4C3, /*31*/
|
||||
0x50C, /*32*/
|
||||
0x558, /*33*/
|
||||
0x5A9, /*34*/
|
||||
0x5FF, /*35*/
|
||||
0x65A, /*36*/
|
||||
0x6BA,
|
||||
0x720,
|
||||
0x78C,
|
||||
0x7FF,
|
||||
};
|
||||
|
||||
|
||||
#if 0
|
||||
@@ -692,7 +736,9 @@ u8 cck_swing_table_ch14_92e[CCK_TABLE_SIZE_92E][8] = {
|
||||
};
|
||||
#endif
|
||||
|
||||
#if (RTL8814A_SUPPORT == 1 || RTL8822B_SUPPORT == 1 || RTL8821C_SUPPORT == 1)
|
||||
#if (RTL8814A_SUPPORT == 1 || RTL8822B_SUPPORT == 1 ||\
|
||||
RTL8821C_SUPPORT == 1 || RTL8198F_SUPPORT == 1 ||\
|
||||
RTL8814B_SUPPORT == 1)
|
||||
u32 tx_scaling_table_jaguar[TXSCALE_TABLE_SIZE] = {
|
||||
0x081, /* 0, -12.0dB */
|
||||
0x088, /* 1, -11.5dB */
|
||||
@@ -910,6 +956,15 @@ get_swing_index(
|
||||
}
|
||||
#endif
|
||||
|
||||
#if (RTL8192F_SUPPORT == 1)
|
||||
if (GET_CHIP_VER(priv) == VERSION_8192F) {
|
||||
bb_swing = phy_query_bb_reg(priv, REG_OFDM_0_XA_TX_IQ_IMBALANCE, MASKOFDM_D);
|
||||
swing_table = ofdm_swing_table_new;
|
||||
swing_table_size = OFDM_TABLE_SIZE_92D;
|
||||
bb_swing_mask = 22;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if (RTL8822B_SUPPORT == 1)
|
||||
if (GET_CHIP_VER(priv) == VERSION_8822B) {
|
||||
bb_swing = phy_query_bb_reg(priv, REG_A_TX_SCALE_JAGUAR, 0xFFE00000);
|
||||
@@ -926,7 +981,7 @@ get_swing_index(
|
||||
break;
|
||||
}
|
||||
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK, "bb_swing=0x%x bbswing_index=%d\n", bb_swing, i);
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK, "bb_swing=0x%x bbswing_index=%d\n", bb_swing, i);
|
||||
|
||||
|
||||
return i;
|
||||
@@ -943,8 +998,8 @@ odm_txpowertracking_thermal_meter_init(
|
||||
struct rtl8192cd_priv *priv = dm->priv;
|
||||
u8 p;
|
||||
u8 default_swing_index;
|
||||
#if (RTL8197F_SUPPORT == 1 || RTL8822B_SUPPORT == 1)
|
||||
if ((GET_CHIP_VER(priv) == VERSION_8197F) || (GET_CHIP_VER(priv) == VERSION_8822B))
|
||||
#if (RTL8197F_SUPPORT == 1 || RTL8822B_SUPPORT == 1 || RTL8192F_SUPPORT == 1)
|
||||
if ((GET_CHIP_VER(priv) == VERSION_8197F) || (GET_CHIP_VER(priv) == VERSION_8822B) ||(GET_CHIP_VER(priv) == VERSION_8192F))
|
||||
default_swing_index = get_swing_index(dm);
|
||||
#endif
|
||||
|
||||
@@ -959,7 +1014,7 @@ odm_txpowertracking_thermal_meter_init(
|
||||
|
||||
if (*(dm->mp_mode) == false)
|
||||
hal_data->txpowertrack_control = true;
|
||||
PHYDM_DBG(dm, COMP_POWER_TRACKING, "mgnt_info->is_txpowertracking = %d\n", mgnt_info->is_txpowertracking);
|
||||
RF_DBG(dm, COMP_POWER_TRACKING, "mgnt_info->is_txpowertracking = %d\n", mgnt_info->is_txpowertracking);
|
||||
#elif (DM_ODM_SUPPORT_TYPE == ODM_CE)
|
||||
#ifdef CONFIG_RTL8188E
|
||||
{
|
||||
@@ -1016,6 +1071,13 @@ odm_txpowertracking_thermal_meter_init(
|
||||
}
|
||||
#endif
|
||||
|
||||
#if (RTL8192F_SUPPORT == 1)
|
||||
if (GET_CHIP_VER(priv) == VERSION_8192F) {
|
||||
cali_info->default_ofdm_index = 30;
|
||||
cali_info->default_cck_index = 28;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if (RTL8822B_SUPPORT == 1)
|
||||
if (GET_CHIP_VER(priv) == VERSION_8822B) {
|
||||
cali_info->default_ofdm_index = (default_swing_index >= (TXSCALE_TABLE_SIZE - 1)) ? 24 : default_swing_index;
|
||||
@@ -1040,7 +1102,7 @@ odm_txpowertracking_thermal_meter_init(
|
||||
}
|
||||
cali_info->bb_swing_idx_cck = cali_info->default_cck_index;
|
||||
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK, "cali_info->default_ofdm_index=%d cali_info->default_cck_index=%d\n", cali_info->default_ofdm_index, cali_info->default_cck_index);
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK, "cali_info->default_ofdm_index=%d cali_info->default_cck_index=%d\n", cali_info->default_ofdm_index, cali_info->default_cck_index);
|
||||
|
||||
cali_info->tm_trigger = 0;
|
||||
}
|
||||
@@ -1146,8 +1208,8 @@ odm_txpowertracking_check_ap(
|
||||
#if (DM_ODM_SUPPORT_TYPE == ODM_AP)
|
||||
struct rtl8192cd_priv *priv = dm->priv;
|
||||
|
||||
#if ((RTL8188E_SUPPORT == 1) || (RTL8192E_SUPPORT == 1) || (RTL8812A_SUPPORT == 1) || (RTL8881A_SUPPORT == 1) || (RTL8814A_SUPPORT == 1) || (RTL8197F_SUPPORT == 1))
|
||||
if (dm->support_ic_type & (ODM_RTL8188E | ODM_RTL8192E | ODM_RTL8812 | ODM_RTL8881A | ODM_RTL8814A | ODM_RTL8197F | ODM_RTL8822B | ODM_RTL8821C))
|
||||
#if ((RTL8188E_SUPPORT == 1) || (RTL8192E_SUPPORT == 1) || (RTL8812A_SUPPORT == 1) || (RTL8881A_SUPPORT == 1) || (RTL8814A_SUPPORT == 1) || (RTL8197F_SUPPORT == 1) || (RTL8192F_SUPPORT == 1) || (RTL8198F_SUPPORT == 1))
|
||||
if (dm->support_ic_type & (ODM_RTL8188E | ODM_RTL8192E | ODM_RTL8812 | ODM_RTL8881A | ODM_RTL8814A | ODM_RTL8197F | ODM_RTL8822B | ODM_RTL8821C | ODM_RTL8192F | ODM_RTL8198F))
|
||||
odm_txpowertracking_callback_thermal_meter(dm);
|
||||
else
|
||||
#endif
|
||||
|
||||
@@ -13,8 +13,8 @@
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
#ifndef __PHYDMPOWERTRACKING_H__
|
||||
#define __PHYDMPOWERTRACKING_H__
|
||||
#ifndef __HALRF_POWERTRACKING_H__
|
||||
#define __HALRF_POWERTRACKING_H__
|
||||
|
||||
#if (DM_ODM_SUPPORT_TYPE == ODM_AP)
|
||||
#ifdef RTK_AC_SUPPORT
|
||||
@@ -44,6 +44,9 @@
|
||||
#define IQK_BB_REG_NUM 9
|
||||
|
||||
#define AVG_THERMAL_NUM 8
|
||||
#define AVG_THERMAL_NUM_DPK 8
|
||||
#define THERMAL_DPK_AVG_NUM 4
|
||||
|
||||
#define iqk_matrix_reg_num 8
|
||||
/* #define IQK_MATRIX_SETTINGS_NUM 1+24+21 */
|
||||
#define IQK_MATRIX_SETTINGS_NUM (14+24+21) /* Channels_2_4G_NUM + Channels_5G_20M_NUM + Channels_5G */
|
||||
@@ -53,6 +56,7 @@
|
||||
#define OFDM_TABLE_SIZE 37
|
||||
#define CCK_TABLE_SIZE 33
|
||||
#define CCK_TABLE_SIZE_88F 21
|
||||
#define CCK_TABLE_SIZE_8192F 41
|
||||
|
||||
|
||||
|
||||
@@ -69,6 +73,7 @@
|
||||
extern u8 cck_swing_table_ch1_ch14_88f[CCK_TABLE_SIZE_88F][16];
|
||||
extern u8 cck_swing_table_ch1_ch13_88f[CCK_TABLE_SIZE_88F][16];
|
||||
extern u8 cck_swing_table_ch14_88f[CCK_TABLE_SIZE_88F][16];
|
||||
extern u32 cck_swing_table_ch1_ch14_8192f[CCK_TABLE_SIZE_8192F];
|
||||
|
||||
#endif
|
||||
|
||||
@@ -96,7 +101,9 @@ static u8 delta_swing_table_idx_2ga_n_8188e[] = {0, 0, 0, 2, 2, 3, 3, 4, 4, 4, 4
|
||||
#define OFDM_TABLE_SIZE_8812 43
|
||||
#define AVG_THERMAL_NUM_8812 4
|
||||
|
||||
#if (RTL8814A_SUPPORT == 1 || RTL8822B_SUPPORT == 1 || RTL8821C_SUPPORT == 1)
|
||||
#if (RTL8814A_SUPPORT == 1 || RTL8822B_SUPPORT == 1 ||\
|
||||
RTL8821C_SUPPORT == 1 || RTL8198F_SUPPORT == 1 ||\
|
||||
RTL8814B_SUPPORT == 1)
|
||||
extern u32 tx_scaling_table_jaguar[TXSCALE_TABLE_SIZE];
|
||||
#elif(ODM_IC_11AC_SERIES_SUPPORT)
|
||||
extern unsigned int ofdm_swing_table_8812[OFDM_TABLE_SIZE_8812];
|
||||
@@ -135,7 +142,7 @@ struct dm_rf_calibration_struct {
|
||||
u8 thermal_value_lck;
|
||||
u8 thermal_value_iqk;
|
||||
s8 thermal_value_delta; /* delta of thermal_value and efuse thermal */
|
||||
u8 thermal_value_dpk;
|
||||
|
||||
u8 thermal_value_avg[AVG_THERMAL_NUM];
|
||||
u8 thermal_value_avg_index;
|
||||
u8 thermal_value_rx_gain;
|
||||
@@ -143,7 +150,7 @@ struct dm_rf_calibration_struct {
|
||||
u8 thermal_value_dpk_store;
|
||||
u8 thermal_value_dpk_track;
|
||||
boolean txpowertracking_in_progress;
|
||||
boolean is_dpk_enable;
|
||||
|
||||
|
||||
boolean is_reloadtxpowerindex;
|
||||
u8 is_rf_pi_enable;
|
||||
@@ -195,6 +202,8 @@ struct dm_rf_calibration_struct {
|
||||
u8 delta_swing_tssi_table_5gb[BAND_NUM][DELTA_SWINTSSI_SIZE];
|
||||
u8 delta_swing_tssi_table_5gc[BAND_NUM][DELTA_SWINTSSI_SIZE];
|
||||
u8 delta_swing_tssi_table_5gd[BAND_NUM][DELTA_SWINTSSI_SIZE];
|
||||
s8 delta_swing_table_xtal_p[DELTA_SWINGIDX_SIZE];
|
||||
s8 delta_swing_table_xtal_n[DELTA_SWINGIDX_SIZE];
|
||||
u8 delta_swing_table_idx_2ga_p_8188e[DELTA_SWINGIDX_SIZE];
|
||||
u8 delta_swing_table_idx_2ga_n_8188e[DELTA_SWINGIDX_SIZE];
|
||||
|
||||
@@ -223,6 +232,7 @@ struct dm_rf_calibration_struct {
|
||||
boolean modify_tx_agc_flag_path_c;
|
||||
boolean modify_tx_agc_flag_path_d;
|
||||
boolean modify_tx_agc_flag_path_a_cck;
|
||||
boolean modify_tx_agc_flag_path_b_cck;
|
||||
|
||||
s8 kfree_offset[MAX_RF_PATH];
|
||||
|
||||
@@ -269,8 +279,51 @@ struct dm_rf_calibration_struct {
|
||||
u8 is_ap_kdone;
|
||||
u8 is_apk_thermal_meter_ignore;
|
||||
u8 is_dp_done;
|
||||
#if 0 /*move below members to halrf_dpk.h*/
|
||||
u8 is_dp_path_aok;
|
||||
u8 is_dp_path_bok;
|
||||
u8 is_dp_path_cok;
|
||||
u8 is_dp_path_dok;
|
||||
u8 dp_path_a_result[3];
|
||||
u8 dp_path_b_result[3];
|
||||
u8 dp_path_c_result[3];
|
||||
u8 dp_path_d_result[3];
|
||||
boolean is_dpk_enable;
|
||||
u32 txrate[11];
|
||||
u8 pwsf_2g_a[3];
|
||||
u8 pwsf_2g_b[3];
|
||||
u8 pwsf_2g_c[3];
|
||||
u8 pwsf_2g_d[3];
|
||||
u32 lut_2g_even_a[3][64];
|
||||
u32 lut_2g_odd_a[3][64];
|
||||
u32 lut_2g_even_b[3][64];
|
||||
u32 lut_2g_odd_b[3][64];
|
||||
u32 lut_2g_even_c[3][64];
|
||||
u32 lut_2g_odd_c[3][64];
|
||||
u32 lut_2g_even_d[3][64];
|
||||
u32 lut_2g_odd_d[3][64];
|
||||
u1Byte is_5g_pdk_a_ok;
|
||||
u1Byte is_5g_pdk_b_ok;
|
||||
u1Byte is_5g_pdk_c_ok;
|
||||
u1Byte is_5g_pdk_d_ok;
|
||||
u1Byte pwsf_5g_a[9];
|
||||
u1Byte pwsf_5g_b[9];
|
||||
u1Byte pwsf_5g_c[9];
|
||||
u1Byte pwsf_5g_d[9];
|
||||
u4Byte lut_5g_even_a[9][16];
|
||||
u4Byte lut_5g_odd_a[9][16];
|
||||
u4Byte lut_5g_even_b[9][16];
|
||||
u4Byte lut_5g_odd_b[9][16];
|
||||
u4Byte lut_5g_even_c[9][16];
|
||||
u4Byte lut_5g_odd_c[9][16];
|
||||
u4Byte lut_5g_even_d[9][16];
|
||||
u4Byte lut_5g_odd_d[9][16];
|
||||
u8 thermal_value_dpk;
|
||||
u8 thermal_value_dpk_avg[AVG_THERMAL_NUM_DPK];
|
||||
u8 thermal_value_dpk_avg_index;
|
||||
#endif
|
||||
s8 modify_tx_agc_value_ofdm;
|
||||
s8 modify_tx_agc_value_cck;
|
||||
|
||||
/*Add by Yuchen for Kfree Phydm*/
|
||||
u8 reg_rf_kfree_enable; /*for registry*/
|
||||
@@ -342,4 +395,4 @@ odm_txpowertracking_thermal_meter_check(
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
#endif /*#ifndef __HALRF_POWER_TRACKING_H__*/
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -23,326 +23,305 @@
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
#ifndef __PHYDMPOWERTRACKING_H__
|
||||
#define __PHYDMPOWERTRACKING_H__
|
||||
#ifndef __HALRF_POWERTRACKING_H__
|
||||
#define __HALRF_POWERTRACKING_H__
|
||||
|
||||
#define DPK_DELTA_MAPPING_NUM 13
|
||||
#define index_mapping_HP_NUM 15
|
||||
#define OFDM_TABLE_SIZE 43
|
||||
#define CCK_TABLE_SIZE 33
|
||||
#define CCK_TABLE_SIZE_88F 21
|
||||
#define TXSCALE_TABLE_SIZE 37
|
||||
#define CCK_TABLE_SIZE_8723D 41
|
||||
/* JJ ADD 20161014 */
|
||||
#define CCK_TABLE_SIZE_8710B 41
|
||||
#define DPK_DELTA_MAPPING_NUM 13
|
||||
#define index_mapping_HP_NUM 15
|
||||
#define OFDM_TABLE_SIZE 43
|
||||
#define CCK_TABLE_SIZE 33
|
||||
#define CCK_TABLE_SIZE_88F 21
|
||||
#define TXSCALE_TABLE_SIZE 37
|
||||
#define CCK_TABLE_SIZE_8723D 41
|
||||
/*@JJ ADD 20161014 */
|
||||
#define CCK_TABLE_SIZE_8710B 41
|
||||
#define CCK_TABLE_SIZE_8192F 41
|
||||
|
||||
#define TXPWR_TRACK_TABLE_SIZE 30
|
||||
#define DELTA_SWINGIDX_SIZE 30
|
||||
#define DELTA_SWINTSSI_SIZE 61
|
||||
#define BAND_NUM 4
|
||||
#define TXPWR_TRACK_TABLE_SIZE 30
|
||||
#define DELTA_SWINGIDX_SIZE 30
|
||||
#define DELTA_SWINTSSI_SIZE 61
|
||||
#define BAND_NUM 4
|
||||
|
||||
#define AVG_THERMAL_NUM 8
|
||||
#define IQK_MAC_REG_NUM 4
|
||||
#define IQK_ADDA_REG_NUM 16
|
||||
#define IQK_BB_REG_NUM_MAX 10
|
||||
#define AVG_THERMAL_NUM 8
|
||||
#define IQK_MAC_REG_NUM 4
|
||||
#define IQK_ADDA_REG_NUM 16
|
||||
#define IQK_BB_REG_NUM_MAX 10
|
||||
|
||||
#define IQK_BB_REG_NUM 9
|
||||
#define IQK_BB_REG_NUM 9
|
||||
|
||||
|
||||
|
||||
#define iqk_matrix_reg_num 8
|
||||
#define iqk_matrix_reg_num 8
|
||||
#if (DM_ODM_SUPPORT_TYPE == ODM_CE) && defined(DM_ODM_CE_MAC80211)
|
||||
#else
|
||||
#define IQK_MATRIX_SETTINGS_NUM (14+24+21) /* Channels_2_4G_NUM + Channels_5G_20M_NUM + Channels_5G */
|
||||
/* Channels_2_4G_NUM + Channels_5G_20M_NUM + Channels_5G */
|
||||
#define IQK_MATRIX_SETTINGS_NUM (14 + 24 + 21)
|
||||
#endif
|
||||
|
||||
extern u32 ofdm_swing_table[OFDM_TABLE_SIZE];
|
||||
extern u8 cck_swing_table_ch1_ch13[CCK_TABLE_SIZE][8];
|
||||
extern u8 cck_swing_table_ch14[CCK_TABLE_SIZE][8];
|
||||
extern u32 ofdm_swing_table[OFDM_TABLE_SIZE];
|
||||
extern u8 cck_swing_table_ch1_ch13[CCK_TABLE_SIZE][8];
|
||||
extern u8 cck_swing_table_ch14[CCK_TABLE_SIZE][8];
|
||||
|
||||
extern u32 ofdm_swing_table_new[OFDM_TABLE_SIZE];
|
||||
extern u8 cck_swing_table_ch1_ch13_new[CCK_TABLE_SIZE][8];
|
||||
extern u8 cck_swing_table_ch14_new[CCK_TABLE_SIZE][8];
|
||||
extern u8 cck_swing_table_ch1_ch14_88f[CCK_TABLE_SIZE_88F][16];
|
||||
extern u8 cck_swing_table_ch1_ch13_88f[CCK_TABLE_SIZE_88F][16];
|
||||
extern u8 cck_swing_table_ch14_88f[CCK_TABLE_SIZE_88F][16];
|
||||
extern u32 cck_swing_table_ch1_ch14_8723d[CCK_TABLE_SIZE_8723D];
|
||||
/* JJ ADD 20161014 */
|
||||
extern u32 cck_swing_table_ch1_ch14_8710b[CCK_TABLE_SIZE_8710B];
|
||||
extern u32 ofdm_swing_table_new[OFDM_TABLE_SIZE];
|
||||
extern u8 cck_swing_table_ch1_ch13_new[CCK_TABLE_SIZE][8];
|
||||
extern u8 cck_swing_table_ch14_new[CCK_TABLE_SIZE][8];
|
||||
extern u8 cck_swing_table_ch1_ch14_88f[CCK_TABLE_SIZE_88F][16];
|
||||
extern u8 cck_swing_table_ch1_ch13_88f[CCK_TABLE_SIZE_88F][16];
|
||||
extern u8 cck_swing_table_ch14_88f[CCK_TABLE_SIZE_88F][16];
|
||||
extern u32 cck_swing_table_ch1_ch14_8723d[CCK_TABLE_SIZE_8723D];
|
||||
/*@JJ ADD 20161014 */
|
||||
extern u32 cck_swing_table_ch1_ch14_8710b[CCK_TABLE_SIZE_8710B];
|
||||
extern u32 cck_swing_table_ch1_ch14_8192f[CCK_TABLE_SIZE_8192F];
|
||||
|
||||
extern u32 tx_scaling_table_jaguar[TXSCALE_TABLE_SIZE];
|
||||
extern u32 tx_scaling_table_jaguar[TXSCALE_TABLE_SIZE];
|
||||
|
||||
/* <20121018, Kordan> In case fail to read TxPowerTrack.txt, we use the table of 88E as the default table. */
|
||||
/*@<20121018, Kordan> In case fail to read TxPowerTrack.txt */
|
||||
/* we use the table of 88E as the default table. */
|
||||
#if (DM_ODM_SUPPORT_TYPE == ODM_CE) && defined(DM_ODM_CE_MAC80211)
|
||||
#else
|
||||
static u8 delta_swing_table_idx_2ga_p_8188e[] = {0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 7, 7, 8, 8, 8, 9, 9, 9, 9, 9};
|
||||
static u8 delta_swing_table_idx_2ga_n_8188e[] = {0, 0, 0, 2, 2, 3, 3, 4, 4, 4, 4, 5, 5, 6, 6, 7, 7, 7, 7, 8, 8, 9, 9, 10, 10, 10, 11, 11, 11, 11};
|
||||
extern u8 delta_swing_table_idx_2ga_p_8188e[];
|
||||
extern u8 delta_swing_table_idx_2ga_n_8188e[];
|
||||
#endif
|
||||
|
||||
#define dm_check_txpowertracking odm_txpowertracking_check
|
||||
#define dm_check_txpowertracking odm_txpowertracking_check
|
||||
|
||||
struct iqk_matrix_regs_setting {
|
||||
boolean is_iqk_done;
|
||||
s32 value[3][iqk_matrix_reg_num];
|
||||
boolean is_bw_iqk_result_saved[3];
|
||||
boolean is_iqk_done;
|
||||
s32 value[3][iqk_matrix_reg_num];
|
||||
boolean is_bw_iqk_result_saved[3];
|
||||
};
|
||||
|
||||
struct dm_rf_calibration_struct {
|
||||
/* for tx power tracking */
|
||||
|
||||
u32 rega24; /* for TempCCK */
|
||||
s32 rege94;
|
||||
s32 rege9c;
|
||||
s32 regeb4;
|
||||
s32 regebc;
|
||||
u32 rega24; /* for TempCCK */
|
||||
s32 rege94;
|
||||
s32 rege9c;
|
||||
s32 regeb4;
|
||||
s32 regebc;
|
||||
|
||||
u8 tx_powercount;
|
||||
u8 tx_powercount;
|
||||
boolean is_txpowertracking_init;
|
||||
boolean is_txpowertracking;
|
||||
u8 txpowertrack_control; /* for mp mode, turn off txpwrtracking as default */
|
||||
u8 tm_trigger;
|
||||
u8 internal_pa_5g[2]; /* pathA / pathB */
|
||||
/* for mp mode, turn off txpwrtracking as default */
|
||||
u8 txpowertrack_control;
|
||||
u8 tm_trigger;
|
||||
u8 internal_pa_5g[2]; /* pathA / pathB */
|
||||
|
||||
u8 thermal_meter[2]; /* thermal_meter, index 0 for RFIC0, and 1 for RFIC1 */
|
||||
u8 thermal_value;
|
||||
u8 thermal_value_lck;
|
||||
u8 thermal_value_iqk;
|
||||
s8 thermal_value_delta; /* delta of thermal_value and efuse thermal */
|
||||
u8 thermal_value_dpk;
|
||||
u8 thermal_value_avg[AVG_THERMAL_NUM];
|
||||
u8 thermal_value_avg_index;
|
||||
u8 thermal_value_rx_gain;
|
||||
u8 thermal_value_crystal;
|
||||
u8 thermal_value_dpk_store;
|
||||
u8 thermal_value_dpk_track;
|
||||
boolean txpowertracking_in_progress;
|
||||
/* thermal_meter, index 0 for RFIC0, and 1 for RFIC1 */
|
||||
u8 thermal_meter[2];
|
||||
u8 thermal_value;
|
||||
u8 thermal_value_lck;
|
||||
u8 thermal_value_iqk;
|
||||
s8 thermal_value_delta; /* delta of thermal_value and efuse thermal */
|
||||
u8 thermal_value_dpk;
|
||||
u8 thermal_value_avg[AVG_THERMAL_NUM];
|
||||
u8 thermal_value_avg_index;
|
||||
u8 thermal_value_rx_gain;
|
||||
u8 thermal_value_crystal;
|
||||
u8 thermal_value_dpk_store;
|
||||
u8 thermal_value_dpk_track;
|
||||
boolean txpowertracking_in_progress;
|
||||
|
||||
boolean is_reloadtxpowerindex;
|
||||
u8 is_rf_pi_enable;
|
||||
u32 txpowertracking_callback_cnt; /* cosa add for debug */
|
||||
boolean is_reloadtxpowerindex;
|
||||
u8 is_rf_pi_enable;
|
||||
u32 txpowertracking_callback_cnt; /* cosa add for debug */
|
||||
|
||||
|
||||
/* ------------------------- Tx power Tracking ------------------------- */
|
||||
u8 is_cck_in_ch14;
|
||||
u8 CCK_index;
|
||||
u8 OFDM_index[MAX_RF_PATH];
|
||||
s8 power_index_offset[MAX_RF_PATH];
|
||||
s8 delta_power_index[MAX_RF_PATH];
|
||||
s8 delta_power_index_last[MAX_RF_PATH];
|
||||
/*@---------------------- Tx power Tracking ---------------------- */
|
||||
u8 is_cck_in_ch14;
|
||||
u8 CCK_index;
|
||||
u8 OFDM_index[MAX_RF_PATH];
|
||||
s8 power_index_offset[MAX_RF_PATH];
|
||||
s8 delta_power_index[MAX_RF_PATH];
|
||||
s8 delta_power_index_last[MAX_RF_PATH];
|
||||
boolean is_tx_power_changed;
|
||||
s8 xtal_offset;
|
||||
s8 xtal_offset_last;
|
||||
s8 xtal_offset;
|
||||
s8 xtal_offset_last;
|
||||
u8 xtal_offset_eanble;
|
||||
|
||||
struct iqk_matrix_regs_setting iqk_matrix_reg_setting[IQK_MATRIX_SETTINGS_NUM];
|
||||
u8 delta_lck;
|
||||
s8 bb_swing_diff_2g, bb_swing_diff_5g; /* Unit: dB */
|
||||
u8 delta_swing_table_idx_2g_cck_a_p[DELTA_SWINGIDX_SIZE];
|
||||
u8 delta_swing_table_idx_2g_cck_a_n[DELTA_SWINGIDX_SIZE];
|
||||
u8 delta_swing_table_idx_2g_cck_b_p[DELTA_SWINGIDX_SIZE];
|
||||
u8 delta_swing_table_idx_2g_cck_b_n[DELTA_SWINGIDX_SIZE];
|
||||
u8 delta_swing_table_idx_2g_cck_c_p[DELTA_SWINGIDX_SIZE];
|
||||
u8 delta_swing_table_idx_2g_cck_c_n[DELTA_SWINGIDX_SIZE];
|
||||
u8 delta_swing_table_idx_2g_cck_d_p[DELTA_SWINGIDX_SIZE];
|
||||
u8 delta_swing_table_idx_2g_cck_d_n[DELTA_SWINGIDX_SIZE];
|
||||
u8 delta_swing_table_idx_2ga_p[DELTA_SWINGIDX_SIZE];
|
||||
u8 delta_swing_table_idx_2ga_n[DELTA_SWINGIDX_SIZE];
|
||||
u8 delta_swing_table_idx_2gb_p[DELTA_SWINGIDX_SIZE];
|
||||
u8 delta_swing_table_idx_2gb_n[DELTA_SWINGIDX_SIZE];
|
||||
u8 delta_swing_table_idx_2gc_p[DELTA_SWINGIDX_SIZE];
|
||||
u8 delta_swing_table_idx_2gc_n[DELTA_SWINGIDX_SIZE];
|
||||
u8 delta_swing_table_idx_2gd_p[DELTA_SWINGIDX_SIZE];
|
||||
u8 delta_swing_table_idx_2gd_n[DELTA_SWINGIDX_SIZE];
|
||||
u8 delta_swing_table_idx_5ga_p[BAND_NUM][DELTA_SWINGIDX_SIZE];
|
||||
u8 delta_swing_table_idx_5ga_n[BAND_NUM][DELTA_SWINGIDX_SIZE];
|
||||
u8 delta_swing_table_idx_5gb_p[BAND_NUM][DELTA_SWINGIDX_SIZE];
|
||||
u8 delta_swing_table_idx_5gb_n[BAND_NUM][DELTA_SWINGIDX_SIZE];
|
||||
u8 delta_swing_table_idx_5gc_p[BAND_NUM][DELTA_SWINGIDX_SIZE];
|
||||
u8 delta_swing_table_idx_5gc_n[BAND_NUM][DELTA_SWINGIDX_SIZE];
|
||||
u8 delta_swing_table_idx_5gd_p[BAND_NUM][DELTA_SWINGIDX_SIZE];
|
||||
u8 delta_swing_table_idx_5gd_n[BAND_NUM][DELTA_SWINGIDX_SIZE];
|
||||
u8 delta_swing_tssi_table_2g_cck_a[DELTA_SWINTSSI_SIZE];
|
||||
u8 delta_swing_tssi_table_2g_cck_b[DELTA_SWINTSSI_SIZE];
|
||||
u8 delta_swing_tssi_table_2g_cck_c[DELTA_SWINTSSI_SIZE];
|
||||
u8 delta_swing_tssi_table_2g_cck_d[DELTA_SWINTSSI_SIZE];
|
||||
u8 delta_swing_tssi_table_2ga[DELTA_SWINTSSI_SIZE];
|
||||
u8 delta_swing_tssi_table_2gb[DELTA_SWINTSSI_SIZE];
|
||||
u8 delta_swing_tssi_table_2gc[DELTA_SWINTSSI_SIZE];
|
||||
u8 delta_swing_tssi_table_2gd[DELTA_SWINTSSI_SIZE];
|
||||
u8 delta_swing_tssi_table_5ga[BAND_NUM][DELTA_SWINTSSI_SIZE];
|
||||
u8 delta_swing_tssi_table_5gb[BAND_NUM][DELTA_SWINTSSI_SIZE];
|
||||
u8 delta_swing_tssi_table_5gc[BAND_NUM][DELTA_SWINTSSI_SIZE];
|
||||
u8 delta_swing_tssi_table_5gd[BAND_NUM][DELTA_SWINTSSI_SIZE];
|
||||
s8 delta_swing_table_xtal_p[DELTA_SWINGIDX_SIZE];
|
||||
s8 delta_swing_table_xtal_n[DELTA_SWINGIDX_SIZE];
|
||||
u8 delta_swing_table_idx_2ga_p_8188e[DELTA_SWINGIDX_SIZE];
|
||||
u8 delta_swing_table_idx_2ga_n_8188e[DELTA_SWINGIDX_SIZE];
|
||||
struct iqk_matrix_regs_setting
|
||||
iqk_matrix_reg_setting[IQK_MATRIX_SETTINGS_NUM];
|
||||
u8 delta_lck;
|
||||
s8 bb_swing_diff_2g, bb_swing_diff_5g; /* Unit: dB */
|
||||
u8 delta_swing_table_idx_2g_cck_a_p[DELTA_SWINGIDX_SIZE];
|
||||
u8 delta_swing_table_idx_2g_cck_a_n[DELTA_SWINGIDX_SIZE];
|
||||
u8 delta_swing_table_idx_2g_cck_b_p[DELTA_SWINGIDX_SIZE];
|
||||
u8 delta_swing_table_idx_2g_cck_b_n[DELTA_SWINGIDX_SIZE];
|
||||
u8 delta_swing_table_idx_2g_cck_c_p[DELTA_SWINGIDX_SIZE];
|
||||
u8 delta_swing_table_idx_2g_cck_c_n[DELTA_SWINGIDX_SIZE];
|
||||
u8 delta_swing_table_idx_2g_cck_d_p[DELTA_SWINGIDX_SIZE];
|
||||
u8 delta_swing_table_idx_2g_cck_d_n[DELTA_SWINGIDX_SIZE];
|
||||
u8 delta_swing_table_idx_2ga_p[DELTA_SWINGIDX_SIZE];
|
||||
u8 delta_swing_table_idx_2ga_n[DELTA_SWINGIDX_SIZE];
|
||||
u8 delta_swing_table_idx_2gb_p[DELTA_SWINGIDX_SIZE];
|
||||
u8 delta_swing_table_idx_2gb_n[DELTA_SWINGIDX_SIZE];
|
||||
u8 delta_swing_table_idx_2gc_p[DELTA_SWINGIDX_SIZE];
|
||||
u8 delta_swing_table_idx_2gc_n[DELTA_SWINGIDX_SIZE];
|
||||
u8 delta_swing_table_idx_2gd_p[DELTA_SWINGIDX_SIZE];
|
||||
u8 delta_swing_table_idx_2gd_n[DELTA_SWINGIDX_SIZE];
|
||||
u8 delta_swing_table_idx_5ga_p[BAND_NUM][DELTA_SWINGIDX_SIZE];
|
||||
u8 delta_swing_table_idx_5ga_n[BAND_NUM][DELTA_SWINGIDX_SIZE];
|
||||
u8 delta_swing_table_idx_5gb_p[BAND_NUM][DELTA_SWINGIDX_SIZE];
|
||||
u8 delta_swing_table_idx_5gb_n[BAND_NUM][DELTA_SWINGIDX_SIZE];
|
||||
u8 delta_swing_table_idx_5gc_p[BAND_NUM][DELTA_SWINGIDX_SIZE];
|
||||
u8 delta_swing_table_idx_5gc_n[BAND_NUM][DELTA_SWINGIDX_SIZE];
|
||||
u8 delta_swing_table_idx_5gd_p[BAND_NUM][DELTA_SWINGIDX_SIZE];
|
||||
u8 delta_swing_table_idx_5gd_n[BAND_NUM][DELTA_SWINGIDX_SIZE];
|
||||
u8 delta_swing_tssi_table_2g_cck_a[DELTA_SWINTSSI_SIZE];
|
||||
u8 delta_swing_tssi_table_2g_cck_b[DELTA_SWINTSSI_SIZE];
|
||||
u8 delta_swing_tssi_table_2g_cck_c[DELTA_SWINTSSI_SIZE];
|
||||
u8 delta_swing_tssi_table_2g_cck_d[DELTA_SWINTSSI_SIZE];
|
||||
u8 delta_swing_tssi_table_2ga[DELTA_SWINTSSI_SIZE];
|
||||
u8 delta_swing_tssi_table_2gb[DELTA_SWINTSSI_SIZE];
|
||||
u8 delta_swing_tssi_table_2gc[DELTA_SWINTSSI_SIZE];
|
||||
u8 delta_swing_tssi_table_2gd[DELTA_SWINTSSI_SIZE];
|
||||
u8 delta_swing_tssi_table_5ga[BAND_NUM][DELTA_SWINTSSI_SIZE];
|
||||
u8 delta_swing_tssi_table_5gb[BAND_NUM][DELTA_SWINTSSI_SIZE];
|
||||
u8 delta_swing_tssi_table_5gc[BAND_NUM][DELTA_SWINTSSI_SIZE];
|
||||
u8 delta_swing_tssi_table_5gd[BAND_NUM][DELTA_SWINTSSI_SIZE];
|
||||
s8 delta_swing_table_xtal_p[DELTA_SWINGIDX_SIZE];
|
||||
s8 delta_swing_table_xtal_n[DELTA_SWINGIDX_SIZE];
|
||||
u8 delta_swing_table_idx_2ga_p_8188e[DELTA_SWINGIDX_SIZE];
|
||||
u8 delta_swing_table_idx_2ga_n_8188e[DELTA_SWINGIDX_SIZE];
|
||||
|
||||
u8 bb_swing_idx_ofdm[MAX_RF_PATH];
|
||||
u8 bb_swing_idx_ofdm_current;
|
||||
u8 bb_swing_idx_ofdm[MAX_RF_PATH];
|
||||
u8 bb_swing_idx_ofdm_current;
|
||||
#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN | ODM_CE))
|
||||
u8 bb_swing_idx_ofdm_base[MAX_RF_PATH];
|
||||
u8 bb_swing_idx_ofdm_base[MAX_RF_PATH];
|
||||
#else
|
||||
u8 bb_swing_idx_ofdm_base;
|
||||
u8 bb_swing_idx_ofdm_base;
|
||||
#endif
|
||||
boolean default_bb_swing_index_flag;
|
||||
boolean bb_swing_flag_ofdm;
|
||||
u8 bb_swing_idx_cck;
|
||||
u8 bb_swing_idx_cck_current;
|
||||
u8 bb_swing_idx_cck_base;
|
||||
u8 default_ofdm_index;
|
||||
u8 default_cck_index;
|
||||
boolean bb_swing_flag_cck;
|
||||
boolean default_bb_swing_index_flag;
|
||||
boolean bb_swing_flag_ofdm;
|
||||
u8 bb_swing_idx_cck;
|
||||
u8 bb_swing_idx_cck_current;
|
||||
u8 bb_swing_idx_cck_base;
|
||||
u8 default_ofdm_index;
|
||||
u8 default_cck_index;
|
||||
boolean bb_swing_flag_cck;
|
||||
|
||||
s8 absolute_ofdm_swing_idx[MAX_RF_PATH];
|
||||
s8 remnant_ofdm_swing_idx[MAX_RF_PATH];
|
||||
s8 absolute_cck_swing_idx[MAX_RF_PATH];
|
||||
s8 remnant_cck_swing_idx;
|
||||
s8 modify_tx_agc_value; /*Remnat compensate value at tx_agc */
|
||||
boolean modify_tx_agc_flag_path_a;
|
||||
boolean modify_tx_agc_flag_path_b;
|
||||
boolean modify_tx_agc_flag_path_c;
|
||||
boolean modify_tx_agc_flag_path_d;
|
||||
boolean modify_tx_agc_flag_path_a_cck;
|
||||
s8 absolute_ofdm_swing_idx[MAX_RF_PATH];
|
||||
s8 remnant_ofdm_swing_idx[MAX_RF_PATH];
|
||||
s8 absolute_cck_swing_idx[MAX_RF_PATH];
|
||||
s8 remnant_cck_swing_idx;
|
||||
s8 modify_tx_agc_value; /*Remnat compensate value at tx_agc */
|
||||
boolean modify_tx_agc_flag_path_a;
|
||||
boolean modify_tx_agc_flag_path_b;
|
||||
boolean modify_tx_agc_flag_path_c;
|
||||
boolean modify_tx_agc_flag_path_d;
|
||||
boolean modify_tx_agc_flag_path_a_cck;
|
||||
boolean modify_tx_agc_flag_path_b_cck;
|
||||
|
||||
s8 kfree_offset[MAX_RF_PATH];
|
||||
s8 kfree_offset[MAX_RF_PATH];
|
||||
|
||||
/* -------------------------------------------------------------------- */
|
||||
/*@----------------------------------------------------------------- */
|
||||
|
||||
/* for IQK */
|
||||
u32 regc04;
|
||||
u32 reg874;
|
||||
u32 regc08;
|
||||
u32 regb68;
|
||||
u32 regb6c;
|
||||
u32 reg870;
|
||||
u32 reg860;
|
||||
u32 reg864;
|
||||
u32 regc04;
|
||||
u32 reg874;
|
||||
u32 regc08;
|
||||
u32 regb68;
|
||||
u32 regb6c;
|
||||
u32 reg870;
|
||||
u32 reg860;
|
||||
u32 reg864;
|
||||
|
||||
boolean is_iqk_initialized;
|
||||
boolean is_iqk_initialized;
|
||||
boolean is_lck_in_progress;
|
||||
boolean is_antenna_detected;
|
||||
boolean is_need_iqk;
|
||||
boolean is_iqk_in_progress;
|
||||
boolean is_antenna_detected;
|
||||
boolean is_need_iqk;
|
||||
boolean is_iqk_in_progress;
|
||||
boolean is_iqk_pa_off;
|
||||
u8 delta_iqk;
|
||||
u32 ADDA_backup[IQK_ADDA_REG_NUM];
|
||||
u32 IQK_MAC_backup[IQK_MAC_REG_NUM];
|
||||
u32 IQK_BB_backup_recover[9];
|
||||
u32 IQK_BB_backup[IQK_BB_REG_NUM];
|
||||
u32 tx_iqc_8723b[2][3][2]; /* { {S1: 0xc94, 0xc80, 0xc4c} , {S0: 0xc9c, 0xc88, 0xc4c}} */
|
||||
u32 rx_iqc_8723b[2][2][2]; /* { {S1: 0xc14, 0xca0} , {S0: 0xc14, 0xca0}} */
|
||||
u32 tx_iqc_8703b[3][2]; /* { {S1: 0xc94, 0xc80, 0xc4c} , {S0: 0xc9c, 0xc88, 0xc4c}}*/
|
||||
u32 rx_iqc_8703b[2][2]; /* { {S1: 0xc14, 0xca0} , {S0: 0xc14, 0xca0}}*/
|
||||
u32 tx_iqc_8723d[2][3][2]; /* { {S1: 0xc94, 0xc80, 0xc4c} , {S0: 0xc9c, 0xc88, 0xc4c}}*/
|
||||
u32 rx_iqc_8723d[2][2][2]; /* { {S1: 0xc14, 0xca0} , {S0: 0xc14, 0xca0}}*/
|
||||
u8 delta_iqk;
|
||||
u32 ADDA_backup[IQK_ADDA_REG_NUM];
|
||||
u32 IQK_MAC_backup[IQK_MAC_REG_NUM];
|
||||
u32 IQK_BB_backup_recover[9];
|
||||
u32 IQK_BB_backup[IQK_BB_REG_NUM];
|
||||
/* { {S1: 0xc94, 0xc80, 0xc4c} , {S0: 0xc9c, 0xc88, 0xc4c}} */
|
||||
u32 tx_iqc_8723b[2][3][2];
|
||||
/* { {S1: 0xc14, 0xca0} , {S0: 0xc14, 0xca0}} */
|
||||
u32 rx_iqc_8723b[2][2][2];
|
||||
/* { {S1: 0xc94, 0xc80, 0xc4c} , {S0: 0xc9c, 0xc88, 0xc4c}} */
|
||||
u32 tx_iqc_8703b[3][2];
|
||||
/* { {S1: 0xc14, 0xca0} , {S0: 0xc14, 0xca0}} */
|
||||
u32 rx_iqc_8703b[2][2];
|
||||
/* { {S1: 0xc94, 0xc80, 0xc4c} , {S0: 0xc9c, 0xc88, 0xc4c}} */
|
||||
u32 tx_iqc_8723d[2][3][2];
|
||||
/* { {S1: 0xc14, 0xca0} , {S0: 0xc14, 0xca0}} */
|
||||
u32 rx_iqc_8723d[2][2][2];
|
||||
/* JJ ADD 20161014 */
|
||||
u32 tx_iqc_8710b[2][3][2]; /* { {S1: 0xc94, 0xc80, 0xc4c} , {S0: 0xc9c, 0xc88, 0xc4c}}*/
|
||||
u32 rx_iqc_8710b[2][2][2]; /* { {S1: 0xc14, 0xca0} , {S0: 0xc14, 0xca0}}*/
|
||||
/* { {S1: 0xc94, 0xc80, 0xc4c} , {S0: 0xc9c, 0xc88, 0xc4c}} */
|
||||
u32 tx_iqc_8710b[2][3][2];
|
||||
/* { {S1: 0xc14, 0xca0} , {S0: 0xc14, 0xca0}} */
|
||||
u32 rx_iqc_8710b[2][2][2];
|
||||
|
||||
u8 iqk_step;
|
||||
u8 kcount;
|
||||
u8 retry_count[4][2]; /* [4]: path ABCD, [2] TXK, RXK */
|
||||
boolean is_mp_mode;
|
||||
u8 iqk_step;
|
||||
u8 kcount;
|
||||
u8 retry_count[4][2]; /* [4]: path ABCD, [2] TXK, RXK */
|
||||
boolean is_mp_mode;
|
||||
|
||||
|
||||
|
||||
/* <James> IQK time measurement */
|
||||
u64 iqk_start_time;
|
||||
u64 iqk_progressing_time;
|
||||
u64 iqk_total_progressing_time;
|
||||
/*@<James> IQK time measurement */
|
||||
u64 iqk_start_time;
|
||||
u64 iqk_progressing_time;
|
||||
u64 iqk_total_progressing_time;
|
||||
u64 lck_progressing_time;
|
||||
|
||||
u32 lok_result;
|
||||
u32 lok_result;
|
||||
|
||||
/* for APK */
|
||||
u32 ap_koutput[2][2]; /* path A/B; output1_1a/output1_2a */
|
||||
u8 is_ap_kdone;
|
||||
u8 is_apk_thermal_meter_ignore;
|
||||
u32 ap_koutput[2][2]; /* path A/B; output1_1a/output1_2a */
|
||||
u8 is_ap_kdone;
|
||||
u8 is_apk_thermal_meter_ignore;
|
||||
|
||||
/* DPK */
|
||||
boolean is_dpk_fail;
|
||||
u8 is_dp_done;
|
||||
u8 is_dp_path_aok;
|
||||
u8 is_dp_path_bok;
|
||||
u8 is_dp_done;
|
||||
u8 is_dp_path_aok;
|
||||
u8 is_dp_path_bok;
|
||||
|
||||
u32 tx_lok[2];
|
||||
u32 dpk_tx_agc;
|
||||
s32 dpk_gain;
|
||||
u32 dpk_thermal[4];
|
||||
u32 tx_lok[2];
|
||||
u32 dpk_tx_agc;
|
||||
s32 dpk_gain;
|
||||
u32 dpk_thermal[4];
|
||||
s8 modify_tx_agc_value_ofdm;
|
||||
s8 modify_tx_agc_value_cck;
|
||||
|
||||
/*Add by Yuchen for Kfree Phydm*/
|
||||
u8 reg_rf_kfree_enable; /*for registry*/
|
||||
u8 rf_kfree_enable; /*for efuse enable check*/
|
||||
|
||||
/*@Add by Yuchen for Kfree Phydm*/
|
||||
u8 reg_rf_kfree_enable; /*for registry*/
|
||||
u8 rf_kfree_enable; /*for efuse enable check*/
|
||||
};
|
||||
|
||||
void odm_txpowertracking_check(void *dm_void);
|
||||
|
||||
void
|
||||
odm_txpowertracking_check(
|
||||
void *dm_void
|
||||
);
|
||||
void odm_txpowertracking_init(void *dm_void);
|
||||
|
||||
void odm_txpowertracking_check_ap(void *dm_void);
|
||||
|
||||
void
|
||||
odm_txpowertracking_init(
|
||||
void *dm_void
|
||||
);
|
||||
void odm_txpowertracking_thermal_meter_init(void *dm_void);
|
||||
|
||||
void
|
||||
odm_txpowertracking_check_ap(
|
||||
void *dm_void
|
||||
);
|
||||
void odm_txpowertracking_init(void *dm_void);
|
||||
|
||||
void
|
||||
odm_txpowertracking_thermal_meter_init(
|
||||
void *dm_void
|
||||
);
|
||||
void odm_txpowertracking_check_mp(void *dm_void);
|
||||
|
||||
void
|
||||
odm_txpowertracking_init(
|
||||
void *dm_void
|
||||
);
|
||||
void odm_txpowertracking_check_ce(void *dm_void);
|
||||
|
||||
void
|
||||
odm_txpowertracking_check_mp(
|
||||
void *dm_void
|
||||
);
|
||||
|
||||
|
||||
void
|
||||
odm_txpowertracking_check_ce(
|
||||
void *dm_void
|
||||
);
|
||||
void odm_txpowertracking_direct_ce(void *dm_void);
|
||||
|
||||
#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN))
|
||||
|
||||
void
|
||||
odm_txpowertracking_callback_thermal_meter92c(
|
||||
void *adapter
|
||||
);
|
||||
void odm_txpowertracking_callback_thermal_meter92c(
|
||||
void *adapter);
|
||||
|
||||
void
|
||||
odm_txpowertracking_callback_rx_gain_thermal_meter92d(
|
||||
void *adapter
|
||||
);
|
||||
void odm_txpowertracking_callback_rx_gain_thermal_meter92d(
|
||||
void *adapter);
|
||||
|
||||
void
|
||||
odm_txpowertracking_callback_thermal_meter92d(
|
||||
void *adapter
|
||||
);
|
||||
void odm_txpowertracking_callback_thermal_meter92d(
|
||||
void *adapter);
|
||||
|
||||
void
|
||||
odm_txpowertracking_direct_call92c(
|
||||
void *adapter
|
||||
);
|
||||
void odm_txpowertracking_direct_call92c(
|
||||
void *adapter);
|
||||
|
||||
void
|
||||
odm_txpowertracking_thermal_meter_check(
|
||||
void *adapter
|
||||
);
|
||||
void odm_txpowertracking_thermal_meter_check(
|
||||
void *adapter);
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
#endif /*__HALRF_POWER_TRACKING_H__*/
|
||||
|
||||
741
hal/phydm/halrf/halrf_powertracking_iot.c
Normal file
741
hal/phydm/halrf/halrf_powertracking_iot.c
Normal file
@@ -0,0 +1,741 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Copyright(c) 2007 - 2017 Realtek Corporation.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of version 2 of the GNU General Public License as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
* more details.
|
||||
*
|
||||
* The full GNU General Public License is included in this distribution in the
|
||||
* file called LICENSE.
|
||||
*
|
||||
* Contact Information:
|
||||
* wlanfae <wlanfae@realtek.com>
|
||||
* Realtek Corporation, No. 2, Innovation Road II, Hsinchu Science Park,
|
||||
* Hsinchu 300, Taiwan.
|
||||
*
|
||||
* Larry Finger <Larry.Finger@lwfinger.net>
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
/*============================================================ */
|
||||
/* include files */
|
||||
/*============================================================ */
|
||||
#include "mp_precomp.h"
|
||||
#include "phydm_precomp.h"
|
||||
|
||||
/* ************************************************************
|
||||
* Global var
|
||||
* ************************************************************
|
||||
*/
|
||||
|
||||
u32 ofdm_swing_table[OFDM_TABLE_SIZE] = {
|
||||
0x7f8001fe, /* 0, +6.0dB */
|
||||
0x788001e2, /* 1, +5.5dB */
|
||||
0x71c001c7, /* 2, +5.0dB*/
|
||||
0x6b8001ae, /* 3, +4.5dB*/
|
||||
0x65400195, /* 4, +4.0dB*/
|
||||
0x5fc0017f, /* 5, +3.5dB*/
|
||||
0x5a400169, /* 6, +3.0dB*/
|
||||
0x55400155, /* 7, +2.5dB*/
|
||||
0x50800142, /* 8, +2.0dB*/
|
||||
0x4c000130, /* 9, +1.5dB*/
|
||||
0x47c0011f, /* 10, +1.0dB*/
|
||||
0x43c0010f, /* 11, +0.5dB*/
|
||||
0x40000100, /* 12, +0dB*/
|
||||
0x3c8000f2, /* 13, -0.5dB*/
|
||||
0x390000e4, /* 14, -1.0dB*/
|
||||
0x35c000d7, /* 15, -1.5dB*/
|
||||
0x32c000cb, /* 16, -2.0dB*/
|
||||
0x300000c0, /* 17, -2.5dB*/
|
||||
0x2d4000b5, /* 18, -3.0dB*/
|
||||
0x2ac000ab, /* 19, -3.5dB*/
|
||||
0x288000a2, /* 20, -4.0dB*/
|
||||
0x26000098, /* 21, -4.5dB*/
|
||||
0x24000090, /* 22, -5.0dB*/
|
||||
0x22000088, /* 23, -5.5dB*/
|
||||
0x20000080, /* 24, -6.0dB*/
|
||||
0x1e400079, /* 25, -6.5dB*/
|
||||
0x1c800072, /* 26, -7.0dB*/
|
||||
0x1b00006c, /* 27. -7.5dB*/
|
||||
0x19800066, /* 28, -8.0dB*/
|
||||
0x18000060, /* 29, -8.5dB*/
|
||||
0x16c0005b, /* 30, -9.0dB*/
|
||||
0x15800056, /* 31, -9.5dB*/
|
||||
0x14400051, /* 32, -10.0dB*/
|
||||
0x1300004c, /* 33, -10.5dB*/
|
||||
0x12000048, /* 34, -11.0dB*/
|
||||
0x11000044, /* 35, -11.5dB*/
|
||||
0x10000040, /* 36, -12.0dB*/
|
||||
};
|
||||
|
||||
u8 cck_swing_table_ch1_ch13[CCK_TABLE_SIZE][8] = {
|
||||
{0x36, 0x35, 0x2e, 0x25, 0x1c, 0x12, 0x09, 0x04}, /* 0, +0dB */
|
||||
{0x33, 0x32, 0x2b, 0x23, 0x1a, 0x11, 0x08, 0x04}, /* 1, -0.5dB */
|
||||
{0x30, 0x2f, 0x29, 0x21, 0x19, 0x10, 0x08, 0x03}, /* 2, -1.0dB*/
|
||||
{0x2d, 0x2d, 0x27, 0x1f, 0x18, 0x0f, 0x08, 0x03}, /* 3, -1.5dB*/
|
||||
{0x2b, 0x2a, 0x25, 0x1e, 0x16, 0x0e, 0x07, 0x03}, /* 4, -2.0dB */
|
||||
{0x28, 0x28, 0x22, 0x1c, 0x15, 0x0d, 0x07, 0x03}, /* 5, -2.5dB*/
|
||||
{0x26, 0x25, 0x21, 0x1b, 0x14, 0x0d, 0x06, 0x03}, /* 6, -3.0dB*/
|
||||
{0x24, 0x23, 0x1f, 0x19, 0x13, 0x0c, 0x06, 0x03}, /* 7, -3.5dB*/
|
||||
{0x22, 0x21, 0x1d, 0x18, 0x11, 0x0b, 0x06, 0x02}, /* 8, -4.0dB */
|
||||
{0x20, 0x20, 0x1b, 0x16, 0x11, 0x08, 0x05, 0x02}, /* 9, -4.5dB*/
|
||||
{0x1f, 0x1e, 0x1a, 0x15, 0x10, 0x0a, 0x05, 0x02}, /* 10, -5.0dB */
|
||||
{0x1d, 0x1c, 0x18, 0x14, 0x0f, 0x0a, 0x05, 0x02}, /* 11, -5.5dB*/
|
||||
{0x1b, 0x1a, 0x17, 0x13, 0x0e, 0x09, 0x04, 0x02}, /* 12, -6.0dB <== default */
|
||||
{0x1a, 0x19, 0x16, 0x12, 0x0d, 0x09, 0x04, 0x02}, /* 13, -6.5dB*/
|
||||
{0x18, 0x17, 0x15, 0x11, 0x0c, 0x08, 0x04, 0x02}, /* 14, -7.0dB */
|
||||
{0x17, 0x16, 0x13, 0x10, 0x0c, 0x08, 0x04, 0x02}, /* 15, -7.5dB*/
|
||||
{0x16, 0x15, 0x12, 0x0f, 0x0b, 0x07, 0x04, 0x01}, /* 16, -8.0dB */
|
||||
{0x14, 0x14, 0x11, 0x0e, 0x0b, 0x07, 0x03, 0x02}, /* 17, -8.5dB*/
|
||||
{0x13, 0x13, 0x10, 0x0d, 0x0a, 0x06, 0x03, 0x01}, /* 18, -9.0dB */
|
||||
{0x12, 0x12, 0x0f, 0x0c, 0x09, 0x06, 0x03, 0x01}, /* 19, -9.5dB*/
|
||||
{0x11, 0x11, 0x0f, 0x0c, 0x09, 0x06, 0x03, 0x01}, /* 20, -10.0dB*/
|
||||
{0x10, 0x10, 0x0e, 0x0b, 0x08, 0x05, 0x03, 0x01}, /* 21, -10.5dB*/
|
||||
{0x0f, 0x0f, 0x0d, 0x0b, 0x08, 0x05, 0x03, 0x01}, /* 22, -11.0dB*/
|
||||
{0x0e, 0x0e, 0x0c, 0x0a, 0x08, 0x05, 0x02, 0x01}, /* 23, -11.5dB*/
|
||||
{0x0d, 0x0d, 0x0c, 0x0a, 0x07, 0x05, 0x02, 0x01}, /* 24, -12.0dB*/
|
||||
{0x0d, 0x0c, 0x0b, 0x09, 0x07, 0x04, 0x02, 0x01}, /* 25, -12.5dB*/
|
||||
{0x0c, 0x0c, 0x0a, 0x09, 0x06, 0x04, 0x02, 0x01}, /* 26, -13.0dB*/
|
||||
{0x0b, 0x0b, 0x0a, 0x08, 0x06, 0x04, 0x02, 0x01}, /* 27, -13.5dB*/
|
||||
{0x0b, 0x0a, 0x09, 0x08, 0x06, 0x04, 0x02, 0x01}, /* 28, -14.0dB*/
|
||||
{0x0a, 0x0a, 0x09, 0x07, 0x05, 0x03, 0x02, 0x01}, /* 29, -14.5dB*/
|
||||
{0x0a, 0x09, 0x08, 0x07, 0x05, 0x03, 0x02, 0x01}, /* 30, -15.0dB*/
|
||||
{0x09, 0x09, 0x08, 0x06, 0x05, 0x03, 0x01, 0x01}, /* 31, -15.5dB*/
|
||||
{0x09, 0x08, 0x07, 0x06, 0x04, 0x03, 0x01, 0x01} /* 32, -16.0dB*/
|
||||
};
|
||||
|
||||
u8 cck_swing_table_ch14[CCK_TABLE_SIZE][8] = {
|
||||
{0x36, 0x35, 0x2e, 0x1b, 0x00, 0x00, 0x00, 0x00}, /* 0, +0dB */
|
||||
{0x33, 0x32, 0x2b, 0x19, 0x00, 0x00, 0x00, 0x00}, /* 1, -0.5dB */
|
||||
{0x30, 0x2f, 0x29, 0x18, 0x00, 0x00, 0x00, 0x00}, /* 2, -1.0dB */
|
||||
{0x2d, 0x2d, 0x17, 0x17, 0x00, 0x00, 0x00, 0x00}, /* 3, -1.5dB*/
|
||||
{0x2b, 0x2a, 0x25, 0x15, 0x00, 0x00, 0x00, 0x00}, /* 4, -2.0dB */
|
||||
{0x28, 0x28, 0x24, 0x14, 0x00, 0x00, 0x00, 0x00}, /* 5, -2.5dB*/
|
||||
{0x26, 0x25, 0x21, 0x13, 0x00, 0x00, 0x00, 0x00}, /* 6, -3.0dB */
|
||||
{0x24, 0x23, 0x1f, 0x12, 0x00, 0x00, 0x00, 0x00}, /* 7, -3.5dB */
|
||||
{0x22, 0x21, 0x1d, 0x11, 0x00, 0x00, 0x00, 0x00}, /* 8, -4.0dB */
|
||||
{0x20, 0x20, 0x1b, 0x10, 0x00, 0x00, 0x00, 0x00}, /* 9, -4.5dB*/
|
||||
{0x1f, 0x1e, 0x1a, 0x0f, 0x00, 0x00, 0x00, 0x00}, /* 10, -5.0dB */
|
||||
{0x1d, 0x1c, 0x18, 0x0e, 0x00, 0x00, 0x00, 0x00}, /* 11, -5.5dB*/
|
||||
{0x1b, 0x1a, 0x17, 0x0e, 0x00, 0x00, 0x00, 0x00}, /* 12, -6.0dB <== default*/
|
||||
{0x1a, 0x19, 0x16, 0x0d, 0x00, 0x00, 0x00, 0x00}, /* 13, -6.5dB */
|
||||
{0x18, 0x17, 0x15, 0x0c, 0x00, 0x00, 0x00, 0x00}, /* 14, -7.0dB */
|
||||
{0x17, 0x16, 0x13, 0x0b, 0x00, 0x00, 0x00, 0x00}, /* 15, -7.5dB*/
|
||||
{0x16, 0x15, 0x12, 0x0b, 0x00, 0x00, 0x00, 0x00}, /* 16, -8.0dB */
|
||||
{0x14, 0x14, 0x11, 0x0a, 0x00, 0x00, 0x00, 0x00}, /* 17, -8.5dB*/
|
||||
{0x13, 0x13, 0x10, 0x0a, 0x00, 0x00, 0x00, 0x00}, /* 18, -9.0dB */
|
||||
{0x12, 0x12, 0x0f, 0x09, 0x00, 0x00, 0x00, 0x00}, /* 19, -9.5dB*/
|
||||
{0x11, 0x11, 0x0f, 0x09, 0x00, 0x00, 0x00, 0x00}, /* 20, -10.0dB*/
|
||||
{0x10, 0x10, 0x0e, 0x08, 0x00, 0x00, 0x00, 0x00}, /* 21, -10.5dB*/
|
||||
{0x0f, 0x0f, 0x0d, 0x08, 0x00, 0x00, 0x00, 0x00}, /* 22, -11.0dB*/
|
||||
{0x0e, 0x0e, 0x0c, 0x07, 0x00, 0x00, 0x00, 0x00}, /* 23, -11.5dB*/
|
||||
{0x0d, 0x0d, 0x0c, 0x07, 0x00, 0x00, 0x00, 0x00}, /* 24, -12.0dB*/
|
||||
{0x0d, 0x0c, 0x0b, 0x06, 0x00, 0x00, 0x00, 0x00}, /* 25, -12.5dB*/
|
||||
{0x0c, 0x0c, 0x0a, 0x06, 0x00, 0x00, 0x00, 0x00}, /* 26, -13.0dB*/
|
||||
{0x0b, 0x0b, 0x0a, 0x06, 0x00, 0x00, 0x00, 0x00}, /* 27, -13.5dB*/
|
||||
{0x0b, 0x0a, 0x09, 0x05, 0x00, 0x00, 0x00, 0x00}, /* 28, -14.0dB*/
|
||||
{0x0a, 0x0a, 0x09, 0x05, 0x00, 0x00, 0x00, 0x00}, /* 29, -14.5dB*/
|
||||
{0x0a, 0x09, 0x08, 0x05, 0x00, 0x00, 0x00, 0x00}, /* 30, -15.0dB*/
|
||||
{0x09, 0x09, 0x08, 0x05, 0x00, 0x00, 0x00, 0x00}, /* 31, -15.5dB*/
|
||||
{0x09, 0x08, 0x07, 0x04, 0x00, 0x00, 0x00, 0x00} /* 32, -16.0dB*/
|
||||
};
|
||||
|
||||
u32 ofdm_swing_table_new[OFDM_TABLE_SIZE] = {
|
||||
0x0b40002d, /* 0, -15.0dB */
|
||||
0x0c000030, /* 1, -14.5dB*/
|
||||
0x0cc00033, /* 2, -14.0dB*/
|
||||
0x0d800036, /* 3, -13.5dB*/
|
||||
0x0e400039, /* 4, -13.0dB */
|
||||
0x0f00003c, /* 5, -12.5dB*/
|
||||
0x10000040, /* 6, -12.0dB*/
|
||||
0x11000044, /* 7, -11.5dB*/
|
||||
0x12000048, /* 8, -11.0dB*/
|
||||
0x1300004c, /* 9, -10.5dB*/
|
||||
0x14400051, /* 10, -10.0dB*/
|
||||
0x15800056, /* 11, -9.5dB*/
|
||||
0x16c0005b, /* 12, -9.0dB*/
|
||||
0x18000060, /* 13, -8.5dB*/
|
||||
0x19800066, /* 14, -8.0dB*/
|
||||
0x1b00006c, /* 15, -7.5dB*/
|
||||
0x1c800072, /* 16, -7.0dB*/
|
||||
0x1e400079, /* 17, -6.5dB*/
|
||||
0x20000080, /* 18, -6.0dB*/
|
||||
0x22000088, /* 19, -5.5dB*/
|
||||
0x24000090, /* 20, -5.0dB*/
|
||||
0x26000098, /* 21, -4.5dB*/
|
||||
0x288000a2, /* 22, -4.0dB*/
|
||||
0x2ac000ab, /* 23, -3.5dB*/
|
||||
0x2d4000b5, /* 24, -3.0dB*/
|
||||
0x300000c0, /* 25, -2.5dB*/
|
||||
0x32c000cb, /* 26, -2.0dB*/
|
||||
0x35c000d7, /* 27, -1.5dB*/
|
||||
0x390000e4, /* 28, -1.0dB*/
|
||||
0x3c8000f2, /* 29, -0.5dB*/
|
||||
0x40000100, /* 30, +0dB*/
|
||||
0x43c0010f, /* 31, +0.5dB*/
|
||||
0x47c0011f, /* 32, +1.0dB*/
|
||||
0x4c000130, /* 33, +1.5dB*/
|
||||
0x50800142, /* 34, +2.0dB*/
|
||||
0x55400155, /* 35, +2.5dB*/
|
||||
0x5a400169, /* 36, +3.0dB*/
|
||||
0x5fc0017f, /* 37, +3.5dB*/
|
||||
0x65400195, /* 38, +4.0dB*/
|
||||
0x6b8001ae, /* 39, +4.5dB*/
|
||||
0x71c001c7, /* 40, +5.0dB*/
|
||||
0x788001e2, /* 41, +5.5dB*/
|
||||
0x7f8001fe /* 42, +6.0dB*/
|
||||
};
|
||||
|
||||
u8 cck_swing_table_ch1_ch14_88f[CCK_TABLE_SIZE_88F][16] = {
|
||||
{0x44, 0x42, 0x3C, 0x33, 0x28, 0x1C, 0x13, 0x0B, 0x05, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-16dB*/
|
||||
{0x48, 0x46, 0x3F, 0x36, 0x2A, 0x1E, 0x14, 0x0B, 0x05, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-15.5dB*/
|
||||
{0x4D, 0x4A, 0x43, 0x39, 0x2C, 0x20, 0x15, 0x0C, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-15dB*/
|
||||
{0x51, 0x4F, 0x47, 0x3C, 0x2F, 0x22, 0x16, 0x0D, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-14.5dB*/
|
||||
{0x56, 0x53, 0x4B, 0x40, 0x32, 0x24, 0x17, 0x0E, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-14dB*/
|
||||
{0x5B, 0x58, 0x50, 0x43, 0x35, 0x26, 0x19, 0x0E, 0x07, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-13.5dB*/
|
||||
{0x60, 0x5D, 0x54, 0x47, 0x38, 0x28, 0x1A, 0x0F, 0x07, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-13dB*/
|
||||
{0x66, 0x63, 0x59, 0x4C, 0x3B, 0x2B, 0x1C, 0x10, 0x08, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-12.5dB*/
|
||||
{0x6C, 0x69, 0x5F, 0x50, 0x3F, 0x2D, 0x1E, 0x11, 0x08, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-12dB*/
|
||||
{0x73, 0x6F, 0x64, 0x55, 0x42, 0x30, 0x1F, 0x12, 0x08, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-11.5dB*/
|
||||
{0x79, 0x76, 0x6A, 0x5A, 0x46, 0x33, 0x21, 0x13, 0x09, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-11dB*/
|
||||
{0x81, 0x7C, 0x71, 0x5F, 0x4A, 0x36, 0x23, 0x14, 0x0A, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-10.5dB*/
|
||||
{0x88, 0x84, 0x77, 0x65, 0x4F, 0x39, 0x25, 0x15, 0x0A, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-10dB*/
|
||||
{0x90, 0x8C, 0x7E, 0x6B, 0x54, 0x3C, 0x27, 0x17, 0x0B, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-9.5dB*/
|
||||
{0x99, 0x94, 0x86, 0x71, 0x58, 0x40, 0x2A, 0x18, 0x0B, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-9dB*/
|
||||
{0xA2, 0x9D, 0x8E, 0x78, 0x5E, 0x43, 0x2C, 0x19, 0x0C, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-8.5dB*/
|
||||
{0xAC, 0xA6, 0x96, 0x7F, 0x63, 0x47, 0x2F, 0x1B, 0x0D, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-8dB*/
|
||||
{0xB6, 0xB0, 0x9F, 0x87, 0x69, 0x4C, 0x32, 0x1D, 0x0D, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-7.5dB*/
|
||||
{0xC1, 0xBA, 0xA8, 0x8F, 0x6F, 0x50, 0x35, 0x1E, 0x0E, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-7dB*/
|
||||
{0xCC, 0xC5, 0xB2, 0x97, 0x76, 0x55, 0x38, 0x20, 0x0F, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-6.5dB*/
|
||||
{0xD8, 0xD1, 0xBD, 0xA0, 0x7D, 0x5A, 0x3B, 0x22, 0x10, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} /*-6dB*/
|
||||
};
|
||||
|
||||
u8 cck_swing_table_ch1_ch13_88f[CCK_TABLE_SIZE_88F][16] = {
|
||||
{0x44, 0x42, 0x3C, 0x33, 0x28, 0x1C, 0x13, 0x0B, 0x05, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-16dB*/
|
||||
{0x48, 0x46, 0x3F, 0x36, 0x2A, 0x1E, 0x14, 0x0B, 0x05, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-15.5dB*/
|
||||
{0x4D, 0x4A, 0x43, 0x39, 0x2C, 0x20, 0x15, 0x0C, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-15dB*/
|
||||
{0x51, 0x4F, 0x47, 0x3C, 0x2F, 0x22, 0x16, 0x0D, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-14.5dB*/
|
||||
{0x56, 0x53, 0x4B, 0x40, 0x32, 0x24, 0x17, 0x0E, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-14dB*/
|
||||
{0x5B, 0x58, 0x50, 0x43, 0x35, 0x26, 0x19, 0x0E, 0x07, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-13.5dB*/
|
||||
{0x60, 0x5D, 0x54, 0x47, 0x38, 0x28, 0x1A, 0x0F, 0x07, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-13dB*/
|
||||
{0x66, 0x63, 0x59, 0x4C, 0x3B, 0x2B, 0x1C, 0x10, 0x08, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-12.5dB*/
|
||||
{0x6C, 0x69, 0x5F, 0x50, 0x3F, 0x2D, 0x1E, 0x11, 0x08, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-12dB*/
|
||||
{0x73, 0x6F, 0x64, 0x55, 0x42, 0x30, 0x1F, 0x12, 0x08, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-11.5dB*/
|
||||
{0x79, 0x76, 0x6A, 0x5A, 0x46, 0x33, 0x21, 0x13, 0x09, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-11dB*/
|
||||
{0x81, 0x7C, 0x71, 0x5F, 0x4A, 0x36, 0x23, 0x14, 0x0A, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-10.5dB*/
|
||||
{0x88, 0x84, 0x77, 0x65, 0x4F, 0x39, 0x25, 0x15, 0x0A, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-10dB*/
|
||||
{0x90, 0x8C, 0x7E, 0x6B, 0x54, 0x3C, 0x27, 0x17, 0x0B, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-9.5dB*/
|
||||
{0x99, 0x94, 0x86, 0x71, 0x58, 0x40, 0x2A, 0x18, 0x0B, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-9dB*/
|
||||
{0xA2, 0x9D, 0x8E, 0x78, 0x5E, 0x43, 0x2C, 0x19, 0x0C, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-8.5dB*/
|
||||
{0xAC, 0xA6, 0x96, 0x7F, 0x63, 0x47, 0x2F, 0x1B, 0x0D, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-8dB*/
|
||||
{0xB6, 0xB0, 0x9F, 0x87, 0x69, 0x4C, 0x32, 0x1D, 0x0D, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-7.5dB*/
|
||||
{0xC1, 0xBA, 0xA8, 0x8F, 0x6F, 0x50, 0x35, 0x1E, 0x0E, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-7dB*/
|
||||
{0xCC, 0xC5, 0xB2, 0x97, 0x76, 0x55, 0x38, 0x20, 0x0F, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-6.5dB*/
|
||||
{0xD8, 0xD1, 0xBD, 0xA0, 0x7D, 0x5A, 0x3B, 0x22, 0x10, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} /*-6dB*/
|
||||
};
|
||||
|
||||
u8 cck_swing_table_ch14_88f[CCK_TABLE_SIZE_88F][16] = {
|
||||
{0x44, 0x42, 0x3C, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-16dB*/
|
||||
{0x48, 0x46, 0x3F, 0x2A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-15.5dB*/
|
||||
{0x4D, 0x4A, 0x43, 0x2C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-15dB*/
|
||||
{0x51, 0x4F, 0x47, 0x2F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-14.5dB*/
|
||||
{0x56, 0x53, 0x4B, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-14dB*/
|
||||
{0x5B, 0x58, 0x50, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-13.5dB*/
|
||||
{0x60, 0x5D, 0x54, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-13dB*/
|
||||
{0x66, 0x63, 0x59, 0x3B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-12.5dB*/
|
||||
{0x6C, 0x69, 0x5F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-12dB*/
|
||||
{0x73, 0x6F, 0x64, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-11.5dB*/
|
||||
{0x79, 0x76, 0x6A, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-11dB*/
|
||||
{0x81, 0x7C, 0x71, 0x4A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-10.5dB*/
|
||||
{0x88, 0x84, 0x77, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-10dB*/
|
||||
{0x90, 0x8C, 0x7E, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-9.5dB*/
|
||||
{0x99, 0x94, 0x86, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-9dB*/
|
||||
{0xA2, 0x9D, 0x8E, 0x5E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-8.5dB*/
|
||||
{0xAC, 0xA6, 0x96, 0x63, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-8dB*/
|
||||
{0xB6, 0xB0, 0x9F, 0x69, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-7.5dB*/
|
||||
{0xC1, 0xBA, 0xA8, 0x6F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-7dB*/
|
||||
{0xCC, 0xC5, 0xB2, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-6.5dB*/
|
||||
{0xD8, 0xD1, 0xBD, 0x7D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} /*-6dB*/
|
||||
};
|
||||
|
||||
u8 cck_swing_table_ch1_ch13_new[CCK_TABLE_SIZE][8] = {
|
||||
{0x09, 0x08, 0x07, 0x06, 0x04, 0x03, 0x01, 0x01}, /* 0, -16.0dB*/
|
||||
{0x09, 0x09, 0x08, 0x06, 0x05, 0x03, 0x01, 0x01}, /* 1, -15.5dB*/
|
||||
{0x0a, 0x09, 0x08, 0x07, 0x05, 0x03, 0x02, 0x01}, /* 2, -15.0dB*/
|
||||
{0x0a, 0x0a, 0x09, 0x07, 0x05, 0x03, 0x02, 0x01}, /* 3, -14.5dB*/
|
||||
{0x0b, 0x0a, 0x09, 0x08, 0x06, 0x04, 0x02, 0x01}, /* 4, -14.0dB*/
|
||||
{0x0b, 0x0b, 0x0a, 0x08, 0x06, 0x04, 0x02, 0x01}, /* 5, -13.5dB*/
|
||||
{0x0c, 0x0c, 0x0a, 0x09, 0x06, 0x04, 0x02, 0x01}, /* 6, -13.0dB*/
|
||||
{0x0d, 0x0c, 0x0b, 0x09, 0x07, 0x04, 0x02, 0x01}, /* 7, -12.5dB*/
|
||||
{0x0d, 0x0d, 0x0c, 0x0a, 0x07, 0x05, 0x02, 0x01}, /* 8, -12.0dB*/
|
||||
{0x0e, 0x0e, 0x0c, 0x0a, 0x08, 0x05, 0x02, 0x01}, /* 9, -11.5dB*/
|
||||
{0x0f, 0x0f, 0x0d, 0x0b, 0x08, 0x05, 0x03, 0x01}, /* 10, -11.0dB*/
|
||||
{0x10, 0x10, 0x0e, 0x0b, 0x08, 0x05, 0x03, 0x01}, /* 11, -10.5dB*/
|
||||
{0x11, 0x11, 0x0f, 0x0c, 0x09, 0x06, 0x03, 0x01}, /* 12, -10.0dB*/
|
||||
{0x12, 0x12, 0x0f, 0x0c, 0x09, 0x06, 0x03, 0x01}, /* 13, -9.5dB*/
|
||||
{0x13, 0x13, 0x10, 0x0d, 0x0a, 0x06, 0x03, 0x01}, /* 14, -9.0dB */
|
||||
{0x14, 0x14, 0x11, 0x0e, 0x0b, 0x07, 0x03, 0x02}, /* 15, -8.5dB*/
|
||||
{0x16, 0x15, 0x12, 0x0f, 0x0b, 0x07, 0x04, 0x01}, /* 16, -8.0dB */
|
||||
{0x17, 0x16, 0x13, 0x10, 0x0c, 0x08, 0x04, 0x02}, /* 17, -7.5dB*/
|
||||
{0x18, 0x17, 0x15, 0x11, 0x0c, 0x08, 0x04, 0x02}, /* 18, -7.0dB */
|
||||
{0x1a, 0x19, 0x16, 0x12, 0x0d, 0x09, 0x04, 0x02}, /* 19, -6.5dB*/
|
||||
{0x1b, 0x1a, 0x17, 0x13, 0x0e, 0x09, 0x04, 0x02}, /*20, -6.0dB */
|
||||
{0x1d, 0x1c, 0x18, 0x14, 0x0f, 0x0a, 0x05, 0x02}, /* 21, -5.5dB*/
|
||||
{0x1f, 0x1e, 0x1a, 0x15, 0x10, 0x0a, 0x05, 0x02}, /* 22, -5.0dB */
|
||||
{0x20, 0x20, 0x1b, 0x16, 0x11, 0x08, 0x05, 0x02}, /* 23, -4.5dB*/
|
||||
{0x22, 0x21, 0x1d, 0x18, 0x11, 0x0b, 0x06, 0x02}, /* 24, -4.0dB */
|
||||
{0x24, 0x23, 0x1f, 0x19, 0x13, 0x0c, 0x06, 0x03}, /* 25, -3.5dB*/
|
||||
{0x26, 0x25, 0x21, 0x1b, 0x14, 0x0d, 0x06, 0x03}, /* 26, -3.0dB*/
|
||||
{0x28, 0x28, 0x22, 0x1c, 0x15, 0x0d, 0x07, 0x03}, /* 27, -2.5dB*/
|
||||
{0x2b, 0x2a, 0x25, 0x1e, 0x16, 0x0e, 0x07, 0x03}, /* 28, -2.0dB */
|
||||
{0x2d, 0x2d, 0x27, 0x1f, 0x18, 0x0f, 0x08, 0x03}, /* 29, -1.5dB*/
|
||||
{0x30, 0x2f, 0x29, 0x21, 0x19, 0x10, 0x08, 0x03}, /* 30, -1.0dB*/
|
||||
{0x33, 0x32, 0x2b, 0x23, 0x1a, 0x11, 0x08, 0x04}, /* 31, -0.5dB*/
|
||||
{0x36, 0x35, 0x2e, 0x25, 0x1c, 0x12, 0x09, 0x04} /* 32, +0dB*/
|
||||
};
|
||||
|
||||
u8 cck_swing_table_ch14_new[CCK_TABLE_SIZE][8] = {
|
||||
{0x09, 0x08, 0x07, 0x04, 0x00, 0x00, 0x00, 0x00}, /* 0, -16.0dB*/
|
||||
{0x09, 0x09, 0x08, 0x05, 0x00, 0x00, 0x00, 0x00}, /* 1, -15.5dB*/
|
||||
{0x0a, 0x09, 0x08, 0x05, 0x00, 0x00, 0x00, 0x00}, /* 2, -15.0dB*/
|
||||
{0x0a, 0x0a, 0x09, 0x05, 0x00, 0x00, 0x00, 0x00}, /* 3, -14.5dB*/
|
||||
{0x0b, 0x0a, 0x09, 0x05, 0x00, 0x00, 0x00, 0x00}, /* 4, -14.0dB*/
|
||||
{0x0b, 0x0b, 0x0a, 0x06, 0x00, 0x00, 0x00, 0x00}, /*5, -13.5dB*/
|
||||
{0x0c, 0x0c, 0x0a, 0x06, 0x00, 0x00, 0x00, 0x00}, /* 6, -13.0dB*/
|
||||
{0x0d, 0x0c, 0x0b, 0x06, 0x00, 0x00, 0x00, 0x00}, /* 7, -12.5dB*/
|
||||
{0x0d, 0x0d, 0x0c, 0x07, 0x00, 0x00, 0x00, 0x00}, /* 8, -12.0dB*/
|
||||
{0x0e, 0x0e, 0x0c, 0x07, 0x00, 0x00, 0x00, 0x00}, /* 9, -11.5dB*/
|
||||
{0x0f, 0x0f, 0x0d, 0x08, 0x00, 0x00, 0x00, 0x00}, /* 10, -11.0dB*/
|
||||
{0x10, 0x10, 0x0e, 0x08, 0x00, 0x00, 0x00, 0x00}, /*11, -10.5dB*/
|
||||
{0x11, 0x11, 0x0f, 0x09, 0x00, 0x00, 0x00, 0x00}, /* 12, -10.0dB*/
|
||||
{0x12, 0x12, 0x0f, 0x09, 0x00, 0x00, 0x00, 0x00}, /* 13, -9.5dB*/
|
||||
{0x13, 0x13, 0x10, 0x0a, 0x00, 0x00, 0x00, 0x00}, /*14, -9.0dB */
|
||||
{0x14, 0x14, 0x11, 0x0a, 0x00, 0x00, 0x00, 0x00}, /* 15, -8.5dB*/
|
||||
{0x16, 0x15, 0x12, 0x0b, 0x00, 0x00, 0x00, 0x00}, /* 16, -8.0dB */
|
||||
{0x17, 0x16, 0x13, 0x0b, 0x00, 0x00, 0x00, 0x00}, /* 17, -7.5dB*/
|
||||
{0x18, 0x17, 0x15, 0x0c, 0x00, 0x00, 0x00, 0x00}, /* 18, -7.0dB */
|
||||
{0x1a, 0x19, 0x16, 0x0d, 0x00, 0x00, 0x00, 0x00}, /* 19, -6.5dB */
|
||||
{0x1b, 0x1a, 0x17, 0x0e, 0x00, 0x00, 0x00, 0x00}, /* 20, -6.0dB */
|
||||
{0x1d, 0x1c, 0x18, 0x0e, 0x00, 0x00, 0x00, 0x00}, /* 21, -5.5dB*/
|
||||
{0x1f, 0x1e, 0x1a, 0x0f, 0x00, 0x00, 0x00, 0x00}, /* 22, -5.0dB */
|
||||
{0x20, 0x20, 0x1b, 0x10, 0x00, 0x00, 0x00, 0x00}, /*23, -4.5dB*/
|
||||
{0x22, 0x21, 0x1d, 0x11, 0x00, 0x00, 0x00, 0x00}, /* 24, -4.0dB */
|
||||
{0x24, 0x23, 0x1f, 0x12, 0x00, 0x00, 0x00, 0x00}, /* 25, -3.5dB */
|
||||
{0x26, 0x25, 0x21, 0x13, 0x00, 0x00, 0x00, 0x00}, /* 26, -3.0dB */
|
||||
{0x28, 0x28, 0x24, 0x14, 0x00, 0x00, 0x00, 0x00}, /*27, -2.5dB*/
|
||||
{0x2b, 0x2a, 0x25, 0x15, 0x00, 0x00, 0x00, 0x00}, /* 28, -2.0dB */
|
||||
{0x2d, 0x2d, 0x17, 0x17, 0x00, 0x00, 0x00, 0x00}, /*29, -1.5dB*/
|
||||
{0x30, 0x2f, 0x29, 0x18, 0x00, 0x00, 0x00, 0x00}, /* 30, -1.0dB */
|
||||
{0x33, 0x32, 0x2b, 0x19, 0x00, 0x00, 0x00, 0x00}, /* 31, -0.5dB */
|
||||
{0x36, 0x35, 0x2e, 0x1b, 0x00, 0x00, 0x00, 0x00} /* 32, +0dB */
|
||||
};
|
||||
|
||||
u32 cck_swing_table_ch1_ch14_8723d[CCK_TABLE_SIZE_8723D] = {
|
||||
0x0CD, /*0 , -20dB*/
|
||||
0x0D9,
|
||||
0x0E6,
|
||||
0x0F3,
|
||||
0x102,
|
||||
0x111,
|
||||
0x121,
|
||||
0x132,
|
||||
0x144,
|
||||
0x158,
|
||||
0x16C,
|
||||
0x182,
|
||||
0x198,
|
||||
0x1B1,
|
||||
0x1CA,
|
||||
0x1E5,
|
||||
0x202,
|
||||
0x221,
|
||||
0x241,
|
||||
0x263,
|
||||
0x287,
|
||||
0x2AE,
|
||||
0x2D6,
|
||||
0x301,
|
||||
0x32F,
|
||||
0x35F,
|
||||
0x392,
|
||||
0x3C9,
|
||||
0x402,
|
||||
0x43F,
|
||||
0x47F,
|
||||
0x4C3,
|
||||
0x50C,
|
||||
0x558,
|
||||
0x5A9,
|
||||
0x5FF,
|
||||
0x65A,
|
||||
0x6BA,
|
||||
0x720,
|
||||
0x78C,
|
||||
0x7FF,
|
||||
};
|
||||
|
||||
/* JJ ADD 20161014 */
|
||||
u32 cck_swing_table_ch1_ch14_8710b[CCK_TABLE_SIZE_8710B] = {
|
||||
0x0CD, /*0 , -20dB*/
|
||||
0x0D9,
|
||||
0x0E6,
|
||||
0x0F3,
|
||||
0x102,
|
||||
0x111,
|
||||
0x121,
|
||||
0x132,
|
||||
0x144,
|
||||
0x158,
|
||||
0x16C,
|
||||
0x182,
|
||||
0x198,
|
||||
0x1B1,
|
||||
0x1CA,
|
||||
0x1E5,
|
||||
0x202,
|
||||
0x221,
|
||||
0x241,
|
||||
0x263,
|
||||
0x287,
|
||||
0x2AE,
|
||||
0x2D6,
|
||||
0x301,
|
||||
0x32F,
|
||||
0x35F,
|
||||
0x392,
|
||||
0x3C9,
|
||||
0x402,
|
||||
0x43F,
|
||||
0x47F,
|
||||
0x4C3,
|
||||
0x50C,
|
||||
0x558,
|
||||
0x5A9,
|
||||
0x5FF,
|
||||
0x65A,
|
||||
0x6BA,
|
||||
0x720,
|
||||
0x78C,
|
||||
0x7FF,
|
||||
};
|
||||
|
||||
/* Winnita ADD 20171116 PathA 0xAB4[10:0],PathB 0xAB4[21:11]*/
|
||||
u32 cck_swing_table_ch1_ch14_8192f[CCK_TABLE_SIZE_8192F] = {
|
||||
0x0CD, /*0 , -20dB*/
|
||||
0x0D9,
|
||||
0x0E6,
|
||||
0x0F3,
|
||||
0x102,
|
||||
0x111,
|
||||
0x121,
|
||||
0x132,
|
||||
0x144,
|
||||
0x158,
|
||||
0x16C,
|
||||
0x182,
|
||||
0x198,
|
||||
0x1B1,
|
||||
0x1CA,
|
||||
0x1E5,
|
||||
0x202,
|
||||
0x221,
|
||||
0x241,
|
||||
0x263, /*19*/
|
||||
0x287, /*20*/
|
||||
0x2AE, /*21*/
|
||||
0x2D6, /*22*/
|
||||
0x301, /*23*/
|
||||
0x32F, /*24*/
|
||||
0x35F, /*25*/
|
||||
0x392, /*26*/
|
||||
0x3C9, /*27*/
|
||||
0x402, /*28*/
|
||||
0x43F, /*29*/
|
||||
0x47F, /*30*/
|
||||
0x4C3, /*31*/
|
||||
0x50C, /*32*/
|
||||
0x558, /*33*/
|
||||
0x5A9, /*34*/
|
||||
0x5FF, /*35*/
|
||||
0x65A, /*36*/
|
||||
0x6BA,
|
||||
0x720,
|
||||
0x78C,
|
||||
0x7FF,
|
||||
};
|
||||
|
||||
/* Winnita ADD 201805 PathA 0xAB4[10:0]*/
|
||||
u32 cck_swing_table_ch1_ch14_8721d[CCK_TABLE_SIZE_8721D] = {
|
||||
0x0CD, /*0 , -20dB*/
|
||||
0x0D9,
|
||||
0x0E6,
|
||||
0x0F3,
|
||||
0x102,
|
||||
0x111,
|
||||
0x121,
|
||||
0x132,
|
||||
0x144,
|
||||
0x158,
|
||||
0x16C,
|
||||
0x182,
|
||||
0x198,
|
||||
0x1B1,
|
||||
0x1CA,
|
||||
0x1E5,
|
||||
0x202,
|
||||
0x221,
|
||||
0x241,
|
||||
0x263, /*19*/
|
||||
0x287, /*20*/
|
||||
0x2AE, /*21*/
|
||||
0x2D6, /*22*/
|
||||
0x301, /*23*/
|
||||
0x32F, /*24*/
|
||||
0x35F, /*25*/
|
||||
0x392, /*26*/
|
||||
0x3C9, /*27*/
|
||||
0x402, /*28*/
|
||||
0x43F, /*29*/
|
||||
0x47F, /*30*/
|
||||
0x4C3, /*31*/
|
||||
0x50C, /*32*/
|
||||
0x558, /*33*/
|
||||
0x5A9, /*34*/
|
||||
0x5FF, /*35*/
|
||||
0x65A, /*36*/
|
||||
0x6BA,
|
||||
0x720,
|
||||
0x78C,
|
||||
0x7FF,
|
||||
};
|
||||
|
||||
u32 tx_scaling_table_jaguar[TXSCALE_TABLE_SIZE] = {
|
||||
0x081, /* 0, -12.0dB*/
|
||||
0x088, /* 1, -11.5dB*/
|
||||
0x090, /* 2, -11.0dB*/
|
||||
0x099, /* 3, -10.5dB*/
|
||||
0x0A2, /* 4, -10.0dB*/
|
||||
0x0AC, /* 5, -9.5dB*/
|
||||
0x0B6, /* 6, -9.0dB*/
|
||||
0x0C0, /*7, -8.5dB*/
|
||||
0x0CC, /* 8, -8.0dB*/
|
||||
0x0D8, /* 9, -7.5dB*/
|
||||
0x0E5, /* 10, -7.0dB*/
|
||||
0x0F2, /* 11, -6.5dB*/
|
||||
0x101, /* 12, -6.0dB*/
|
||||
0x110, /* 13, -5.5dB*/
|
||||
0x120, /* 14, -5.0dB*/
|
||||
0x131, /* 15, -4.5dB*/
|
||||
0x143, /* 16, -4.0dB*/
|
||||
0x156, /* 17, -3.5dB*/
|
||||
0x16A, /* 18, -3.0dB*/
|
||||
0x180, /* 19, -2.5dB*/
|
||||
0x197, /* 20, -2.0dB*/
|
||||
0x1AF, /* 21, -1.5dB*/
|
||||
0x1C8, /* 22, -1.0dB*/
|
||||
0x1E3, /* 23, -0.5dB*/
|
||||
0x200, /* 24, +0 dB*/
|
||||
0x21E, /* 25, +0.5dB*/
|
||||
0x23E, /* 26, +1.0dB*/
|
||||
0x261, /* 27, +1.5dB*/
|
||||
0x285,/* 28, +2.0dB*/
|
||||
0x2AB, /* 29, +2.5dB*/
|
||||
0x2D3, /*30, +3.0dB*/
|
||||
0x2FE, /* 31, +3.5dB*/
|
||||
0x32B, /* 32, +4.0dB*/
|
||||
0x35C, /* 33, +4.5dB*/
|
||||
0x38E, /* 34, +5.0dB*/
|
||||
0x3C4, /* 35, +5.5dB*/
|
||||
0x3FE /* 36, +6.0dB */
|
||||
};
|
||||
|
||||
void
|
||||
odm_txpowertracking_init(
|
||||
void *dm_void
|
||||
)
|
||||
{
|
||||
struct dm_struct *dm = (struct dm_struct *)dm_void;
|
||||
|
||||
odm_txpowertracking_thermal_meter_init(dm);
|
||||
}
|
||||
|
||||
u8
|
||||
get_swing_index(
|
||||
void *dm_void
|
||||
)
|
||||
{
|
||||
struct dm_struct *dm = (struct dm_struct *)dm_void;
|
||||
|
||||
u8 i = 0;
|
||||
u32 bb_swing;
|
||||
u32 swing_table_size;
|
||||
u32 *swing_table;
|
||||
|
||||
if (dm->support_ic_type == ODM_RTL8195B) {
|
||||
bb_swing = odm_get_bb_reg(dm, R_0xc1c, 0xFFE00000);
|
||||
swing_table = tx_scaling_table_jaguar;
|
||||
swing_table_size = TXSCALE_TABLE_SIZE;
|
||||
}
|
||||
|
||||
for (i = 0; i < swing_table_size; i++) {
|
||||
u32 table_value = swing_table[i];
|
||||
|
||||
table_value = table_value;
|
||||
if (bb_swing == table_value)
|
||||
break;
|
||||
}
|
||||
|
||||
return i;
|
||||
}
|
||||
|
||||
u8
|
||||
get_cck_swing_index(
|
||||
void *dm_void
|
||||
)
|
||||
{
|
||||
struct dm_struct *dm = (struct dm_struct *)dm_void;
|
||||
|
||||
u8 i = 0;
|
||||
u32 bb_cck_swing;
|
||||
|
||||
if (dm->support_ic_type == ODM_RTL8188E || dm->support_ic_type == ODM_RTL8723B ||
|
||||
dm->support_ic_type == ODM_RTL8192E) {
|
||||
bb_cck_swing = odm_read_1byte(dm, 0xa22);
|
||||
|
||||
for (i = 0; i < CCK_TABLE_SIZE; i++) {
|
||||
if (bb_cck_swing == cck_swing_table_ch1_ch13_new[i][0])
|
||||
break;
|
||||
}
|
||||
} else if (dm->support_ic_type == ODM_RTL8703B) {
|
||||
bb_cck_swing = odm_read_1byte(dm, 0xa22);
|
||||
|
||||
for (i = 0; i < CCK_TABLE_SIZE_88F; i++) {
|
||||
if (bb_cck_swing == cck_swing_table_ch1_ch14_88f[i][0])
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return i;
|
||||
}
|
||||
|
||||
void
|
||||
odm_txpowertracking_thermal_meter_init(
|
||||
void *dm_void
|
||||
)
|
||||
{
|
||||
struct dm_struct *dm = (struct dm_struct *)dm_void;
|
||||
u8 default_swing_index = get_swing_index(dm);
|
||||
u8 p = 0;
|
||||
struct dm_rf_calibration_struct *cali_info = &dm->rf_calibrate_info;
|
||||
struct _hal_rf_ *rf = &dm->rf_table;
|
||||
|
||||
if (!(*dm->mp_mode))
|
||||
cali_info->txpowertrack_control = true;
|
||||
else
|
||||
cali_info->txpowertrack_control = false;
|
||||
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK, "dm txpowertrack_control = %d\n", cali_info->txpowertrack_control);
|
||||
|
||||
/* dm->rf_calibrate_info.txpowertrack_control = true; */
|
||||
cali_info->thermal_value = rf->eeprom_thermal;
|
||||
cali_info->thermal_value_iqk = rf->eeprom_thermal;
|
||||
cali_info->thermal_value_lck = rf->eeprom_thermal;
|
||||
|
||||
if (!cali_info->default_bb_swing_index_flag) {
|
||||
if (dm->support_ic_type == ODM_RTL8195B) {
|
||||
cali_info->default_ofdm_index = (default_swing_index >= TXSCALE_TABLE_SIZE) ? 24 : default_swing_index;
|
||||
cali_info->default_cck_index = 24;
|
||||
} else if (dm->support_ic_type == ODM_RTL8721D) {
|
||||
cali_info->default_ofdm_index = 30; /*OFDM: 0dB*/
|
||||
cali_info->default_cck_index = 28; /*CCK: -6dB*/
|
||||
}
|
||||
cali_info->default_bb_swing_index_flag = true;
|
||||
}
|
||||
|
||||
cali_info->bb_swing_idx_cck_base = cali_info->default_cck_index;
|
||||
cali_info->CCK_index = cali_info->default_cck_index;
|
||||
|
||||
for (p = RF_PATH_A; p < MAX_RF_PATH; ++p) {
|
||||
cali_info->bb_swing_idx_ofdm_base[p] = cali_info->default_ofdm_index;
|
||||
cali_info->OFDM_index[p] = cali_info->default_ofdm_index;
|
||||
cali_info->delta_power_index[p] = 0;
|
||||
cali_info->delta_power_index_last[p] = 0;
|
||||
cali_info->power_index_offset[p] = 0;
|
||||
}
|
||||
cali_info->modify_tx_agc_value_ofdm = 0;
|
||||
cali_info->modify_tx_agc_value_cck = 0;
|
||||
cali_info->tm_trigger = 0;
|
||||
}
|
||||
|
||||
void
|
||||
odm_txpowertracking_check(
|
||||
void *dm_void
|
||||
)
|
||||
{
|
||||
struct dm_struct *dm = (struct dm_struct *)dm_void;
|
||||
|
||||
odm_txpowertracking_check_iot(dm);
|
||||
}
|
||||
|
||||
void
|
||||
odm_txpowertracking_check_iot(
|
||||
void *dm_void
|
||||
)
|
||||
{
|
||||
struct dm_struct *dm = (struct dm_struct *)dm_void;
|
||||
struct _hal_rf_ *rf = &dm->rf_table;
|
||||
|
||||
if (!(rf->rf_supportability & HAL_RF_TX_PWR_TRACK))
|
||||
return;
|
||||
|
||||
if (!dm->rf_calibrate_info.tm_trigger) {
|
||||
if (dm->support_ic_type == ODM_RTL8195B)
|
||||
odm_set_rf_reg(dm, RF_PATH_A, RF_T_METER_NEW, (BIT(17) | BIT(16)), 0x03);
|
||||
else if (dm->support_ic_type == ODM_RTL8721D)
|
||||
odm_set_rf_reg(dm, RF_PATH_A, RF_T_METER_NEW,
|
||||
(BIT(12) | BIT(11)), 0x03);
|
||||
|
||||
dm->rf_calibrate_info.tm_trigger = 1;
|
||||
return;
|
||||
}
|
||||
odm_txpowertracking_callback_thermal_meter(dm);
|
||||
dm->rf_calibrate_info.tm_trigger = 0;
|
||||
}
|
||||
|
||||
void
|
||||
odm_txpowertracking_check_mp(
|
||||
void *dm_void
|
||||
)
|
||||
{
|
||||
#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
|
||||
struct dm_struct *dm = (struct dm_struct *)dm_void;
|
||||
void *adapter = dm->adapter;
|
||||
|
||||
if (odm_check_power_status(adapter) == false) {
|
||||
RT_TRACE(COMP_POWER_TRACKING, DBG_LOUD, ("check_pow_status, return false\n"));
|
||||
return;
|
||||
}
|
||||
|
||||
odm_txpowertracking_thermal_meter_check(adapter);
|
||||
#endif
|
||||
}
|
||||
|
||||
void
|
||||
odm_txpowertracking_check_ap(
|
||||
void *dm_void
|
||||
)
|
||||
{
|
||||
#if (DM_ODM_SUPPORT_TYPE == ODM_AP)
|
||||
struct dm_struct *dm = (struct dm_struct *)dm_void;
|
||||
struct rtl8192cd_priv *priv = dm->priv;
|
||||
|
||||
return;
|
||||
|
||||
#endif
|
||||
}
|
||||
349
hal/phydm/halrf/halrf_powertracking_iot.h
Normal file
349
hal/phydm/halrf/halrf_powertracking_iot.h
Normal file
@@ -0,0 +1,349 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Copyright(c) 2007 - 2017 Realtek Corporation.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of version 2 of the GNU General Public License as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
* more details.
|
||||
*
|
||||
* The full GNU General Public License is included in this distribution in the
|
||||
* file called LICENSE.
|
||||
*
|
||||
* Contact Information:
|
||||
* wlanfae <wlanfae@realtek.com>
|
||||
* Realtek Corporation, No. 2, Innovation Road II, Hsinchu Science Park,
|
||||
* Hsinchu 300, Taiwan.
|
||||
*
|
||||
* Larry Finger <Larry.Finger@lwfinger.net>
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
#ifndef __HALRF_POWERTRACKING_H__
|
||||
#define __HALRF_POWERTRACKING_H__
|
||||
|
||||
#define DPK_DELTA_MAPPING_NUM 13
|
||||
#define index_mapping_HP_NUM 15
|
||||
#define OFDM_TABLE_SIZE 43
|
||||
#define CCK_TABLE_SIZE 33
|
||||
#define CCK_TABLE_SIZE_88F 21
|
||||
#define TXSCALE_TABLE_SIZE 37
|
||||
#define CCK_TABLE_SIZE_8723D 41
|
||||
/* JJ ADD 20161014 */
|
||||
#define CCK_TABLE_SIZE_8710B 41
|
||||
#define CCK_TABLE_SIZE_8192F 41
|
||||
#define CCK_TABLE_SIZE_8721D 41
|
||||
|
||||
|
||||
#define TXPWR_TRACK_TABLE_SIZE 30
|
||||
#define DELTA_SWINGIDX_SIZE 30
|
||||
#define DELTA_SWINTSSI_SIZE 61
|
||||
#define BAND_NUM 4
|
||||
|
||||
#define AVG_THERMAL_NUM 8
|
||||
#define IQK_MAC_REG_NUM 4
|
||||
#define IQK_ADDA_REG_NUM 16
|
||||
#define IQK_BB_REG_NUM_MAX 10
|
||||
|
||||
#define IQK_BB_REG_NUM 9
|
||||
|
||||
|
||||
|
||||
#define iqk_matrix_reg_num 8
|
||||
#if (DM_ODM_SUPPORT_TYPE == ODM_CE) && defined(DM_ODM_CE_MAC80211)
|
||||
#else
|
||||
#define IQK_MATRIX_SETTINGS_NUM (14+24+21) /* Channels_2_4G_NUM + Channels_5G_20M_NUM + Channels_5G */
|
||||
#endif
|
||||
|
||||
extern u32 ofdm_swing_table[OFDM_TABLE_SIZE];
|
||||
extern u8 cck_swing_table_ch1_ch13[CCK_TABLE_SIZE][8];
|
||||
extern u8 cck_swing_table_ch14[CCK_TABLE_SIZE][8];
|
||||
|
||||
extern u32 ofdm_swing_table_new[OFDM_TABLE_SIZE];
|
||||
extern u8 cck_swing_table_ch1_ch13_new[CCK_TABLE_SIZE][8];
|
||||
extern u8 cck_swing_table_ch14_new[CCK_TABLE_SIZE][8];
|
||||
extern u8 cck_swing_table_ch1_ch14_88f[CCK_TABLE_SIZE_88F][16];
|
||||
extern u8 cck_swing_table_ch1_ch13_88f[CCK_TABLE_SIZE_88F][16];
|
||||
extern u8 cck_swing_table_ch14_88f[CCK_TABLE_SIZE_88F][16];
|
||||
extern u32 cck_swing_table_ch1_ch14_8723d[CCK_TABLE_SIZE_8723D];
|
||||
/* JJ ADD 20161014 */
|
||||
extern u32 cck_swing_table_ch1_ch14_8710b[CCK_TABLE_SIZE_8710B];
|
||||
extern u32 cck_swing_table_ch1_ch14_8192f[CCK_TABLE_SIZE_8192F];
|
||||
extern u32 cck_swing_table_ch1_ch14_8721d[CCK_TABLE_SIZE_8721D];
|
||||
|
||||
extern u32 tx_scaling_table_jaguar[TXSCALE_TABLE_SIZE];
|
||||
|
||||
/* <20121018, Kordan> In case fail to read TxPowerTrack.txt, we use the table of 88E as the default table. */
|
||||
#if (DM_ODM_SUPPORT_TYPE == ODM_CE) && defined(DM_ODM_CE_MAC80211)
|
||||
#else
|
||||
static u8 delta_swing_table_idx_2ga_p_8188e[] = {0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 7, 7, 8, 8, 8, 9, 9, 9, 9, 9};
|
||||
static u8 delta_swing_table_idx_2ga_n_8188e[] = {0, 0, 0, 2, 2, 3, 3, 4, 4, 4, 4, 5, 5, 6, 6, 7, 7, 7, 7, 8, 8, 9, 9, 10, 10, 10, 11, 11, 11, 11};
|
||||
#endif
|
||||
|
||||
void
|
||||
odm_txpowertracking_init(
|
||||
void *dm_void
|
||||
);
|
||||
|
||||
#define dm_check_txpowertracking odm_txpowertracking_check
|
||||
|
||||
struct iqk_matrix_regs_setting {
|
||||
boolean is_iqk_done;
|
||||
s32 value[3][iqk_matrix_reg_num];
|
||||
boolean is_bw_iqk_result_saved[3];
|
||||
};
|
||||
|
||||
struct dm_rf_calibration_struct {
|
||||
/* for tx power tracking */
|
||||
|
||||
u32 rega24; /* for TempCCK */
|
||||
s32 rege94;
|
||||
s32 rege9c;
|
||||
s32 regeb4;
|
||||
s32 regebc;
|
||||
|
||||
u8 tx_powercount;
|
||||
boolean is_txpowertracking_init;
|
||||
boolean is_txpowertracking;
|
||||
u8 txpowertrack_control; /* for mp mode, turn off txpwrtracking as default */
|
||||
u8 tm_trigger;
|
||||
u8 internal_pa_5g[2]; /* pathA / pathB */
|
||||
|
||||
u8 thermal_meter[2]; /* thermal_meter, index 0 for RFIC0, and 1 for RFIC1 */
|
||||
u8 thermal_value;
|
||||
u8 thermal_value_lck;
|
||||
u8 thermal_value_iqk;
|
||||
s8 thermal_value_delta; /* delta of thermal_value and efuse thermal */
|
||||
u8 thermal_value_dpk;
|
||||
u8 thermal_value_avg[AVG_THERMAL_NUM];
|
||||
u8 thermal_value_avg_index;
|
||||
u8 thermal_value_rx_gain;
|
||||
u8 thermal_value_crystal;
|
||||
u8 thermal_value_dpk_store;
|
||||
u8 thermal_value_dpk_track;
|
||||
boolean txpowertracking_in_progress;
|
||||
|
||||
boolean is_reloadtxpowerindex;
|
||||
u8 is_rf_pi_enable;
|
||||
u32 txpowertracking_callback_cnt; /* cosa add for debug */
|
||||
|
||||
|
||||
/* ------------------------- Tx power Tracking ------------------------- */
|
||||
u8 is_cck_in_ch14;
|
||||
u8 CCK_index;
|
||||
u8 OFDM_index[MAX_RF_PATH];
|
||||
s8 power_index_offset[MAX_RF_PATH];
|
||||
s8 delta_power_index[MAX_RF_PATH];
|
||||
s8 delta_power_index_last[MAX_RF_PATH];
|
||||
boolean is_tx_power_changed;
|
||||
s8 xtal_offset;
|
||||
s8 xtal_offset_last;
|
||||
|
||||
struct iqk_matrix_regs_setting iqk_matrix_reg_setting[IQK_MATRIX_SETTINGS_NUM];
|
||||
u8 delta_lck;
|
||||
s8 bb_swing_diff_2g, bb_swing_diff_5g; /* Unit: dB */
|
||||
u8 delta_swing_table_idx_2g_cck_a_p[DELTA_SWINGIDX_SIZE];
|
||||
u8 delta_swing_table_idx_2g_cck_a_n[DELTA_SWINGIDX_SIZE];
|
||||
u8 delta_swing_table_idx_2g_cck_b_p[DELTA_SWINGIDX_SIZE];
|
||||
u8 delta_swing_table_idx_2g_cck_b_n[DELTA_SWINGIDX_SIZE];
|
||||
u8 delta_swing_table_idx_2g_cck_c_p[DELTA_SWINGIDX_SIZE];
|
||||
u8 delta_swing_table_idx_2g_cck_c_n[DELTA_SWINGIDX_SIZE];
|
||||
u8 delta_swing_table_idx_2g_cck_d_p[DELTA_SWINGIDX_SIZE];
|
||||
u8 delta_swing_table_idx_2g_cck_d_n[DELTA_SWINGIDX_SIZE];
|
||||
u8 delta_swing_table_idx_2ga_p[DELTA_SWINGIDX_SIZE];
|
||||
u8 delta_swing_table_idx_2ga_n[DELTA_SWINGIDX_SIZE];
|
||||
u8 delta_swing_table_idx_2gb_p[DELTA_SWINGIDX_SIZE];
|
||||
u8 delta_swing_table_idx_2gb_n[DELTA_SWINGIDX_SIZE];
|
||||
u8 delta_swing_table_idx_2gc_p[DELTA_SWINGIDX_SIZE];
|
||||
u8 delta_swing_table_idx_2gc_n[DELTA_SWINGIDX_SIZE];
|
||||
u8 delta_swing_table_idx_2gd_p[DELTA_SWINGIDX_SIZE];
|
||||
u8 delta_swing_table_idx_2gd_n[DELTA_SWINGIDX_SIZE];
|
||||
u8 delta_swing_table_idx_5ga_p[BAND_NUM][DELTA_SWINGIDX_SIZE];
|
||||
u8 delta_swing_table_idx_5ga_n[BAND_NUM][DELTA_SWINGIDX_SIZE];
|
||||
u8 delta_swing_table_idx_5gb_p[BAND_NUM][DELTA_SWINGIDX_SIZE];
|
||||
u8 delta_swing_table_idx_5gb_n[BAND_NUM][DELTA_SWINGIDX_SIZE];
|
||||
u8 delta_swing_table_idx_5gc_p[BAND_NUM][DELTA_SWINGIDX_SIZE];
|
||||
u8 delta_swing_table_idx_5gc_n[BAND_NUM][DELTA_SWINGIDX_SIZE];
|
||||
u8 delta_swing_table_idx_5gd_p[BAND_NUM][DELTA_SWINGIDX_SIZE];
|
||||
u8 delta_swing_table_idx_5gd_n[BAND_NUM][DELTA_SWINGIDX_SIZE];
|
||||
u8 delta_swing_tssi_table_2g_cck_a[DELTA_SWINTSSI_SIZE];
|
||||
u8 delta_swing_tssi_table_2g_cck_b[DELTA_SWINTSSI_SIZE];
|
||||
u8 delta_swing_tssi_table_2g_cck_c[DELTA_SWINTSSI_SIZE];
|
||||
u8 delta_swing_tssi_table_2g_cck_d[DELTA_SWINTSSI_SIZE];
|
||||
u8 delta_swing_tssi_table_2ga[DELTA_SWINTSSI_SIZE];
|
||||
u8 delta_swing_tssi_table_2gb[DELTA_SWINTSSI_SIZE];
|
||||
u8 delta_swing_tssi_table_2gc[DELTA_SWINTSSI_SIZE];
|
||||
u8 delta_swing_tssi_table_2gd[DELTA_SWINTSSI_SIZE];
|
||||
u8 delta_swing_tssi_table_5ga[BAND_NUM][DELTA_SWINTSSI_SIZE];
|
||||
u8 delta_swing_tssi_table_5gb[BAND_NUM][DELTA_SWINTSSI_SIZE];
|
||||
u8 delta_swing_tssi_table_5gc[BAND_NUM][DELTA_SWINTSSI_SIZE];
|
||||
u8 delta_swing_tssi_table_5gd[BAND_NUM][DELTA_SWINTSSI_SIZE];
|
||||
s8 delta_swing_table_xtal_p[DELTA_SWINGIDX_SIZE];
|
||||
s8 delta_swing_table_xtal_n[DELTA_SWINGIDX_SIZE];
|
||||
u8 delta_swing_table_idx_2ga_p_8188e[DELTA_SWINGIDX_SIZE];
|
||||
u8 delta_swing_table_idx_2ga_n_8188e[DELTA_SWINGIDX_SIZE];
|
||||
|
||||
u8 bb_swing_idx_ofdm[MAX_RF_PATH];
|
||||
u8 bb_swing_idx_ofdm_current;
|
||||
#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN | ODM_CE | ODM_IOT))
|
||||
u8 bb_swing_idx_ofdm_base[MAX_RF_PATH];
|
||||
#else
|
||||
u8 bb_swing_idx_ofdm_base;
|
||||
#endif
|
||||
boolean default_bb_swing_index_flag;
|
||||
boolean bb_swing_flag_ofdm;
|
||||
u8 bb_swing_idx_cck;
|
||||
u8 bb_swing_idx_cck_current;
|
||||
u8 bb_swing_idx_cck_base;
|
||||
u8 default_ofdm_index;
|
||||
u8 default_cck_index;
|
||||
boolean bb_swing_flag_cck;
|
||||
|
||||
s8 absolute_ofdm_swing_idx[MAX_RF_PATH];
|
||||
s8 remnant_ofdm_swing_idx[MAX_RF_PATH];
|
||||
s8 absolute_cck_swing_idx[MAX_RF_PATH];
|
||||
s8 remnant_cck_swing_idx;
|
||||
s8 modify_tx_agc_value; /*Remnat compensate value at tx_agc */
|
||||
boolean modify_tx_agc_flag_path_a;
|
||||
boolean modify_tx_agc_flag_path_b;
|
||||
boolean modify_tx_agc_flag_path_c;
|
||||
boolean modify_tx_agc_flag_path_d;
|
||||
boolean modify_tx_agc_flag_path_a_cck;
|
||||
boolean modify_tx_agc_flag_path_b_cck;
|
||||
|
||||
s8 kfree_offset[MAX_RF_PATH];
|
||||
|
||||
/* -------------------------------------------------------------------- */
|
||||
|
||||
/* for IQK */
|
||||
u32 regc04;
|
||||
u32 reg874;
|
||||
u32 regc08;
|
||||
u32 regb68;
|
||||
u32 regb6c;
|
||||
u32 reg870;
|
||||
u32 reg860;
|
||||
u32 reg864;
|
||||
|
||||
boolean is_iqk_initialized;
|
||||
boolean is_lck_in_progress;
|
||||
boolean is_antenna_detected;
|
||||
boolean is_need_iqk;
|
||||
boolean is_iqk_in_progress;
|
||||
boolean is_iqk_pa_off;
|
||||
u8 delta_iqk;
|
||||
u32 ADDA_backup[IQK_ADDA_REG_NUM];
|
||||
u32 IQK_MAC_backup[IQK_MAC_REG_NUM];
|
||||
u32 IQK_BB_backup_recover[9];
|
||||
u32 IQK_BB_backup[IQK_BB_REG_NUM];
|
||||
u32 tx_iqc_8723b[2][3][2]; /* { {S1: 0xc94, 0xc80, 0xc4c} , {S0: 0xc9c, 0xc88, 0xc4c}} */
|
||||
u32 rx_iqc_8723b[2][2][2]; /* { {S1: 0xc14, 0xca0} , {S0: 0xc14, 0xca0}} */
|
||||
u32 tx_iqc_8703b[3][2]; /* { {S1: 0xc94, 0xc80, 0xc4c} , {S0: 0xc9c, 0xc88, 0xc4c}}*/
|
||||
u32 rx_iqc_8703b[2][2]; /* { {S1: 0xc14, 0xca0} , {S0: 0xc14, 0xca0}}*/
|
||||
u32 tx_iqc_8723d[2][3][2]; /* { {S1: 0xc94, 0xc80, 0xc4c} , {S0: 0xc9c, 0xc88, 0xc4c}}*/
|
||||
u32 rx_iqc_8723d[2][2][2]; /* { {S1: 0xc14, 0xca0} , {S0: 0xc14, 0xca0}}*/
|
||||
/* JJ ADD 20161014 */
|
||||
u32 tx_iqc_8710b[2][3][2]; /* { {S1: 0xc94, 0xc80, 0xc4c} , {S0: 0xc9c, 0xc88, 0xc4c}}*/
|
||||
u32 rx_iqc_8710b[2][2][2]; /* { {S1: 0xc14, 0xca0} , {S0: 0xc14, 0xca0}}*/
|
||||
|
||||
u8 iqk_step;
|
||||
u8 kcount;
|
||||
u8 retry_count[4][2]; /* [4]: path ABCD, [2] TXK, RXK */
|
||||
boolean is_mp_mode;
|
||||
|
||||
|
||||
|
||||
/* <James> IQK time measurement */
|
||||
u32 iqk_start_time;
|
||||
u32 iqk_progressing_time;
|
||||
u32 iqk_total_progressing_time;
|
||||
u32 lck_progressing_time;
|
||||
|
||||
u32 lok_result;
|
||||
|
||||
/* for APK */
|
||||
u32 ap_koutput[2][2]; /* path A/B; output1_1a/output1_2a */
|
||||
u8 is_ap_kdone;
|
||||
u8 is_apk_thermal_meter_ignore;
|
||||
|
||||
/* DPK */
|
||||
boolean is_dpk_fail;
|
||||
u8 is_dp_done;
|
||||
u8 is_dp_path_aok;
|
||||
u8 is_dp_path_bok;
|
||||
|
||||
u32 tx_lok[2];
|
||||
u32 dpk_tx_agc;
|
||||
s32 dpk_gain;
|
||||
u32 dpk_thermal[4];
|
||||
s8 modify_tx_agc_value_ofdm;
|
||||
s8 modify_tx_agc_value_cck;
|
||||
|
||||
/*Add by Yuchen for Kfree Phydm*/
|
||||
u8 reg_rf_kfree_enable; /*for registry*/
|
||||
u8 rf_kfree_enable; /*for efuse enable check*/
|
||||
|
||||
};
|
||||
|
||||
|
||||
void
|
||||
odm_txpowertracking_check(
|
||||
void *dm_void
|
||||
);
|
||||
|
||||
void
|
||||
odm_txpowertracking_check_ap(
|
||||
void *dm_void
|
||||
);
|
||||
|
||||
void
|
||||
odm_txpowertracking_thermal_meter_init(
|
||||
void *dm_void
|
||||
);
|
||||
|
||||
|
||||
void
|
||||
odm_txpowertracking_check_mp(
|
||||
void *dm_void
|
||||
);
|
||||
|
||||
|
||||
void
|
||||
odm_txpowertracking_check_iot(
|
||||
void *dm_void
|
||||
);
|
||||
|
||||
#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN))
|
||||
|
||||
void
|
||||
odm_txpowertracking_callback_thermal_meter92c(
|
||||
void *adapter
|
||||
);
|
||||
|
||||
void
|
||||
odm_txpowertracking_callback_rx_gain_thermal_meter92d(
|
||||
void *adapter
|
||||
);
|
||||
|
||||
void
|
||||
odm_txpowertracking_callback_thermal_meter92d(
|
||||
void *adapter
|
||||
);
|
||||
|
||||
void
|
||||
odm_txpowertracking_direct_call92c(
|
||||
void *adapter
|
||||
);
|
||||
|
||||
void
|
||||
odm_txpowertracking_thermal_meter_check(
|
||||
void *adapter
|
||||
);
|
||||
|
||||
#endif
|
||||
|
||||
#endif /*#ifndef __HALRF_POWER_TRACKING_H__*/
|
||||
@@ -419,6 +419,50 @@ u32 cck_swing_table_ch1_ch14_8710b[CCK_TABLE_SIZE_8710B] = {
|
||||
0x7FF,
|
||||
};
|
||||
|
||||
/* Winnita ADD 20170828 PathA 0xAB4[10:0],PathB 0xAB4[21:11]*/
|
||||
u32 cck_swing_table_ch1_ch14_8192f[CCK_TABLE_SIZE_8192F] = {
|
||||
0x0CD, /*0 , -20dB*/
|
||||
0x0D9,
|
||||
0x0E6,
|
||||
0x0F3,
|
||||
0x102,
|
||||
0x111,
|
||||
0x121,
|
||||
0x132,
|
||||
0x144,
|
||||
0x158,
|
||||
0x16C,
|
||||
0x182,
|
||||
0x198,
|
||||
0x1B1,
|
||||
0x1CA,
|
||||
0x1E5,
|
||||
0x202,
|
||||
0x221,
|
||||
0x241,
|
||||
0x263, /*19*/
|
||||
0x287, /*20*/
|
||||
0x2AE, /*21*/
|
||||
0x2D6, /*22*/
|
||||
0x301, /*23*/
|
||||
0x32F, /*24*/
|
||||
0x35F, /*25*/
|
||||
0x392, /*26*/
|
||||
0x3C9, /*27*/
|
||||
0x402, /*28*/
|
||||
0x43F, /*29*/
|
||||
0x47F, /*30*/
|
||||
0x4C3, /*31*/
|
||||
0x50C, /*32*/
|
||||
0x558, /*33*/
|
||||
0x5A9, /*34*/
|
||||
0x5FF, /*35*/
|
||||
0x65A, /*36*/
|
||||
0x6BA,
|
||||
0x720,
|
||||
0x78C,
|
||||
0x7FF,
|
||||
};
|
||||
|
||||
u32 tx_scaling_table_jaguar[TXSCALE_TABLE_SIZE] = {
|
||||
0x081, /* 0, -12.0dB */
|
||||
@@ -483,30 +527,34 @@ get_swing_index(
|
||||
void *adapter = dm->adapter;
|
||||
HAL_DATA_TYPE *hal_data = GET_HAL_DATA(((PADAPTER)adapter));
|
||||
u8 i = 0;
|
||||
u32 bb_swing;
|
||||
u32 swing_table_size;
|
||||
u32 *swing_table;
|
||||
u32 bb_swing, table_value;
|
||||
|
||||
if (dm->support_ic_type == ODM_RTL8188E || dm->support_ic_type == ODM_RTL8723B ||
|
||||
dm->support_ic_type == ODM_RTL8192E || dm->support_ic_type == ODM_RTL8188F || dm->support_ic_type == ODM_RTL8703B || dm->support_ic_type == ODM_RTL8723D || dm->support_ic_type == ODM_RTL8710B) {
|
||||
dm->support_ic_type == ODM_RTL8192E || dm->support_ic_type == ODM_RTL8188F ||
|
||||
dm->support_ic_type == ODM_RTL8703B || dm->support_ic_type == ODM_RTL8723D ||
|
||||
dm->support_ic_type == ODM_RTL8192F || dm->support_ic_type == ODM_RTL8710B ||
|
||||
dm->support_ic_type == ODM_RTL8821) {
|
||||
bb_swing = odm_get_bb_reg(dm, REG_OFDM_0_XA_TX_IQ_IMBALANCE, 0xFFC00000);
|
||||
|
||||
swing_table = ofdm_swing_table_new;
|
||||
swing_table_size = OFDM_TABLE_SIZE;
|
||||
for (i = 0; i < OFDM_TABLE_SIZE; i++) {
|
||||
table_value = ofdm_swing_table_new[i];
|
||||
|
||||
if (table_value >= 0x100000)
|
||||
table_value >>= 22;
|
||||
if (bb_swing == table_value)
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
bb_swing = PHY_GetTxBBSwing_8812A((PADAPTER)adapter, hal_data->CurrentBandType, RF_PATH_A);
|
||||
swing_table = tx_scaling_table_jaguar;
|
||||
swing_table_size = TXSCALE_TABLE_SIZE;
|
||||
bb_swing = PHY_GetTxBBSwing_8812A(adapter, hal_data->CurrentBandType, RF_PATH_A);
|
||||
|
||||
for (i = 0; i < TXSCALE_TABLE_SIZE; i++) {
|
||||
table_value = tx_scaling_table_jaguar[i];
|
||||
|
||||
if (bb_swing == table_value)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < swing_table_size; ++i) {
|
||||
u32 table_value = swing_table[i];
|
||||
|
||||
if (table_value >= 0x100000)
|
||||
table_value >>= 22;
|
||||
if (bb_swing == table_value)
|
||||
break;
|
||||
}
|
||||
return i;
|
||||
}
|
||||
|
||||
@@ -615,7 +663,8 @@ odm_txpowertracking_thermal_meter_init(
|
||||
if (cali_info->default_bb_swing_index_flag != true) {
|
||||
/*The index of "0 dB" in SwingTable.*/
|
||||
if (dm->support_ic_type == ODM_RTL8188E || dm->support_ic_type == ODM_RTL8723B ||
|
||||
dm->support_ic_type == ODM_RTL8192E || dm->support_ic_type == ODM_RTL8703B) {
|
||||
dm->support_ic_type == ODM_RTL8192E || dm->support_ic_type == ODM_RTL8703B ||
|
||||
dm->support_ic_type == ODM_RTL8821) {
|
||||
cali_info->default_ofdm_index = (default_swing_index >= OFDM_TABLE_SIZE) ? 30 : default_swing_index;
|
||||
cali_info->default_cck_index = (default_cck_swing_index >= CCK_TABLE_SIZE) ? 20 : default_cck_swing_index;
|
||||
} else if (dm->support_ic_type == ODM_RTL8188F) { /*add by Mingzhi.Guo 2015-03-23*/
|
||||
@@ -628,6 +677,10 @@ odm_txpowertracking_thermal_meter_init(
|
||||
} else if (dm->support_ic_type == ODM_RTL8710B) {
|
||||
cali_info->default_ofdm_index = 28; /*OFDM: -1dB*/
|
||||
cali_info->default_cck_index = 28; /*CCK: -6dB*/
|
||||
/*Winnita add 20170828*/
|
||||
} else if (dm->support_ic_type == ODM_RTL8192F) {
|
||||
cali_info->default_ofdm_index = 30; /*OFDM: 0dB*/
|
||||
cali_info->default_cck_index = 28; /*CCK: -6dB*/
|
||||
} else {
|
||||
cali_info->default_ofdm_index = (default_swing_index >= TXSCALE_TABLE_SIZE) ? 24 : default_swing_index;
|
||||
cali_info->default_cck_index = 24;
|
||||
@@ -785,18 +838,20 @@ odm_txpowertracking_thermal_meter_check(
|
||||
}
|
||||
|
||||
if (!tm_trigger) {
|
||||
if (IS_HARDWARE_TYPE_8188E(adapter) || IS_HARDWARE_TYPE_JAGUAR(adapter) || IS_HARDWARE_TYPE_8192E(adapter) ||
|
||||
IS_HARDWARE_TYPE_8723B(adapter) || IS_HARDWARE_TYPE_8814A(adapter) || IS_HARDWARE_TYPE_8188F(adapter) || IS_HARDWARE_TYPE_8703B(adapter)
|
||||
if (IS_HARDWARE_TYPE_8188E(adapter) || IS_HARDWARE_TYPE_JAGUAR(adapter) || IS_HARDWARE_TYPE_8192E(adapter) || IS_HARDWARE_TYPE_8192F(adapter)
|
||||
||IS_HARDWARE_TYPE_8723B(adapter) || IS_HARDWARE_TYPE_8814A(adapter) || IS_HARDWARE_TYPE_8188F(adapter) || IS_HARDWARE_TYPE_8703B(adapter)
|
||||
|| IS_HARDWARE_TYPE_8822B(adapter) || IS_HARDWARE_TYPE_8723D(adapter) || IS_HARDWARE_TYPE_8821C(adapter) || IS_HARDWARE_TYPE_8710B(adapter))/* JJ ADD 20161014 */
|
||||
PHY_SetRFReg((PADAPTER)adapter, RF_PATH_A, RF_T_METER_88E, BIT(17) | BIT(16), 0x03);
|
||||
PHY_SetRFReg(adapter, RF_PATH_A, RF_T_METER_88E, BIT(17) | BIT(16), 0x03);
|
||||
else
|
||||
PHY_SetRFReg((PADAPTER)adapter, RF_PATH_A, RF_T_METER, RFREGOFFSETMASK, 0x60);
|
||||
PHY_SetRFReg(adapter, RF_PATH_A, RF_T_METER, RFREGOFFSETMASK, 0x60);
|
||||
|
||||
RT_TRACE(COMP_POWER_TRACKING, DBG_LOUD, ("Trigger Thermal Meter!!\n"));
|
||||
|
||||
tm_trigger = 1;
|
||||
return;
|
||||
} else {
|
||||
} else if (IS_HARDWARE_TYPE_8822C(adapter) || IS_HARDWARE_TYPE_8814B(adapter))
|
||||
return;
|
||||
else {
|
||||
RT_TRACE(COMP_POWER_TRACKING, DBG_LOUD, ("Schedule TxPowerTracking direct call!!\n"));
|
||||
odm_txpowertracking_direct_call(adapter);
|
||||
tm_trigger = 0;
|
||||
|
||||
@@ -13,8 +13,8 @@
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
#ifndef __PHYDMPOWERTRACKING_H__
|
||||
#define __PHYDMPOWERTRACKING_H__
|
||||
#ifndef __HALRF_POWERTRACKING_H__
|
||||
#define __HALRF_POWERTRACKING_H__
|
||||
|
||||
#define DPK_DELTA_MAPPING_NUM 13
|
||||
#define index_mapping_HP_NUM 15
|
||||
@@ -30,6 +30,7 @@
|
||||
#define CCK_TABLE_SIZE_88F 21
|
||||
/* JJ ADD 20161014 */
|
||||
#define CCK_TABLE_SIZE_8710B 41
|
||||
#define CCK_TABLE_SIZE_8192F 41
|
||||
|
||||
|
||||
#define dm_check_txpowertracking odm_txpowertracking_check
|
||||
@@ -56,6 +57,7 @@ extern u8 cck_swing_table_ch14_88f[CCK_TABLE_SIZE_88F][16];
|
||||
extern u32 cck_swing_table_ch1_ch14_8723d[CCK_TABLE_SIZE_8723D];
|
||||
/* JJ ADD 20161014 */
|
||||
extern u32 cck_swing_table_ch1_ch14_8710b[CCK_TABLE_SIZE_8710B];
|
||||
extern u32 cck_swing_table_ch1_ch14_8192f[CCK_TABLE_SIZE_8192F];
|
||||
|
||||
extern u32 tx_scaling_table_jaguar[TXSCALE_TABLE_SIZE];
|
||||
|
||||
@@ -223,6 +225,7 @@ struct dm_rf_calibration_struct {
|
||||
boolean modify_tx_agc_flag_path_c;
|
||||
boolean modify_tx_agc_flag_path_d;
|
||||
boolean modify_tx_agc_flag_path_a_cck;
|
||||
boolean modify_tx_agc_flag_path_b_cck;
|
||||
|
||||
s8 kfree_offset[MAX_RF_PATH];
|
||||
|
||||
@@ -296,4 +299,4 @@ struct dm_rf_calibration_struct {
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
#endif /*#ifndef __HALRF_POWER_TRACKING_H__*/
|
||||
|
||||
@@ -1,321 +1,428 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Copyright(c) 2007 - 2017 Realtek Corporation.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of version 2 of the GNU General Public License as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
* more details.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
//============================================================
|
||||
// include files
|
||||
//============================================================
|
||||
#include "mp_precomp.h"
|
||||
#include "phydm_precomp.h"
|
||||
|
||||
|
||||
#if (DM_ODM_SUPPORT_TYPE & ODM_WIN)
|
||||
|
||||
#if 0
|
||||
u32 _sqrt(u64 n)
|
||||
{
|
||||
u64 ans = 0, q = 0;
|
||||
s64 i;
|
||||
|
||||
/*for (i = sizeof(n) * 8 - 2; i > -1; i = i - 2) {*/
|
||||
for (i = 8 * 8 - 2; i > -1; i = i - 2) {
|
||||
q = (q << 2) | ((n & (3 << i)) >> i);
|
||||
if (q >= ((ans << 2) | 1))
|
||||
{
|
||||
q = q - ((ans << 2) | 1);
|
||||
ans = (ans << 1) | 1;
|
||||
}
|
||||
else
|
||||
ans = ans << 1;
|
||||
}
|
||||
DbgPrint("ans=0x%x\n", ans);
|
||||
|
||||
return (u32)ans;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
u64 _sqrt(u64 x)
|
||||
{
|
||||
u64 i = 0;
|
||||
u64 j = x / 2 + 1;
|
||||
|
||||
while (i <= j) {
|
||||
u64 mid = (i + j) / 2;
|
||||
|
||||
u64 sq = mid * mid;
|
||||
|
||||
if (sq == x)
|
||||
return mid;
|
||||
else if (sq < x)
|
||||
i = mid + 1;
|
||||
else
|
||||
j = mid - 1;
|
||||
}
|
||||
|
||||
return j;
|
||||
}
|
||||
|
||||
|
||||
|
||||
u32
|
||||
halrf_get_psd_data(
|
||||
struct dm_struct *dm,
|
||||
u32 point
|
||||
)
|
||||
{
|
||||
struct _hal_rf_ *rf = &(dm->rf_table);
|
||||
struct _halrf_psd_data *psd = &(rf->halrf_psd_data);
|
||||
u32 psd_val = 0, psd_reg, psd_report, psd_point, psd_start, i, delay_time;
|
||||
|
||||
#if (DEV_BUS_TYPE == RT_USB_INTERFACE) || (DEV_BUS_TYPE == RT_SDIO_INTERFACE)
|
||||
if (psd->average == 0)
|
||||
delay_time = 100;
|
||||
else
|
||||
delay_time = 0;
|
||||
#else
|
||||
if (psd->average == 0)
|
||||
delay_time = 1000;
|
||||
else
|
||||
delay_time = 100;
|
||||
#endif
|
||||
|
||||
if (dm->support_ic_type & (ODM_RTL8812 | ODM_RTL8821 | ODM_RTL8814A | ODM_RTL8822B | ODM_RTL8821C)) {
|
||||
psd_reg = 0x910;
|
||||
psd_report = 0xf44;
|
||||
} else {
|
||||
psd_reg = 0x808;
|
||||
psd_report = 0x8b4;
|
||||
}
|
||||
|
||||
if (dm->support_ic_type & ODM_RTL8710B) {
|
||||
psd_point = 0xeffffc00;
|
||||
psd_start = 0x10000000;
|
||||
} else {
|
||||
psd_point = 0xffbffc00;
|
||||
psd_start = 0x00400000;
|
||||
}
|
||||
|
||||
psd_val = odm_get_bb_reg(dm, psd_reg, MASKDWORD);
|
||||
|
||||
psd_val &= psd_point;
|
||||
psd_val |= point;
|
||||
|
||||
odm_set_bb_reg(dm, psd_reg, MASKDWORD, psd_val);
|
||||
|
||||
psd_val |= psd_start;
|
||||
|
||||
odm_set_bb_reg(dm, psd_reg, MASKDWORD, psd_val);
|
||||
|
||||
for (i = 0; i < delay_time; i++)
|
||||
ODM_delay_us(1);
|
||||
|
||||
psd_val = odm_get_bb_reg(dm, psd_report, MASKDWORD);
|
||||
|
||||
if (dm->support_ic_type & (ODM_RTL8821C | ODM_RTL8710B)) {
|
||||
psd_val &= MASKL3BYTES;
|
||||
psd_val = psd_val / 32;
|
||||
} else
|
||||
psd_val &= MASKLWORD;
|
||||
|
||||
return psd_val;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void
|
||||
halrf_psd(
|
||||
struct dm_struct *dm,
|
||||
u32 point,
|
||||
u32 start_point,
|
||||
u32 stop_point,
|
||||
u32 average
|
||||
)
|
||||
{
|
||||
struct _hal_rf_ *rf = &(dm->rf_table);
|
||||
struct _halrf_psd_data *psd = &(rf->halrf_psd_data);
|
||||
|
||||
u32 i = 0, j = 0, k = 0;
|
||||
u32 psd_reg, avg_org, point_temp, average_tmp;
|
||||
u64 data_tatal = 0, data_temp[64] = {0};
|
||||
|
||||
psd->buf_size = 256;
|
||||
|
||||
if (average == 0)
|
||||
average_tmp = 1;
|
||||
else
|
||||
average_tmp = average;
|
||||
|
||||
if (dm->support_ic_type & (ODM_RTL8812 | ODM_RTL8821 | ODM_RTL8814A | ODM_RTL8822B | ODM_RTL8821C))
|
||||
psd_reg = 0x910;
|
||||
else
|
||||
psd_reg = 0x808;
|
||||
|
||||
#if 0
|
||||
dbg_print("[PSD]point=%d, start_point=%d, stop_point=%d, average=%d, average_tmp=%d, buf_size=%d\n",
|
||||
point, start_point, stop_point, average, average_tmp, psd->buf_size);
|
||||
#endif
|
||||
|
||||
for (i = 0; i < psd->buf_size; i++)
|
||||
psd->psd_data[i] = 0;
|
||||
|
||||
if (dm->support_ic_type & ODM_RTL8710B)
|
||||
avg_org = odm_get_bb_reg(dm, psd_reg, 0x30000);
|
||||
else
|
||||
avg_org = odm_get_bb_reg(dm, psd_reg, 0x3000);
|
||||
|
||||
if (average != 0)
|
||||
{
|
||||
if (dm->support_ic_type & ODM_RTL8710B)
|
||||
odm_set_bb_reg(dm, psd_reg, 0x30000, 0x1);
|
||||
else
|
||||
odm_set_bb_reg(dm, psd_reg, 0x3000, 0x1);
|
||||
}
|
||||
|
||||
#if 0
|
||||
if (avg_temp == 0)
|
||||
avg = 1;
|
||||
else if (avg_temp == 1)
|
||||
avg = 8;
|
||||
else if (avg_temp == 2)
|
||||
avg = 16;
|
||||
else if (avg_temp == 3)
|
||||
avg = 32;
|
||||
#endif
|
||||
|
||||
i = start_point;
|
||||
while (i < stop_point) {
|
||||
data_tatal = 0;
|
||||
|
||||
if (i >= point)
|
||||
point_temp = i - point;
|
||||
else
|
||||
point_temp = i;
|
||||
|
||||
for (k = 0; k < average_tmp; k++) {
|
||||
data_temp[k] = halrf_get_psd_data(dm, point_temp);
|
||||
data_tatal = data_tatal + (data_temp[k] * data_temp[k]);
|
||||
|
||||
#if 0
|
||||
if ((k % 20) == 0)
|
||||
dbg_print("\n ");
|
||||
|
||||
dbg_print("0x%x ", data_temp[k]);
|
||||
#endif
|
||||
}
|
||||
/*dbg_print("\n");*/
|
||||
|
||||
data_tatal = ((data_tatal * 100) / average_tmp);
|
||||
psd->psd_data[j] = (u32)_sqrt(data_tatal);
|
||||
|
||||
i++;
|
||||
j++;
|
||||
}
|
||||
|
||||
#if 0
|
||||
for (i = 0; i < psd->buf_size; i++) {
|
||||
if ((i % 20) == 0)
|
||||
dbg_print("\n ");
|
||||
|
||||
dbg_print("0x%x ", psd->psd_data[i]);
|
||||
}
|
||||
dbg_print("\n\n");
|
||||
#endif
|
||||
|
||||
if (dm->support_ic_type & ODM_RTL8710B)
|
||||
odm_set_bb_reg(dm, psd_reg, 0x30000, avg_org);
|
||||
else
|
||||
odm_set_bb_reg(dm, psd_reg, 0x3000, avg_org);
|
||||
}
|
||||
|
||||
|
||||
|
||||
enum rt_status
|
||||
halrf_psd_init(
|
||||
struct dm_struct *dm
|
||||
)
|
||||
{
|
||||
enum rt_status ret_status = RT_STATUS_SUCCESS;
|
||||
struct _hal_rf_ *rf = &(dm->rf_table);
|
||||
struct _halrf_psd_data *psd = &(rf->halrf_psd_data);
|
||||
|
||||
if (psd->psd_progress)
|
||||
ret_status = RT_STATUS_PENDING;
|
||||
else {
|
||||
psd->psd_progress = 1;
|
||||
halrf_psd(dm, psd->point, psd->start_point, psd->stop_point, psd->average);
|
||||
psd->psd_progress = 0;
|
||||
}
|
||||
|
||||
return ret_status;
|
||||
}
|
||||
|
||||
|
||||
|
||||
enum rt_status
|
||||
halrf_psd_query(
|
||||
struct dm_struct *dm,
|
||||
u32 *outbuf,
|
||||
u32 buf_size
|
||||
)
|
||||
{
|
||||
enum rt_status ret_status = RT_STATUS_SUCCESS;
|
||||
struct _hal_rf_ *rf = &(dm->rf_table);
|
||||
struct _halrf_psd_data *psd = &(rf->halrf_psd_data);
|
||||
|
||||
if (psd->psd_progress)
|
||||
ret_status = RT_STATUS_PENDING;
|
||||
else
|
||||
PlatformMoveMemory(outbuf, psd->psd_data, 0x400);
|
||||
|
||||
return ret_status;
|
||||
}
|
||||
|
||||
|
||||
|
||||
enum rt_status
|
||||
halrf_psd_init_query(
|
||||
struct dm_struct *dm,
|
||||
u32 *outbuf,
|
||||
u32 point,
|
||||
u32 start_point,
|
||||
u32 stop_point,
|
||||
u32 average,
|
||||
u32 buf_size
|
||||
)
|
||||
{
|
||||
enum rt_status ret_status = RT_STATUS_SUCCESS;
|
||||
struct _hal_rf_ *rf = &(dm->rf_table);
|
||||
struct _halrf_psd_data *psd = &(rf->halrf_psd_data);
|
||||
|
||||
psd->point = point;
|
||||
psd->start_point = start_point;
|
||||
psd->stop_point = stop_point;
|
||||
psd->average = average;
|
||||
|
||||
if (psd->psd_progress)
|
||||
ret_status = RT_STATUS_PENDING;
|
||||
else {
|
||||
psd->psd_progress = 1;
|
||||
halrf_psd(dm, psd->point, psd->start_point, psd->stop_point, psd->average);
|
||||
PlatformMoveMemory(outbuf, psd->psd_data, 0x400);
|
||||
psd->psd_progress = 0;
|
||||
}
|
||||
|
||||
return ret_status;
|
||||
}
|
||||
|
||||
#endif /*#if (DM_ODM_SUPPORT_TYPE & ODM_WIN)*/
|
||||
|
||||
/******************************************************************************
|
||||
*
|
||||
* Copyright(c) 2007 - 2017 Realtek Corporation.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of version 2 of the GNU General Public License as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
* more details.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
/*@===========================================================
|
||||
* include files
|
||||
*============================================================
|
||||
*/
|
||||
#include "mp_precomp.h"
|
||||
#include "phydm_precomp.h"
|
||||
|
||||
#if (DM_ODM_SUPPORT_TYPE & ODM_WIN)
|
||||
|
||||
u64 _sqrt(u64 x)
|
||||
{
|
||||
u64 i = 0;
|
||||
u64 j = x / 2 + 1;
|
||||
|
||||
while (i <= j) {
|
||||
u64 mid = (i + j) / 2;
|
||||
|
||||
u64 sq = mid * mid;
|
||||
|
||||
if (sq == x)
|
||||
return mid;
|
||||
else if (sq < x)
|
||||
i = mid + 1;
|
||||
else
|
||||
j = mid - 1;
|
||||
}
|
||||
|
||||
return j;
|
||||
}
|
||||
|
||||
u32 halrf_get_psd_data(
|
||||
struct dm_struct *dm,
|
||||
u32 point)
|
||||
{
|
||||
struct _hal_rf_ *rf = &(dm->rf_table);
|
||||
struct _halrf_psd_data *psd = &(rf->halrf_psd_data);
|
||||
u32 psd_val = 0, psd_reg, psd_report, psd_point, psd_start, i, delay_time;
|
||||
|
||||
#if (DEV_BUS_TYPE == RT_USB_INTERFACE) || (DEV_BUS_TYPE == RT_SDIO_INTERFACE)
|
||||
if (dm->support_interface == ODM_ITRF_USB || dm->support_interface == ODM_ITRF_SDIO) {
|
||||
if (psd->average == 0)
|
||||
delay_time = 100;
|
||||
else
|
||||
delay_time = 0;
|
||||
}
|
||||
#endif
|
||||
#if (DEV_BUS_TYPE == RT_PCI_INTERFACE)
|
||||
if (dm->support_interface == ODM_ITRF_PCIE) {
|
||||
if (psd->average == 0)
|
||||
delay_time = 1000;
|
||||
else
|
||||
delay_time = 100;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (dm->support_ic_type & (ODM_RTL8812 | ODM_RTL8821 | ODM_RTL8814A | ODM_RTL8822B | ODM_RTL8821C)) {
|
||||
psd_reg = R_0x910;
|
||||
psd_report = R_0xf44;
|
||||
} else {
|
||||
psd_reg = R_0x808;
|
||||
psd_report = R_0x8b4;
|
||||
}
|
||||
|
||||
if (dm->support_ic_type & ODM_RTL8710B) {
|
||||
psd_point = 0xeffffc00;
|
||||
psd_start = 0x10000000;
|
||||
} else {
|
||||
psd_point = 0xffbffc00;
|
||||
psd_start = 0x00400000;
|
||||
}
|
||||
|
||||
psd_val = odm_get_bb_reg(dm, psd_reg, MASKDWORD);
|
||||
|
||||
psd_val &= psd_point;
|
||||
psd_val |= point;
|
||||
|
||||
odm_set_bb_reg(dm, psd_reg, MASKDWORD, psd_val);
|
||||
|
||||
psd_val |= psd_start;
|
||||
|
||||
odm_set_bb_reg(dm, psd_reg, MASKDWORD, psd_val);
|
||||
|
||||
for (i = 0; i < delay_time; i++)
|
||||
ODM_delay_us(1);
|
||||
|
||||
psd_val = odm_get_bb_reg(dm, psd_report, MASKDWORD);
|
||||
|
||||
if (dm->support_ic_type & (ODM_RTL8821C | ODM_RTL8710B)) {
|
||||
psd_val &= MASKL3BYTES;
|
||||
psd_val = psd_val / 32;
|
||||
} else {
|
||||
psd_val &= MASKLWORD;
|
||||
}
|
||||
|
||||
return psd_val;
|
||||
}
|
||||
|
||||
void halrf_psd(
|
||||
struct dm_struct *dm,
|
||||
u32 point,
|
||||
u32 start_point,
|
||||
u32 stop_point,
|
||||
u32 average)
|
||||
{
|
||||
struct _hal_rf_ *rf = &(dm->rf_table);
|
||||
struct _halrf_psd_data *psd = &(rf->halrf_psd_data);
|
||||
|
||||
u32 i = 0, j = 0, k = 0;
|
||||
u32 psd_reg, avg_org, point_temp, average_tmp, mode;
|
||||
u64 data_tatal = 0, data_temp[64] = {0};
|
||||
|
||||
psd->buf_size = 256;
|
||||
|
||||
mode = average >> 16;
|
||||
|
||||
if (mode == 1)
|
||||
average_tmp = average & 0xffff;
|
||||
else if (mode == 2)
|
||||
average_tmp = 1;
|
||||
|
||||
if (dm->support_ic_type & (ODM_RTL8812 | ODM_RTL8821 | ODM_RTL8814A | ODM_RTL8822B | ODM_RTL8821C))
|
||||
psd_reg = R_0x910;
|
||||
else
|
||||
psd_reg = R_0x808;
|
||||
|
||||
#if 0
|
||||
dbg_print("[PSD]point=%d, start_point=%d, stop_point=%d, average=%d, average_tmp=%d, buf_size=%d\n",
|
||||
point, start_point, stop_point, average, average_tmp, psd->buf_size);
|
||||
#endif
|
||||
|
||||
for (i = 0; i < psd->buf_size; i++)
|
||||
psd->psd_data[i] = 0;
|
||||
|
||||
if (dm->support_ic_type & ODM_RTL8710B)
|
||||
avg_org = odm_get_bb_reg(dm, psd_reg, 0x30000);
|
||||
else
|
||||
avg_org = odm_get_bb_reg(dm, psd_reg, 0x3000);
|
||||
|
||||
if (mode == 1) {
|
||||
if (dm->support_ic_type & ODM_RTL8710B)
|
||||
odm_set_bb_reg(dm, psd_reg, 0x30000, 0x1);
|
||||
else
|
||||
odm_set_bb_reg(dm, psd_reg, 0x3000, 0x1);
|
||||
}
|
||||
|
||||
#if 0
|
||||
if (avg_temp == 0)
|
||||
avg = 1;
|
||||
else if (avg_temp == 1)
|
||||
avg = 8;
|
||||
else if (avg_temp == 2)
|
||||
avg = 16;
|
||||
else if (avg_temp == 3)
|
||||
avg = 32;
|
||||
#endif
|
||||
|
||||
i = start_point;
|
||||
while (i < stop_point) {
|
||||
data_tatal = 0;
|
||||
|
||||
if (i >= point)
|
||||
point_temp = i - point;
|
||||
else
|
||||
point_temp = i;
|
||||
|
||||
for (k = 0; k < average_tmp; k++) {
|
||||
data_temp[k] = halrf_get_psd_data(dm, point_temp);
|
||||
data_tatal = data_tatal + (data_temp[k] * data_temp[k]);
|
||||
|
||||
#if 0
|
||||
if ((k % 20) == 0)
|
||||
dbg_print("\n ");
|
||||
|
||||
dbg_print("0x%x ", data_temp[k]);
|
||||
#endif
|
||||
}
|
||||
#if 0
|
||||
/*dbg_print("\n");*/
|
||||
#endif
|
||||
|
||||
data_tatal = ((data_tatal * 100) / average_tmp);
|
||||
psd->psd_data[j] = (u32)_sqrt(data_tatal);
|
||||
|
||||
i++;
|
||||
j++;
|
||||
}
|
||||
|
||||
#if 0
|
||||
for (i = 0; i < psd->buf_size; i++) {
|
||||
if ((i % 20) == 0)
|
||||
dbg_print("\n ");
|
||||
|
||||
dbg_print("0x%x ", psd->psd_data[i]);
|
||||
}
|
||||
dbg_print("\n\n");
|
||||
#endif
|
||||
|
||||
if (dm->support_ic_type & ODM_RTL8710B)
|
||||
odm_set_bb_reg(dm, psd_reg, 0x30000, avg_org);
|
||||
else
|
||||
odm_set_bb_reg(dm, psd_reg, 0x3000, avg_org);
|
||||
}
|
||||
|
||||
u32 halrf_get_iqk_psd_data(
|
||||
struct dm_struct *dm,
|
||||
u32 point)
|
||||
{
|
||||
struct _hal_rf_ *rf = &(dm->rf_table);
|
||||
struct _halrf_psd_data *psd = &(rf->halrf_psd_data);
|
||||
u32 psd_val, psd_val1, psd_val2, psd_point, i, delay_time;
|
||||
|
||||
#if (DEV_BUS_TYPE == RT_USB_INTERFACE) || (DEV_BUS_TYPE == RT_SDIO_INTERFACE)
|
||||
if (dm->support_interface == ODM_ITRF_USB || dm->support_interface == ODM_ITRF_SDIO) {
|
||||
delay_time = 0;
|
||||
}
|
||||
#endif
|
||||
#if (DEV_BUS_TYPE == RT_PCI_INTERFACE)
|
||||
if (dm->support_interface == ODM_ITRF_PCIE) {
|
||||
delay_time = 150;
|
||||
}
|
||||
#endif
|
||||
psd_point = odm_get_bb_reg(dm, R_0x1b2c, MASKDWORD);
|
||||
|
||||
psd_point &= 0xF000FFFF;
|
||||
|
||||
point &= 0xFFF;
|
||||
|
||||
psd_point = psd_point | (point << 16);
|
||||
|
||||
odm_set_bb_reg(dm, R_0x1b2c, MASKDWORD, psd_point);
|
||||
|
||||
odm_set_bb_reg(dm, R_0x1b34, MASKDWORD, 0x1);
|
||||
|
||||
odm_set_bb_reg(dm, R_0x1b34, MASKDWORD, 0x0);
|
||||
|
||||
for (i = 0; i < delay_time; i++)
|
||||
ODM_delay_us(1);
|
||||
|
||||
odm_set_bb_reg(dm, R_0x1bd4, MASKDWORD, 0x00250001);
|
||||
|
||||
psd_val1 = odm_get_bb_reg(dm, R_0x1bfc, MASKDWORD);
|
||||
|
||||
psd_val1 = (psd_val1 & 0x07FF0000) >> 16;
|
||||
|
||||
odm_set_bb_reg(dm, R_0x1bd4, MASKDWORD, 0x002e0001);
|
||||
|
||||
psd_val2 = odm_get_bb_reg(dm, R_0x1bfc, MASKDWORD);
|
||||
|
||||
psd_val = (psd_val1 << 21) + (psd_val2 >> 11);
|
||||
|
||||
return psd_val;
|
||||
}
|
||||
|
||||
void halrf_iqk_psd(
|
||||
struct dm_struct *dm,
|
||||
u32 point,
|
||||
u32 start_point,
|
||||
u32 stop_point,
|
||||
u32 average)
|
||||
{
|
||||
struct _hal_rf_ *rf = &(dm->rf_table);
|
||||
struct _halrf_psd_data *psd = &(rf->halrf_psd_data);
|
||||
|
||||
u32 i = 0, j = 0, k = 0;
|
||||
u32 psd_reg, avg_org, point_temp, average_tmp, mode;
|
||||
u64 data_tatal = 0, data_temp[64] = {0};
|
||||
s32 point_8814B;
|
||||
|
||||
psd->buf_size = 256;
|
||||
|
||||
mode = average >> 16;
|
||||
|
||||
if (mode == 1)
|
||||
average_tmp = average & 0xffff;
|
||||
else if (mode == 2) {
|
||||
if (dm->support_ic_type & ODM_RTL8814B)
|
||||
average_tmp = average & 0xffff;
|
||||
else
|
||||
average_tmp = 1;
|
||||
}
|
||||
#if 0
|
||||
DbgPrint("[PSD]point=%d, start_point=%d, stop_point=%d, average=0x%x, average_tmp=%d, buf_size=%d, mode=%d\n",
|
||||
point, start_point, stop_point, average, average_tmp, psd->buf_size, mode);
|
||||
#endif
|
||||
|
||||
for (i = 0; i < psd->buf_size; i++)
|
||||
psd->psd_data[i] = 0;
|
||||
|
||||
i = start_point;
|
||||
while (i < stop_point) {
|
||||
data_tatal = 0;
|
||||
|
||||
if (i >= point)
|
||||
point_temp = i - point;
|
||||
else
|
||||
{
|
||||
if (dm->support_ic_type & ODM_RTL8814B)
|
||||
{
|
||||
point_8814B = i -point -1;
|
||||
point_temp = point_8814B & 0xfff;
|
||||
}
|
||||
else
|
||||
point_temp = i;
|
||||
}
|
||||
|
||||
for (k = 0; k < average_tmp; k++) {
|
||||
data_temp[k] = halrf_get_iqk_psd_data(dm, point_temp);
|
||||
/*data_tatal = data_tatal + (data_temp[k] * data_temp[k]);*/
|
||||
data_tatal = data_tatal + data_temp[k];
|
||||
|
||||
#if 0
|
||||
if ((k % 20) == 0)
|
||||
DbgPrint("\n ");
|
||||
|
||||
DbgPrint("0x%x ", data_temp[k]);
|
||||
#endif
|
||||
}
|
||||
|
||||
/*data_tatal = ((data_tatal * 100) / average_tmp);*/
|
||||
/*psd->psd_data[j] = (u32)_sqrt(data_tatal);*/
|
||||
|
||||
psd->psd_data[j] = (u32)((data_tatal * 10) / average_tmp);
|
||||
|
||||
i++;
|
||||
j++;
|
||||
}
|
||||
|
||||
#if 0
|
||||
DbgPrint("\n [iqk psd]psd result:\n");
|
||||
|
||||
for (i = 0; i < psd->buf_size; i++) {
|
||||
if ((i % 20) == 0)
|
||||
DbgPrint("\n ");
|
||||
|
||||
DbgPrint("0x%x ", psd->psd_data[i]);
|
||||
}
|
||||
DbgPrint("\n\n");
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
enum rt_status
|
||||
halrf_psd_init(
|
||||
struct dm_struct *dm)
|
||||
{
|
||||
enum rt_status ret_status = RT_STATUS_SUCCESS;
|
||||
struct _hal_rf_ *rf = &(dm->rf_table);
|
||||
struct _halrf_psd_data *psd = &(rf->halrf_psd_data);
|
||||
|
||||
if (psd->psd_progress) {
|
||||
ret_status = RT_STATUS_PENDING;
|
||||
} else {
|
||||
psd->psd_progress = 1;
|
||||
if (dm->support_ic_type & (ODM_RTL8822C | ODM_RTL8814B))
|
||||
halrf_iqk_psd(dm, psd->point, psd->start_point, psd->stop_point, psd->average);
|
||||
else
|
||||
halrf_psd(dm, psd->point, psd->start_point, psd->stop_point, psd->average);
|
||||
psd->psd_progress = 0;
|
||||
}
|
||||
|
||||
return ret_status;
|
||||
}
|
||||
|
||||
enum rt_status
|
||||
halrf_psd_query(
|
||||
struct dm_struct *dm,
|
||||
u32 *outbuf,
|
||||
u32 buf_size)
|
||||
{
|
||||
enum rt_status ret_status = RT_STATUS_SUCCESS;
|
||||
struct _hal_rf_ *rf = &(dm->rf_table);
|
||||
struct _halrf_psd_data *psd = &(rf->halrf_psd_data);
|
||||
|
||||
if (psd->psd_progress)
|
||||
ret_status = RT_STATUS_PENDING;
|
||||
else
|
||||
PlatformMoveMemory(outbuf, psd->psd_data, 0x400);
|
||||
|
||||
return ret_status;
|
||||
}
|
||||
|
||||
enum rt_status
|
||||
halrf_psd_init_query(
|
||||
struct dm_struct *dm,
|
||||
u32 *outbuf,
|
||||
u32 point,
|
||||
u32 start_point,
|
||||
u32 stop_point,
|
||||
u32 average,
|
||||
u32 buf_size)
|
||||
{
|
||||
enum rt_status ret_status = RT_STATUS_SUCCESS;
|
||||
struct _hal_rf_ *rf = &(dm->rf_table);
|
||||
struct _halrf_psd_data *psd = &(rf->halrf_psd_data);
|
||||
|
||||
psd->point = point;
|
||||
psd->start_point = start_point;
|
||||
psd->stop_point = stop_point;
|
||||
psd->average = average;
|
||||
|
||||
if (psd->psd_progress) {
|
||||
ret_status = RT_STATUS_PENDING;
|
||||
} else {
|
||||
psd->psd_progress = 1;
|
||||
halrf_psd(dm, psd->point, psd->start_point, psd->stop_point, psd->average);
|
||||
PlatformMoveMemory(outbuf, psd->psd_data, 0x400);
|
||||
psd->psd_progress = 0;
|
||||
}
|
||||
|
||||
return ret_status;
|
||||
}
|
||||
|
||||
#endif /*#if (DM_ODM_SUPPORT_TYPE & ODM_WIN)*/
|
||||
|
||||
@@ -1,60 +1,52 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Copyright(c) 2007 - 2017 Realtek Corporation.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of version 2 of the GNU General Public License as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
* more details.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
#ifndef __HALRF_PSD_H__
|
||||
#define __HALRF_PSD_H__
|
||||
|
||||
#if (DM_ODM_SUPPORT_TYPE & ODM_WIN)
|
||||
|
||||
struct _halrf_psd_data {
|
||||
u32 point;
|
||||
u32 start_point;
|
||||
u32 stop_point;
|
||||
u32 average;
|
||||
u32 buf_size;
|
||||
u32 psd_data[256];
|
||||
u32 psd_progress;
|
||||
};
|
||||
|
||||
|
||||
|
||||
enum rt_status
|
||||
halrf_psd_init (
|
||||
struct dm_struct *dm
|
||||
);
|
||||
|
||||
|
||||
|
||||
enum rt_status
|
||||
halrf_psd_query (
|
||||
struct dm_struct *dm,
|
||||
u32 *outbuf,
|
||||
u32 buf_size
|
||||
);
|
||||
|
||||
enum rt_status
|
||||
halrf_psd_init_query(
|
||||
struct dm_struct *dm,
|
||||
u32 *outbuf,
|
||||
u32 point,
|
||||
u32 start_point,
|
||||
u32 stop_point,
|
||||
u32 average,
|
||||
u32 buf_size
|
||||
);
|
||||
|
||||
#endif /*#if (DM_ODM_SUPPORT_TYPE & ODM_WIN)*/
|
||||
#endif /*#ifndef __HALRF_PSD_H__*/
|
||||
|
||||
/******************************************************************************
|
||||
*
|
||||
* Copyright(c) 2007 - 2017 Realtek Corporation.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of version 2 of the GNU General Public License as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
* more details.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
#ifndef __HALRF_PSD_H__
|
||||
#define __HALRF_PSD_H__
|
||||
|
||||
#if (DM_ODM_SUPPORT_TYPE & ODM_WIN)
|
||||
|
||||
struct _halrf_psd_data {
|
||||
u32 point;
|
||||
u32 start_point;
|
||||
u32 stop_point;
|
||||
u32 average;
|
||||
u32 buf_size;
|
||||
u32 psd_data[256];
|
||||
u32 psd_progress;
|
||||
};
|
||||
|
||||
enum rt_status
|
||||
halrf_psd_init(
|
||||
struct dm_struct *dm);
|
||||
|
||||
enum rt_status
|
||||
halrf_psd_query(
|
||||
struct dm_struct *dm,
|
||||
u32 *outbuf,
|
||||
u32 buf_size);
|
||||
|
||||
enum rt_status
|
||||
halrf_psd_init_query(
|
||||
struct dm_struct *dm,
|
||||
u32 *outbuf,
|
||||
u32 point,
|
||||
u32 start_point,
|
||||
u32 stop_point,
|
||||
u32 average,
|
||||
u32 buf_size);
|
||||
|
||||
#endif /*#if (DM_ODM_SUPPORT_TYPE & ODM_WIN)*/
|
||||
#endif /*#__HALRF_PSD_H__*/
|
||||
|
||||
@@ -22,282 +22,279 @@
|
||||
* Larry Finger <Larry.Finger@lwfinger.net>
|
||||
*
|
||||
*****************************************************************************/
|
||||
#include "mp_precomp.h"
|
||||
#include "phydm_precomp.h"
|
||||
|
||||
|
||||
|
||||
void odm_bub_sort(pu4Byte data, u4Byte n)
|
||||
{
|
||||
int i, j, temp, sp;
|
||||
|
||||
for (i = n - 1;i >= 0;i--) {
|
||||
sp = 1;
|
||||
for (j = 0;j < i;j++) {
|
||||
if (data[j] < data[j + 1]) {
|
||||
temp = data[j];
|
||||
data[j] = data[j + 1];
|
||||
data[j + 1] = temp;
|
||||
sp = 0;
|
||||
}
|
||||
}
|
||||
if (sp == 1)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#if (RTL8197F_SUPPORT == 1)
|
||||
|
||||
u4Byte
|
||||
odm_tx_gain_gap_psd_8197f(
|
||||
void *dm_void,
|
||||
u1Byte rf_path,
|
||||
u4Byte rf56
|
||||
)
|
||||
{
|
||||
PDM_ODM_T dm = (PDM_ODM_T)dm_void;
|
||||
|
||||
u1Byte i, j;
|
||||
u4Byte psd_vaule[5], psd_avg_time = 5, psd_vaule_temp;
|
||||
|
||||
u4Byte iqk_ctl_addr[2][6] = {{0xe30, 0xe34, 0xe50, 0xe54, 0xe38, 0xe3c},
|
||||
{0xe50, 0xe54, 0xe30, 0xe34, 0xe58, 0xe5c}};
|
||||
|
||||
u4Byte psd_finish_bit[2] = {0x04000000, 0x20000000};
|
||||
u4Byte psd_fail_bit[2] = {0x08000000, 0x40000000};
|
||||
|
||||
u4Byte psd_cntl_value[2][2] = {{0x38008c1c, 0x10008c1c},
|
||||
{0x38008c2c, 0x10008c2c}};
|
||||
|
||||
u4Byte psd_report_addr[2] = {0xea0, 0xec0};
|
||||
|
||||
odm_set_rf_reg(dm, rf_path, 0xdf, bRFRegOffsetMask, 0x00e02);
|
||||
|
||||
ODM_delay_us(100);
|
||||
|
||||
odm_set_bb_reg(dm, 0xe28, 0xffffffff, 0x0);
|
||||
|
||||
odm_set_rf_reg(dm, rf_path, 0x56, 0xfff, rf56);
|
||||
while(rf56 != (odm_get_rf_reg(dm, rf_path, 0x56, 0xfff)))
|
||||
odm_set_rf_reg(dm, rf_path, 0x56, 0xfff, rf56);
|
||||
|
||||
odm_set_bb_reg(dm, 0xd94, 0xffffffff, 0x44FFBB44);
|
||||
odm_set_bb_reg(dm, 0xe70, 0xffffffff, 0x00400040);
|
||||
odm_set_bb_reg(dm, 0xc04, 0xffffffff, 0x6f005403);
|
||||
odm_set_bb_reg(dm, 0xc08, 0xffffffff, 0x000804e4);
|
||||
odm_set_bb_reg(dm, 0x874, 0xffffffff, 0x04203400);
|
||||
odm_set_bb_reg(dm, 0xe28, 0xffffffff, 0x80800000);
|
||||
|
||||
odm_set_bb_reg(dm, iqk_ctl_addr[rf_path][0], 0xffffffff, psd_cntl_value[rf_path][0]);
|
||||
odm_set_bb_reg(dm, iqk_ctl_addr[rf_path][1], 0xffffffff, psd_cntl_value[rf_path][1]);
|
||||
odm_set_bb_reg(dm, iqk_ctl_addr[rf_path][2], 0xffffffff, psd_cntl_value[rf_path][0]);
|
||||
odm_set_bb_reg(dm, iqk_ctl_addr[rf_path][3], 0xffffffff, psd_cntl_value[rf_path][0]);
|
||||
odm_set_bb_reg(dm, iqk_ctl_addr[rf_path][4], 0xffffffff, 0x8215001F);
|
||||
odm_set_bb_reg(dm, iqk_ctl_addr[rf_path][5], 0xffffffff, 0x2805001F);
|
||||
|
||||
odm_set_bb_reg(dm, 0xe40, 0xffffffff, 0x81007C00);
|
||||
odm_set_bb_reg(dm, 0xe44, 0xffffffff, 0x81004800);
|
||||
odm_set_bb_reg(dm, 0xe4c, 0xffffffff, 0x0046a8d0);
|
||||
|
||||
|
||||
for (i = 0; i < psd_avg_time; i++) {
|
||||
|
||||
for(j = 0; j < 1000 ; j++) {
|
||||
odm_set_bb_reg(dm, 0xe48, 0xffffffff, 0xfa005800);
|
||||
odm_set_bb_reg(dm, 0xe48, 0xffffffff, 0xf8005800);
|
||||
|
||||
while(!odm_get_bb_reg(dm, 0xeac, psd_finish_bit[rf_path])); /*wait finish bit*/
|
||||
|
||||
if (!odm_get_bb_reg(dm, 0xeac, psd_fail_bit[rf_path])) { /*check fail bit*/
|
||||
|
||||
psd_vaule[i] = odm_get_bb_reg(dm, psd_report_addr[rf_path], 0xffffffff);
|
||||
|
||||
if (psd_vaule[i] > 0xffff)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
PHYDM_DBG(dm, ODM_COMP_CALIBRATION,"[TGGC] rf0=0x%x rf56=0x%x rf56_reg=0x%x time=%d psd_vaule=0x%x\n",
|
||||
odm_get_rf_reg(dm, rf_path, 0x0, 0xff),
|
||||
rf56, odm_get_rf_reg(dm, rf_path, 0x56, 0xfff), j, psd_vaule[i]);
|
||||
}
|
||||
|
||||
odm_bub_sort(psd_vaule, psd_avg_time);
|
||||
|
||||
psd_vaule_temp = psd_vaule[(UINT)(psd_avg_time / 2)];
|
||||
|
||||
odm_set_bb_reg(dm, 0xd94, 0xffffffff, 0x44BBBB44);
|
||||
odm_set_bb_reg(dm, 0xe70, 0xffffffff, 0x80408040);
|
||||
odm_set_bb_reg(dm, 0xc04, 0xffffffff, 0x6f005433);
|
||||
odm_set_bb_reg(dm, 0xc08, 0xffffffff, 0x000004e4);
|
||||
odm_set_bb_reg(dm, 0x874, 0xffffffff, 0x04003400);
|
||||
odm_set_bb_reg(dm, 0xe28, 0xffffffff, 0x00000000);
|
||||
|
||||
PHYDM_DBG(dm, ODM_COMP_CALIBRATION,"[TGGC] rf0=0x%x rf56=0x%x rf56_reg=0x%x psd_vaule_temp=0x%x\n",
|
||||
odm_get_rf_reg(dm, rf_path, 0x0, 0xff),
|
||||
rf56, odm_get_rf_reg(dm, rf_path, 0x56, 0xfff), psd_vaule_temp);
|
||||
|
||||
odm_set_rf_reg(dm, rf_path, 0xdf, bRFRegOffsetMask, 0x00602);
|
||||
|
||||
return psd_vaule_temp;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
void
|
||||
odm_tx_gain_gap_calibration_8197f(
|
||||
void *dm_void
|
||||
)
|
||||
{
|
||||
PDM_ODM_T dm = (PDM_ODM_T)dm_void;
|
||||
|
||||
u1Byte rf_path, rf0_idx, rf0_idx_current, rf0_idx_next, i, delta_gain_retry = 3;
|
||||
|
||||
s1Byte delta_gain_gap_pre, delta_gain_gap[2][11];
|
||||
u4Byte rf56_current, rf56_next, psd_value_current, psd_value_next;
|
||||
u4Byte psd_gap, rf56_current_temp[2][11];
|
||||
s4Byte rf33[2][11];
|
||||
|
||||
memset(rf33, 0x0, sizeof(rf33));
|
||||
|
||||
for (rf_path = RF_PATH_A; rf_path <= RF_PATH_B; rf_path++) {
|
||||
|
||||
if (rf_path == RF_PATH_A)
|
||||
odm_set_bb_reg(dm, 0x88c, (BIT(21) | BIT(20)), 0x3); /*disable 3-wire*/
|
||||
else if (rf_path == RF_PATH_B)
|
||||
odm_set_bb_reg(dm, 0x88c, (BIT(23) | BIT(22)), 0x3); /*disable 3-wire*/
|
||||
|
||||
ODM_delay_us(100);
|
||||
|
||||
for (rf0_idx = 1; rf0_idx <= 10; rf0_idx++) {
|
||||
|
||||
rf0_idx_current = 3 * (rf0_idx - 1) + 1;
|
||||
odm_set_rf_reg(dm, rf_path, 0x0, 0xff, rf0_idx_current);
|
||||
ODM_delay_us(100);
|
||||
rf56_current_temp[rf_path][rf0_idx] = odm_get_rf_reg(dm, rf_path, 0x56, 0xfff);
|
||||
rf56_current = rf56_current_temp[rf_path][rf0_idx];
|
||||
|
||||
rf0_idx_next = 3 * rf0_idx + 1;
|
||||
odm_set_rf_reg(dm, rf_path, 0x0, 0xff, rf0_idx_next);
|
||||
ODM_delay_us(100);
|
||||
rf56_next= odm_get_rf_reg(dm, rf_path, 0x56, 0xfff);
|
||||
|
||||
PHYDM_DBG(dm, ODM_COMP_CALIBRATION,"[TGGC] rf56_current[%d][%d]=0x%x rf56_next[%d][%d]=0x%x\n",
|
||||
rf_path, rf0_idx, rf56_current, rf_path, rf0_idx, rf56_next);
|
||||
|
||||
if ((rf56_current >> 5) == (rf56_next >> 5)) {
|
||||
delta_gain_gap[rf_path][rf0_idx] = 0;
|
||||
|
||||
PHYDM_DBG(dm, ODM_COMP_CALIBRATION,"[TGGC] rf56_current[11:5] == rf56_next[%d][%d][11:5]=0x%x delta_gain_gap[%d][%d]=%d\n",
|
||||
rf_path, rf0_idx, (rf56_next >> 5), rf_path, rf0_idx, delta_gain_gap[rf_path][rf0_idx]);
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
PHYDM_DBG(dm, ODM_COMP_CALIBRATION,"[TGGC] rf56_current[%d][%d][11:5]=0x%x != rf56_next[%d][%d][11:5]=0x%x\n",
|
||||
rf_path, rf0_idx, (rf56_current >> 5), rf_path, rf0_idx, (rf56_next >> 5));
|
||||
|
||||
for (i = 0; i < delta_gain_retry; i++) {
|
||||
psd_value_current = odm_tx_gain_gap_psd_8197f(dm, rf_path, rf56_current);
|
||||
|
||||
psd_value_next = odm_tx_gain_gap_psd_8197f(dm, rf_path, rf56_next - 2);
|
||||
|
||||
psd_gap = psd_value_next / (psd_value_current / 1000);
|
||||
|
||||
#if 0
|
||||
if (psd_gap > 1413)
|
||||
delta_gain_gap[rf_path][rf0_idx] = 1;
|
||||
else if (psd_gap > 1122)
|
||||
delta_gain_gap[rf_path][rf0_idx] = 0;
|
||||
else
|
||||
delta_gain_gap[rf_path][rf0_idx] = -1;
|
||||
#endif
|
||||
|
||||
if (psd_gap > 1445)
|
||||
delta_gain_gap[rf_path][rf0_idx] = 1;
|
||||
else if (psd_gap > 1096)
|
||||
delta_gain_gap[rf_path][rf0_idx] = 0;
|
||||
else
|
||||
delta_gain_gap[rf_path][rf0_idx] = -1;
|
||||
|
||||
if (i == 0)
|
||||
delta_gain_gap_pre = delta_gain_gap[rf_path][rf0_idx];
|
||||
|
||||
PHYDM_DBG(dm, ODM_COMP_CALIBRATION,"[TGGC] psd_value_current=0x%x psd_value_next=0x%x psd_value_next/psd_value_current=%d delta_gain_gap[%d][%d]=%d\n",
|
||||
psd_value_current, psd_value_next, psd_gap, rf_path, rf0_idx, delta_gain_gap[rf_path][rf0_idx]);
|
||||
|
||||
if ((i == 0) && (delta_gain_gap[rf_path][rf0_idx] == 0))
|
||||
break;
|
||||
|
||||
if (delta_gain_gap_pre != delta_gain_gap[rf_path][rf0_idx]) {
|
||||
delta_gain_gap[rf_path][rf0_idx] = 0;
|
||||
|
||||
PHYDM_DBG(dm, ODM_COMP_CALIBRATION,"[TGGC] delta_gain_gap_pre(%d) != delta_gain_gap[%d][%d](%d) time=%d\n",
|
||||
delta_gain_gap_pre, rf_path, rf0_idx, delta_gain_gap[rf_path][rf0_idx], i);
|
||||
|
||||
break;
|
||||
} else {
|
||||
PHYDM_DBG(dm, ODM_COMP_CALIBRATION,"[TGGC] delta_gain_gap_pre(%d) == delta_gain_gap[%d][%d](%d) time=%d\n",
|
||||
delta_gain_gap_pre, rf_path, rf0_idx, delta_gain_gap[rf_path][rf0_idx], i);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (rf_path == RF_PATH_A)
|
||||
odm_set_bb_reg(dm, 0x88c, (BIT(21) | BIT(20)), 0x0); /*enable 3-wire*/
|
||||
else if (rf_path == RF_PATH_B)
|
||||
odm_set_bb_reg(dm, 0x88c, (BIT(23) | BIT(22)), 0x0); /*enable 3-wire*/
|
||||
|
||||
ODM_delay_us(100);
|
||||
|
||||
}
|
||||
|
||||
/*odm_set_bb_reg(dm, 0x88c, (BIT(23) | BIT(22) | BIT(21) | BIT(20)), 0x0);*/ /*enable 3-wire*/
|
||||
|
||||
for (rf_path = RF_PATH_A; rf_path <= RF_PATH_B; rf_path++) {
|
||||
|
||||
odm_set_rf_reg(dm, rf_path, 0xef, bRFRegOffsetMask, 0x00100);
|
||||
|
||||
for (rf0_idx = 1; rf0_idx <= 10; rf0_idx++) {
|
||||
|
||||
rf33[rf_path][rf0_idx] = rf33[rf_path][rf0_idx] + (rf56_current_temp[rf_path][rf0_idx] & 0x1f);
|
||||
|
||||
for (i = rf0_idx; i <= 10; i++)
|
||||
rf33[rf_path][rf0_idx] = rf33[rf_path][rf0_idx] + delta_gain_gap[rf_path][i];
|
||||
|
||||
if (rf33[rf_path][rf0_idx] >= 0x1d)
|
||||
rf33[rf_path][rf0_idx] = 0x1d;
|
||||
else if (rf33[rf_path][rf0_idx] <= 0x2)
|
||||
rf33[rf_path][rf0_idx] = 0x2;
|
||||
|
||||
rf33[rf_path][rf0_idx] = rf33[rf_path][rf0_idx] + ((rf0_idx - 1) * 0x4000) + (rf56_current_temp[rf_path][rf0_idx] & 0xfffe0);
|
||||
|
||||
PHYDM_DBG(dm, ODM_COMP_CALIBRATION,"[TGGC] rf56[%d][%d]=0x%05x rf33[%d][%d]=0x%05x\n", rf_path, rf0_idx, rf56_current_temp[rf_path][rf0_idx], rf_path, rf0_idx, rf33[rf_path][rf0_idx]);
|
||||
|
||||
odm_set_rf_reg(dm, rf_path, 0x33, bRFRegOffsetMask, rf33[rf_path][rf0_idx]);
|
||||
}
|
||||
|
||||
odm_set_rf_reg(dm, rf_path, 0xef, bRFRegOffsetMask, 0x00000);
|
||||
}
|
||||
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
void
|
||||
odm_tx_gain_gap_calibration(
|
||||
void *dm_void
|
||||
)
|
||||
{
|
||||
PDM_ODM_T dm = (PDM_ODM_T)dm_void;
|
||||
|
||||
#if (RTL8197F_SUPPORT == 1)
|
||||
if (dm->SupportICType & ODM_RTL8197F)
|
||||
odm_tx_gain_gap_calibration_8197f(dm_void);
|
||||
#endif
|
||||
|
||||
}
|
||||
#include "mp_precomp.h"
|
||||
#include "phydm_precomp.h"
|
||||
|
||||
void odm_bub_sort(u32 *data, u32 n)
|
||||
{
|
||||
int i, j, temp, sp;
|
||||
|
||||
for (i = n - 1; i >= 0; i--) {
|
||||
sp = 1;
|
||||
for (j = 0; j < i; j++) {
|
||||
if (data[j] < data[j + 1]) {
|
||||
temp = data[j];
|
||||
data[j] = data[j + 1];
|
||||
data[j + 1] = temp;
|
||||
sp = 0;
|
||||
}
|
||||
}
|
||||
if (sp == 1)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
#if (RTL8197F_SUPPORT == 1)
|
||||
|
||||
u4Byte
|
||||
odm_tx_gain_gap_psd_8197f(
|
||||
void *dm_void,
|
||||
u1Byte rf_path,
|
||||
u4Byte rf56)
|
||||
{
|
||||
PDM_ODM_T dm = (PDM_ODM_T)dm_void;
|
||||
|
||||
u1Byte i, j;
|
||||
u4Byte psd_vaule[5], psd_avg_time = 5, psd_vaule_temp;
|
||||
|
||||
u4Byte iqk_ctl_addr[2][6] = {{0xe30, 0xe34, 0xe50, 0xe54, 0xe38, 0xe3c},
|
||||
{0xe50, 0xe54, 0xe30, 0xe34, 0xe58, 0xe5c}};
|
||||
|
||||
u4Byte psd_finish_bit[2] = {0x04000000, 0x20000000};
|
||||
u4Byte psd_fail_bit[2] = {0x08000000, 0x40000000};
|
||||
|
||||
u4Byte psd_cntl_value[2][2] = {{0x38008c1c, 0x10008c1c},
|
||||
{0x38008c2c, 0x10008c2c}};
|
||||
|
||||
u4Byte psd_report_addr[2] = {0xea0, 0xec0};
|
||||
|
||||
odm_set_rf_reg(dm, rf_path, RF_0xdf, bRFRegOffsetMask, 0x00e02);
|
||||
|
||||
ODM_delay_us(100);
|
||||
|
||||
odm_set_bb_reg(dm, R_0xe28, 0xffffffff, 0x0);
|
||||
|
||||
odm_set_rf_reg(dm, rf_path, RF_0x56, 0xfff, rf56);
|
||||
while (rf56 != (odm_get_rf_reg(dm, rf_path, RF_0x56, 0xfff)))
|
||||
odm_set_rf_reg(dm, rf_path, RF_0x56, 0xfff, rf56);
|
||||
|
||||
odm_set_bb_reg(dm, R_0xd94, 0xffffffff, 0x44FFBB44);
|
||||
odm_set_bb_reg(dm, R_0xe70, 0xffffffff, 0x00400040);
|
||||
odm_set_bb_reg(dm, R_0xc04, 0xffffffff, 0x6f005403);
|
||||
odm_set_bb_reg(dm, R_0xc08, 0xffffffff, 0x000804e4);
|
||||
odm_set_bb_reg(dm, R_0x874, 0xffffffff, 0x04203400);
|
||||
odm_set_bb_reg(dm, R_0xe28, 0xffffffff, 0x80800000);
|
||||
|
||||
odm_set_bb_reg(dm, iqk_ctl_addr[rf_path][0], 0xffffffff, psd_cntl_value[rf_path][0]);
|
||||
odm_set_bb_reg(dm, iqk_ctl_addr[rf_path][1], 0xffffffff, psd_cntl_value[rf_path][1]);
|
||||
odm_set_bb_reg(dm, iqk_ctl_addr[rf_path][2], 0xffffffff, psd_cntl_value[rf_path][0]);
|
||||
odm_set_bb_reg(dm, iqk_ctl_addr[rf_path][3], 0xffffffff, psd_cntl_value[rf_path][0]);
|
||||
odm_set_bb_reg(dm, iqk_ctl_addr[rf_path][4], 0xffffffff, 0x8215001F);
|
||||
odm_set_bb_reg(dm, iqk_ctl_addr[rf_path][5], 0xffffffff, 0x2805001F);
|
||||
|
||||
odm_set_bb_reg(dm, R_0xe40, 0xffffffff, 0x81007C00);
|
||||
odm_set_bb_reg(dm, R_0xe44, 0xffffffff, 0x81004800);
|
||||
odm_set_bb_reg(dm, R_0xe4c, 0xffffffff, 0x0046a8d0);
|
||||
|
||||
for (i = 0; i < psd_avg_time; i++) {
|
||||
for (j = 0; j < 1000; j++) {
|
||||
odm_set_bb_reg(dm, R_0xe48, 0xffffffff, 0xfa005800);
|
||||
odm_set_bb_reg(dm, R_0xe48, 0xffffffff, 0xf8005800);
|
||||
|
||||
while (!odm_get_bb_reg(dm, R_0xeac, psd_finish_bit[rf_path]))
|
||||
; /*wait finish bit*/
|
||||
|
||||
if (!odm_get_bb_reg(dm, R_0xeac, psd_fail_bit[rf_path])) { /*check fail bit*/
|
||||
|
||||
psd_vaule[i] = odm_get_bb_reg(dm, psd_report_addr[rf_path], 0xffffffff);
|
||||
|
||||
if (psd_vaule[i] > 0xffff)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
RF_DBG(dm, DBG_RF_IQK,
|
||||
"[TGGC] rf0=0x%x rf56=0x%x rf56_reg=0x%x time=%d psd_vaule=0x%x\n",
|
||||
odm_get_rf_reg(dm, rf_path, RF_0x0, 0xff), rf56,
|
||||
odm_get_rf_reg(dm, rf_path, RF_0x56, 0xfff), j,
|
||||
psd_vaule[i]);
|
||||
}
|
||||
|
||||
odm_bub_sort(psd_vaule, psd_avg_time);
|
||||
|
||||
psd_vaule_temp = psd_vaule[(UINT)(psd_avg_time / 2)];
|
||||
|
||||
odm_set_bb_reg(dm, R_0xd94, 0xffffffff, 0x44BBBB44);
|
||||
odm_set_bb_reg(dm, R_0xe70, 0xffffffff, 0x80408040);
|
||||
odm_set_bb_reg(dm, R_0xc04, 0xffffffff, 0x6f005433);
|
||||
odm_set_bb_reg(dm, R_0xc08, 0xffffffff, 0x000004e4);
|
||||
odm_set_bb_reg(dm, R_0x874, 0xffffffff, 0x04003400);
|
||||
odm_set_bb_reg(dm, R_0xe28, 0xffffffff, 0x00000000);
|
||||
|
||||
RF_DBG(dm, DBG_RF_IQK,
|
||||
"[TGGC] rf0=0x%x rf56=0x%x rf56_reg=0x%x psd_vaule_temp=0x%x\n",
|
||||
odm_get_rf_reg(dm, rf_path, RF_0x0, 0xff), rf56,
|
||||
odm_get_rf_reg(dm, rf_path, RF_0x56, 0xfff), psd_vaule_temp);
|
||||
|
||||
odm_set_rf_reg(dm, rf_path, RF_0xdf, bRFRegOffsetMask, 0x00602);
|
||||
|
||||
return psd_vaule_temp;
|
||||
}
|
||||
|
||||
void odm_tx_gain_gap_calibration_8197f(
|
||||
void *dm_void)
|
||||
{
|
||||
PDM_ODM_T dm = (PDM_ODM_T)dm_void;
|
||||
|
||||
u1Byte rf_path, rf0_idx, rf0_idx_current, rf0_idx_next, i, delta_gain_retry = 3;
|
||||
|
||||
s1Byte delta_gain_gap_pre, delta_gain_gap[2][11];
|
||||
u4Byte rf56_current, rf56_next, psd_value_current, psd_value_next;
|
||||
u4Byte psd_gap, rf56_current_temp[2][11];
|
||||
s4Byte rf33[2][11];
|
||||
|
||||
memset(rf33, 0x0, sizeof(rf33));
|
||||
|
||||
for (rf_path = RF_PATH_A; rf_path <= RF_PATH_B; rf_path++) {
|
||||
if (rf_path == RF_PATH_A)
|
||||
odm_set_bb_reg(dm, R_0x88c, (BIT(21) | BIT(20)), 0x3); /*disable 3-wire*/
|
||||
else if (rf_path == RF_PATH_B)
|
||||
odm_set_bb_reg(dm, R_0x88c, (BIT(23) | BIT(22)), 0x3); /*disable 3-wire*/
|
||||
|
||||
ODM_delay_us(100);
|
||||
|
||||
for (rf0_idx = 1; rf0_idx <= 10; rf0_idx++) {
|
||||
rf0_idx_current = 3 * (rf0_idx - 1) + 1;
|
||||
odm_set_rf_reg(dm, rf_path, RF_0x0, 0xff, rf0_idx_current);
|
||||
ODM_delay_us(100);
|
||||
rf56_current_temp[rf_path][rf0_idx] = odm_get_rf_reg(dm, rf_path, RF_0x56, 0xfff);
|
||||
rf56_current = rf56_current_temp[rf_path][rf0_idx];
|
||||
|
||||
rf0_idx_next = 3 * rf0_idx + 1;
|
||||
odm_set_rf_reg(dm, rf_path, RF_0x0, 0xff, rf0_idx_next);
|
||||
ODM_delay_us(100);
|
||||
rf56_next = odm_get_rf_reg(dm, rf_path, RF_0x56, 0xfff);
|
||||
|
||||
RF_DBG(dm, DBG_RF_IQK,
|
||||
"[TGGC] rf56_current[%d][%d]=0x%x rf56_next[%d][%d]=0x%x\n",
|
||||
rf_path, rf0_idx, rf56_current, rf_path, rf0_idx,
|
||||
rf56_next);
|
||||
|
||||
if ((rf56_current >> 5) == (rf56_next >> 5)) {
|
||||
delta_gain_gap[rf_path][rf0_idx] = 0;
|
||||
|
||||
RF_DBG(dm, DBG_RF_IQK,
|
||||
"[TGGC] rf56_current[11:5] == rf56_next[%d][%d][11:5]=0x%x delta_gain_gap[%d][%d]=%d\n",
|
||||
rf_path, rf0_idx, (rf56_next >> 5),
|
||||
rf_path, rf0_idx,
|
||||
delta_gain_gap[rf_path][rf0_idx]);
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
RF_DBG(dm, DBG_RF_IQK,
|
||||
"[TGGC] rf56_current[%d][%d][11:5]=0x%x != rf56_next[%d][%d][11:5]=0x%x\n",
|
||||
rf_path, rf0_idx, (rf56_current >> 5), rf_path,
|
||||
rf0_idx, (rf56_next >> 5));
|
||||
|
||||
for (i = 0; i < delta_gain_retry; i++) {
|
||||
psd_value_current = odm_tx_gain_gap_psd_8197f(dm, rf_path, rf56_current);
|
||||
|
||||
psd_value_next = odm_tx_gain_gap_psd_8197f(dm, rf_path, rf56_next - 2);
|
||||
|
||||
psd_gap = psd_value_next / (psd_value_current / 1000);
|
||||
|
||||
#if 0
|
||||
if (psd_gap > 1413)
|
||||
delta_gain_gap[rf_path][rf0_idx] = 1;
|
||||
else if (psd_gap > 1122)
|
||||
delta_gain_gap[rf_path][rf0_idx] = 0;
|
||||
else
|
||||
delta_gain_gap[rf_path][rf0_idx] = -1;
|
||||
#endif
|
||||
|
||||
if (psd_gap > 1445)
|
||||
delta_gain_gap[rf_path][rf0_idx] = 1;
|
||||
else if (psd_gap > 1096)
|
||||
delta_gain_gap[rf_path][rf0_idx] = 0;
|
||||
else
|
||||
delta_gain_gap[rf_path][rf0_idx] = -1;
|
||||
|
||||
if (i == 0)
|
||||
delta_gain_gap_pre = delta_gain_gap[rf_path][rf0_idx];
|
||||
|
||||
RF_DBG(dm, DBG_RF_IQK,
|
||||
"[TGGC] psd_value_current=0x%x psd_value_next=0x%x psd_value_next/psd_value_current=%d delta_gain_gap[%d][%d]=%d\n",
|
||||
psd_value_current, psd_value_next,
|
||||
psd_gap, rf_path, rf0_idx,
|
||||
delta_gain_gap[rf_path][rf0_idx]);
|
||||
|
||||
if (i == 0 && delta_gain_gap[rf_path][rf0_idx] == 0)
|
||||
break;
|
||||
|
||||
if (delta_gain_gap_pre != delta_gain_gap[rf_path][rf0_idx]) {
|
||||
delta_gain_gap[rf_path][rf0_idx] = 0;
|
||||
|
||||
RF_DBG(dm, DBG_RF_IQK, "[TGGC] delta_gain_gap_pre(%d) != delta_gain_gap[%d][%d](%d) time=%d\n",
|
||||
delta_gain_gap_pre, rf_path, rf0_idx, delta_gain_gap[rf_path][rf0_idx], i);
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
RF_DBG(dm, DBG_RF_IQK,
|
||||
"[TGGC] delta_gain_gap_pre(%d) == delta_gain_gap[%d][%d](%d) time=%d\n",
|
||||
delta_gain_gap_pre, rf_path, rf0_idx,
|
||||
delta_gain_gap[rf_path][rf0_idx], i);
|
||||
}
|
||||
}
|
||||
|
||||
if (rf_path == RF_PATH_A)
|
||||
odm_set_bb_reg(dm, R_0x88c, (BIT(21) | BIT(20)), 0x0); /*enable 3-wire*/
|
||||
else if (rf_path == RF_PATH_B)
|
||||
odm_set_bb_reg(dm, R_0x88c, (BIT(23) | BIT(22)), 0x0); /*enable 3-wire*/
|
||||
|
||||
ODM_delay_us(100);
|
||||
}
|
||||
|
||||
#if 0
|
||||
/*odm_set_bb_reg(dm, R_0x88c, (BIT(23) | BIT(22) | BIT(21) | BIT(20)), 0x0);*/ /*enable 3-wire*/
|
||||
#endif
|
||||
|
||||
for (rf_path = RF_PATH_A; rf_path <= RF_PATH_B; rf_path++) {
|
||||
odm_set_rf_reg(dm, rf_path, RF_0xef, bRFRegOffsetMask, 0x00100);
|
||||
|
||||
for (rf0_idx = 1; rf0_idx <= 10; rf0_idx++) {
|
||||
rf33[rf_path][rf0_idx] = rf33[rf_path][rf0_idx] + (rf56_current_temp[rf_path][rf0_idx] & 0x1f);
|
||||
|
||||
for (i = rf0_idx; i <= 10; i++)
|
||||
rf33[rf_path][rf0_idx] = rf33[rf_path][rf0_idx] + delta_gain_gap[rf_path][i];
|
||||
|
||||
if (rf33[rf_path][rf0_idx] >= 0x1d)
|
||||
rf33[rf_path][rf0_idx] = 0x1d;
|
||||
else if (rf33[rf_path][rf0_idx] <= 0x2)
|
||||
rf33[rf_path][rf0_idx] = 0x2;
|
||||
|
||||
rf33[rf_path][rf0_idx] = rf33[rf_path][rf0_idx] + ((rf0_idx - 1) * 0x4000) + (rf56_current_temp[rf_path][rf0_idx] & 0xfffe0);
|
||||
|
||||
RF_DBG(dm, DBG_RF_IQK,
|
||||
"[TGGC] rf56[%d][%d]=0x%05x rf33[%d][%d]=0x%05x\n",
|
||||
rf_path, rf0_idx,
|
||||
rf56_current_temp[rf_path][rf0_idx], rf_path,
|
||||
rf0_idx, rf33[rf_path][rf0_idx]);
|
||||
|
||||
odm_set_rf_reg(dm, rf_path, RF_0x33, bRFRegOffsetMask, rf33[rf_path][rf0_idx]);
|
||||
}
|
||||
|
||||
odm_set_rf_reg(dm, rf_path, RF_0xef, bRFRegOffsetMask, 0x00000);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
void odm_tx_gain_gap_calibration(void *dm_void)
|
||||
{
|
||||
PDM_ODM_T dm = (PDM_ODM_T)dm_void;
|
||||
#if (RTL8197F_SUPPORT == 1)
|
||||
if (dm->SupportICType & ODM_RTL8197F)
|
||||
odm_tx_gain_gap_calibration_8197f(dm_void);
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -22,8 +22,10 @@
|
||||
* Larry Finger <Larry.Finger@lwfinger.net>
|
||||
*
|
||||
*****************************************************************************/
|
||||
void
|
||||
odm_tx_gain_gap_calibration(
|
||||
void *dm_void
|
||||
);
|
||||
|
||||
|
||||
#ifndef __HALRF_TXGAPCAL_H__
|
||||
#define __HALRF_TXGAPCAL_H__
|
||||
|
||||
void odm_tx_gain_gap_calibration(void *dm_void);
|
||||
|
||||
#endif /*__HALRF_TXGAPCAL_H__*/
|
||||
|
||||
@@ -25,111 +25,185 @@
|
||||
|
||||
#include "mp_precomp.h"
|
||||
#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
|
||||
#if RT_PLATFORM==PLATFORM_MACOSX
|
||||
#include "phydm_precomp.h"
|
||||
#else
|
||||
#include "../phydm_precomp.h"
|
||||
#endif
|
||||
#if RT_PLATFORM == PLATFORM_MACOSX
|
||||
#include "phydm_precomp.h"
|
||||
#else
|
||||
#include "../phydm_precomp.h"
|
||||
#endif
|
||||
#else
|
||||
#include "../../phydm_precomp.h"
|
||||
#endif
|
||||
|
||||
#if (RTL8822B_SUPPORT == 1)
|
||||
void
|
||||
halrf_rf_lna_setting_8822b(
|
||||
struct dm_struct *dm_void,
|
||||
enum phydm_lna_set type
|
||||
)
|
||||
void halrf_rf_lna_setting_8822b(struct dm_struct *dm_void,
|
||||
enum halrf_lna_set type)
|
||||
{
|
||||
struct dm_struct *dm = (struct dm_struct *)dm_void;
|
||||
struct dm_struct *dm = (struct dm_struct *)dm_void;
|
||||
u8 path = 0x0;
|
||||
|
||||
for (path = 0x0; path < 2; path++)
|
||||
if (type == phydm_lna_disable) {
|
||||
if (type == HALRF_LNA_DISABLE) {
|
||||
/*S0*/
|
||||
odm_set_rf_reg(dm, (enum rf_path)path, 0xef, BIT(19), 0x1);
|
||||
odm_set_rf_reg(dm, (enum rf_path)path, 0x33, RFREGOFFSETMASK, 0x00003);
|
||||
odm_set_rf_reg(dm, (enum rf_path)path, 0x3e, RFREGOFFSETMASK, 0x00064);
|
||||
odm_set_rf_reg(dm, (enum rf_path)path, 0x3f, RFREGOFFSETMASK, 0x0afce);
|
||||
odm_set_rf_reg(dm, (enum rf_path)path, 0xef, BIT(19), 0x0);
|
||||
} else if (type == phydm_lna_enable) {
|
||||
odm_set_rf_reg(dm, (enum rf_path)path, RF_0xef, BIT(19),
|
||||
0x1);
|
||||
odm_set_rf_reg(dm, (enum rf_path)path, RF_0x33,
|
||||
RFREGOFFSETMASK, 0x00003);
|
||||
odm_set_rf_reg(dm, (enum rf_path)path, RF_0x3e,
|
||||
RFREGOFFSETMASK, 0x00064);
|
||||
odm_set_rf_reg(dm, (enum rf_path)path, RF_0x3f,
|
||||
RFREGOFFSETMASK, 0x0afce);
|
||||
odm_set_rf_reg(dm, (enum rf_path)path, RF_0xef, BIT(19),
|
||||
0x0);
|
||||
} else if (type == HALRF_LNA_ENABLE) {
|
||||
/*S0*/
|
||||
odm_set_rf_reg(dm, (enum rf_path)path, 0xef, BIT(19), 0x1);
|
||||
odm_set_rf_reg(dm, (enum rf_path)path, 0x33, RFREGOFFSETMASK, 0x00003);
|
||||
odm_set_rf_reg(dm, (enum rf_path)path, 0x3e, RFREGOFFSETMASK, 0x00064);
|
||||
odm_set_rf_reg(dm, (enum rf_path)path, 0x3f, RFREGOFFSETMASK, 0x1afce);
|
||||
odm_set_rf_reg(dm, (enum rf_path)path, 0xef, BIT(19), 0x0);
|
||||
odm_set_rf_reg(dm, (enum rf_path)path, RF_0xef, BIT(19),
|
||||
0x1);
|
||||
odm_set_rf_reg(dm, (enum rf_path)path, RF_0x33,
|
||||
RFREGOFFSETMASK, 0x00003);
|
||||
odm_set_rf_reg(dm, (enum rf_path)path, RF_0x3e,
|
||||
RFREGOFFSETMASK, 0x00064);
|
||||
odm_set_rf_reg(dm, (enum rf_path)path, RF_0x3f,
|
||||
RFREGOFFSETMASK, 0x1afce);
|
||||
odm_set_rf_reg(dm, (enum rf_path)path, RF_0xef, BIT(19),
|
||||
0x0);
|
||||
}
|
||||
}
|
||||
|
||||
boolean
|
||||
get_mix_mode_tx_agc_bb_swing_offset_8822b(
|
||||
void *dm_void,
|
||||
enum pwrtrack_method method,
|
||||
u8 rf_path,
|
||||
u8 tx_power_index_offest
|
||||
)
|
||||
boolean get_mix_mode_tx_agc_bb_swing_offset_8822b(void *dm_void,
|
||||
enum pwrtrack_method method,
|
||||
u8 rf_path,
|
||||
u8 tx_power_index_offset)
|
||||
{
|
||||
struct dm_struct *dm = (struct dm_struct *)dm_void;
|
||||
struct dm_rf_calibration_struct *cali_info = &dm->rf_calibrate_info;
|
||||
struct dm_struct *dm = (struct dm_struct *)dm_void;
|
||||
struct dm_rf_calibration_struct *cali_info = &dm->rf_calibrate_info;
|
||||
|
||||
u8 bb_swing_upper_bound = cali_info->default_ofdm_index + 10;
|
||||
u8 bb_swing_lower_bound = 0;
|
||||
u8 bb_swing_upper_bound = cali_info->default_ofdm_index + 10;
|
||||
u8 bb_swing_lower_bound = 0;
|
||||
|
||||
s8 tx_agc_index = 0;
|
||||
u8 tx_bb_swing_index = cali_info->default_ofdm_index;
|
||||
s8 tx_agc_index = 0;
|
||||
u8 tx_bb_swing_index = cali_info->default_ofdm_index;
|
||||
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,"Path_%d cali_info->absolute_ofdm_swing_idx[rf_path]=%d, tx_power_index_offest=%d\n",
|
||||
rf_path, cali_info->absolute_ofdm_swing_idx[rf_path], tx_power_index_offest);
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,
|
||||
"Path_%d absolute_ofdm_swing[%d]=%d tx_power_idx_offset=%d\n",
|
||||
rf_path, rf_path, cali_info->absolute_ofdm_swing_idx[rf_path],
|
||||
tx_power_index_offset);
|
||||
|
||||
if (tx_power_index_offest > 0XF)
|
||||
tx_power_index_offest = 0XF;
|
||||
if (tx_power_index_offset > 0XF)
|
||||
tx_power_index_offset = 0XF;
|
||||
|
||||
if (cali_info->absolute_ofdm_swing_idx[rf_path] >= 0 && cali_info->absolute_ofdm_swing_idx[rf_path] <= tx_power_index_offest) {
|
||||
if (cali_info->absolute_ofdm_swing_idx[rf_path] >= 0 &&
|
||||
cali_info->absolute_ofdm_swing_idx[rf_path] <=
|
||||
tx_power_index_offset) {
|
||||
tx_agc_index = cali_info->absolute_ofdm_swing_idx[rf_path];
|
||||
tx_bb_swing_index = cali_info->default_ofdm_index;
|
||||
} else if (cali_info->absolute_ofdm_swing_idx[rf_path] > tx_power_index_offest) {
|
||||
tx_agc_index = tx_power_index_offest;
|
||||
cali_info->remnant_ofdm_swing_idx[rf_path] = cali_info->absolute_ofdm_swing_idx[rf_path] - tx_power_index_offest;
|
||||
tx_bb_swing_index = cali_info->default_ofdm_index + cali_info->remnant_ofdm_swing_idx[rf_path];
|
||||
} else if (cali_info->absolute_ofdm_swing_idx[rf_path] >
|
||||
tx_power_index_offset) {
|
||||
tx_agc_index = tx_power_index_offset;
|
||||
cali_info->remnant_ofdm_swing_idx[rf_path] =
|
||||
cali_info->absolute_ofdm_swing_idx[rf_path] -
|
||||
tx_power_index_offset;
|
||||
tx_bb_swing_index = cali_info->default_ofdm_index +
|
||||
cali_info->remnant_ofdm_swing_idx[rf_path];
|
||||
|
||||
if (tx_bb_swing_index > bb_swing_upper_bound)
|
||||
tx_bb_swing_index = bb_swing_upper_bound;
|
||||
} else {
|
||||
tx_agc_index = 0;
|
||||
|
||||
if (cali_info->default_ofdm_index > (cali_info->absolute_ofdm_swing_idx[rf_path] * (-1)))
|
||||
tx_bb_swing_index = cali_info->default_ofdm_index + cali_info->absolute_ofdm_swing_idx[rf_path];
|
||||
if (cali_info->default_ofdm_index >
|
||||
(cali_info->absolute_ofdm_swing_idx[rf_path] * (-1)))
|
||||
tx_bb_swing_index =
|
||||
cali_info->default_ofdm_index +
|
||||
cali_info->absolute_ofdm_swing_idx[rf_path];
|
||||
else
|
||||
tx_bb_swing_index = bb_swing_lower_bound;
|
||||
|
||||
if (tx_bb_swing_index < bb_swing_lower_bound)
|
||||
if (tx_bb_swing_index < bb_swing_lower_bound)
|
||||
tx_bb_swing_index = bb_swing_lower_bound;
|
||||
}
|
||||
|
||||
cali_info->absolute_ofdm_swing_idx[rf_path] = tx_agc_index;
|
||||
cali_info->bb_swing_idx_ofdm[rf_path] = tx_bb_swing_index;
|
||||
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,"MixMode Offset Path_%d cali_info->absolute_ofdm_swing_idx[rf_path]=%d cali_info->bb_swing_idx_ofdm[rf_path]=%d tx_power_index_offest=%d\n",
|
||||
rf_path, cali_info->absolute_ofdm_swing_idx[rf_path], cali_info->bb_swing_idx_ofdm[rf_path], tx_power_index_offest);
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,
|
||||
"absolute_ofdm[%d]=%d bb_swing_ofdm[%d]=%d tx_pwr_offset=%d\n",
|
||||
rf_path, cali_info->absolute_ofdm_swing_idx[rf_path],
|
||||
rf_path, cali_info->bb_swing_idx_ofdm[rf_path],
|
||||
tx_power_index_offset);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void odm_pwrtrack_method_set_pwr8822b(void *dm_void,
|
||||
enum pwrtrack_method method,
|
||||
u8 rf_path, u8 tx_pwr_idx_offset)
|
||||
{
|
||||
struct dm_struct *dm = (struct dm_struct *)dm_void;
|
||||
struct dm_rf_calibration_struct *cali_info = &dm->rf_calibrate_info;
|
||||
u32 tmp_reg1, tmp_reg2, tmp_reg3;
|
||||
u8 bb_swing_idx_ofdm = cali_info->bb_swing_idx_ofdm[rf_path];
|
||||
|
||||
void
|
||||
odm_tx_pwr_track_set_pwr8822b(
|
||||
void *dm_void,
|
||||
enum pwrtrack_method method,
|
||||
u8 rf_path,
|
||||
u8 channel_mapped_index
|
||||
)
|
||||
/*use for mp driver clean power tracking status*/
|
||||
if (method == BBSWING) {
|
||||
if (rf_path == RF_PATH_A) {
|
||||
tmp_reg1 = R_0xc94;
|
||||
tmp_reg2 = REG_A_TX_SCALE_JAGUAR;
|
||||
} else if (rf_path == RF_PATH_B) {
|
||||
tmp_reg1 = R_0xe94;
|
||||
tmp_reg2 = REG_B_TX_SCALE_JAGUAR;
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
|
||||
odm_set_bb_reg(dm, tmp_reg1,
|
||||
BIT(29) | BIT(28) | BIT(27) | BIT(26) | BIT(25),
|
||||
cali_info->absolute_ofdm_swing_idx[rf_path]);
|
||||
odm_set_bb_reg(dm, tmp_reg2, 0xFFE00000,
|
||||
tx_scaling_table_jaguar[bb_swing_idx_ofdm]);
|
||||
|
||||
} else if (method == MIX_MODE) {
|
||||
if (rf_path == RF_PATH_A) {
|
||||
tmp_reg1 = R_0xc94;
|
||||
tmp_reg2 = REG_A_TX_SCALE_JAGUAR;
|
||||
tmp_reg3 = 0xc1c;
|
||||
} else if (rf_path == RF_PATH_B) {
|
||||
tmp_reg1 = R_0xe94;
|
||||
tmp_reg2 = REG_B_TX_SCALE_JAGUAR;
|
||||
tmp_reg3 = 0xe1c;
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
|
||||
get_mix_mode_tx_agc_bb_swing_offset_8822b(dm,
|
||||
method,
|
||||
rf_path,
|
||||
tx_pwr_idx_offset);
|
||||
bb_swing_idx_ofdm = cali_info->bb_swing_idx_ofdm[rf_path];
|
||||
odm_set_bb_reg(dm, tmp_reg1,
|
||||
BIT(29) | BIT(28) | BIT(27) | BIT(26) | BIT(25),
|
||||
cali_info->absolute_ofdm_swing_idx[rf_path]);
|
||||
odm_set_bb_reg(dm, tmp_reg2, 0xFFE00000,
|
||||
tx_scaling_table_jaguar[bb_swing_idx_ofdm]);
|
||||
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,
|
||||
"TXAGC(%x)=0x%x BBSw(%x)=0x%x BBSwIdx=%d rf_path=%d\n",
|
||||
tmp_reg1,
|
||||
odm_get_bb_reg(dm, tmp_reg1,
|
||||
BIT(29) | BIT(28) | BIT(27) |
|
||||
BIT(26) | BIT(25)),
|
||||
tmp_reg3, odm_get_bb_reg(dm, tmp_reg3, 0xFFE00000),
|
||||
cali_info->bb_swing_idx_ofdm[rf_path], rf_path);
|
||||
}
|
||||
}
|
||||
|
||||
void odm_tx_pwr_track_set_pwr8822b(void *dm_void, enum pwrtrack_method method,
|
||||
u8 rf_path, u8 channel_mapped_index)
|
||||
{
|
||||
#if 0
|
||||
struct dm_struct *dm = (struct dm_struct *)dm_void;
|
||||
void *adapter = dm->adapter;
|
||||
HAL_DATA_TYPE *hal_data = GET_HAL_DATA(((PADAPTER)adapter));
|
||||
struct dm_rf_calibration_struct *cali_info = &(dm->rf_calibrate_info);
|
||||
struct dm_rf_calibration_struct *cali_info = &dm->rf_calibrate_info;
|
||||
u8 channel = *dm->channel;
|
||||
u8 band_width = hal_data->current_channel_bw;
|
||||
u8 tx_power_index = 0;
|
||||
@@ -138,7 +212,7 @@ odm_tx_pwr_track_set_pwr8822b(
|
||||
|
||||
PHALMAC_PWR_TRACKING_OPTION p_pwr_tracking_opt = &(cali_info->HALMAC_PWR_TRACKING_INFO);
|
||||
|
||||
if (*(dm->mp_mode) == true) {
|
||||
if (*dm->mp_mode == true) {
|
||||
#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN | ODM_CE))
|
||||
#if (DM_ODM_SUPPORT_TYPE & ODM_WIN)
|
||||
#if (MP_DRIVER == 1)
|
||||
@@ -166,12 +240,16 @@ odm_tx_pwr_track_set_pwr8822b(
|
||||
tx_rate = (u8) rate;
|
||||
}
|
||||
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK, "Call:%s tx_rate=0x%X\n", __func__, tx_rate);
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK, "Call:%s tx_rate=0x%X\n", __func__,
|
||||
tx_rate);
|
||||
|
||||
tx_power_index = phy_get_tx_power_index(adapter, (enum rf_path) rf_path, tx_rate, band_width, channel);
|
||||
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,
|
||||
"type=%d tx_power_index=%d cali_info->absolute_ofdm_swing_idx=%d cali_info->default_ofdm_index=%d rf_path=%d\n", method, tx_power_index, cali_info->absolute_ofdm_swing_idx[rf_path], cali_info->default_ofdm_index, rf_path);
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,
|
||||
"type=%d tx_power_index=%d cali_info->absolute_ofdm_swing_idx=%d cali_info->default_ofdm_index=%d rf_path=%d\n",
|
||||
method, tx_power_index,
|
||||
cali_info->absolute_ofdm_swing_idx[rf_path],
|
||||
cali_info->default_ofdm_index, rf_path);
|
||||
|
||||
p_pwr_tracking_opt->type = method;
|
||||
p_pwr_tracking_opt->bbswing_index = cali_info->default_ofdm_index;
|
||||
@@ -185,44 +263,39 @@ odm_tx_pwr_track_set_pwr8822b(
|
||||
status = hal_mac_send_power_tracking_info(&GET_HAL_MAC_INFO(adapter), p_pwr_tracking_opt);
|
||||
|
||||
if (status == RT_STATUS_SUCCESS) {
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,
|
||||
"path A 0xC94=0x%X 0xC1C=0x%X\n",
|
||||
odm_get_bb_reg(dm, 0xC94, BIT(29) | BIT(28) | BIT(27) | BIT(26) | BIT(25)),
|
||||
odm_get_bb_reg(dm, 0xC1C, 0xFFE00000)
|
||||
);
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,
|
||||
"path B 0xE94=0x%X 0xE1C=0x%X\n",
|
||||
odm_get_bb_reg(dm, 0xE94, BIT(29) | BIT(28) | BIT(27) | BIT(26) | BIT(25)),
|
||||
odm_get_bb_reg(dm, 0xE1C, 0xFFE00000)
|
||||
);
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,
|
||||
"path A 0xC94=0x%X 0xC1C=0x%X\n",
|
||||
odm_get_bb_reg(dm, R_0xc94,
|
||||
BIT(29) | BIT(28) | BIT(27) | BIT(26) | BIT(25)),
|
||||
odm_get_bb_reg(dm, R_0xc1c, 0xFFE00000));
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,
|
||||
"path B 0xE94=0x%X 0xE1C=0x%X\n",
|
||||
odm_get_bb_reg(dm, R_0xe94,
|
||||
BIT(29) | BIT(28) | BIT(27) | BIT(26) | BIT(25)),
|
||||
odm_get_bb_reg(dm, R_0xe1c, 0xFFE00000));
|
||||
} else {
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,
|
||||
"Power Tracking to FW Fail ret code = %d\n", status);
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,
|
||||
"Power Tracking to FW Fail ret code = %d\n",
|
||||
status);
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
struct dm_struct *dm = (struct dm_struct *)dm_void;
|
||||
struct dm_rf_calibration_struct *cali_info = &dm->rf_calibrate_info;
|
||||
struct _hal_rf_ *rf = &dm->rf_table;
|
||||
u8 tx_power_index_offest = 0;
|
||||
u8 tx_power_index = 0;
|
||||
|
||||
#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN | ODM_CE))
|
||||
#if (DM_ODM_SUPPORT_TYPE & ODM_CE) && defined(DM_ODM_CE_MAC80211)
|
||||
struct rtl_priv *rtlpriv = (struct rtl_priv *)dm->adapter;
|
||||
struct rtl_phy *rtlphy = &rtlpriv->phy;
|
||||
u8 channel = rtlphy->current_channel;
|
||||
u8 band_width = rtlphy->current_chan_bw;
|
||||
#else
|
||||
struct _ADAPTER *adapter = (PADAPTER)dm->adapter;
|
||||
u8 channel = *dm->channel;
|
||||
u8 band_width = *dm->band_width;
|
||||
struct dm_struct *dm = (struct dm_struct *)dm_void;
|
||||
#if (DM_ODM_SUPPORT_TYPE & ODM_WIN)
|
||||
struct _ADAPTER *adapter = dm->adapter;
|
||||
#endif
|
||||
u8 tx_rate = 0xFF;
|
||||
struct dm_rf_calibration_struct *cali_info = &dm->rf_calibrate_info;
|
||||
struct _hal_rf_ *rf = &dm->rf_table;
|
||||
u8 tx_pwr_idx_offset = 0;
|
||||
u8 tx_pwr_idx = 0;
|
||||
u8 mpt_rate_index = 0;
|
||||
#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN | ODM_CE))
|
||||
u8 channel = *dm->channel;
|
||||
u8 band_width = *dm->band_width;
|
||||
u8 tx_rate = 0xFF;
|
||||
|
||||
if (*dm->mp_mode == true) {
|
||||
if (*dm->mp_mode == 1) {
|
||||
#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN | ODM_CE))
|
||||
#if (DM_ODM_SUPPORT_TYPE & ODM_WIN)
|
||||
#if (MP_DRIVER == 1)
|
||||
@@ -232,17 +305,20 @@ odm_tx_pwr_track_set_pwr8822b(
|
||||
#endif
|
||||
#elif (DM_ODM_SUPPORT_TYPE & ODM_CE)
|
||||
#ifdef CONFIG_MP_INCLUDED
|
||||
PMPT_CONTEXT p_mpt_ctx = &adapter->mppriv.mpt_ctx;
|
||||
if (rf->mp_rate_index)
|
||||
mpt_rate_index = *rf->mp_rate_index;
|
||||
|
||||
tx_rate = mpt_to_mgnt_rate(p_mpt_ctx->mpt_rate_index);
|
||||
tx_rate = mpt_to_mgnt_rate(mpt_rate_index);
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
} else {
|
||||
u16 rate = *dm->forced_data_rate;
|
||||
u16 rate = *dm->forced_data_rate;
|
||||
|
||||
if (!rate) { /*auto rate*/
|
||||
#if (DM_ODM_SUPPORT_TYPE & ODM_WIN)
|
||||
struct _ADAPTER *adapter = dm->adapter;
|
||||
|
||||
tx_rate = ((PADAPTER)adapter)->HalFunc.GetHwRateFromMRateHandler(dm->tx_rate);
|
||||
#elif (DM_ODM_SUPPORT_TYPE & ODM_CE) && defined(DM_ODM_CE_MAC80211)
|
||||
tx_rate = dm->tx_rate;
|
||||
@@ -252,164 +328,136 @@ odm_tx_pwr_track_set_pwr8822b(
|
||||
else
|
||||
tx_rate = rf->p_rate_index;
|
||||
#endif
|
||||
} else /*force rate*/
|
||||
tx_rate = (u8) rate;
|
||||
} else { /*force rate*/
|
||||
tx_rate = (u8)rate;
|
||||
}
|
||||
}
|
||||
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK, "Call:%s tx_rate=0x%X\n", __func__, tx_rate);
|
||||
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK, "Call:%s tx_rate=0x%X\n", __func__,
|
||||
tx_rate);
|
||||
#endif
|
||||
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,"pRF->default_ofdm_index=%d pRF->default_cck_index=%d\n", cali_info->default_ofdm_index, cali_info->default_cck_index);
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,
|
||||
"pRF->default_ofdm_index=%d pRF->default_cck_index=%d\n",
|
||||
cali_info->default_ofdm_index, cali_info->default_cck_index);
|
||||
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,"pRF->absolute_ofdm_swing_idx=%d pRF->remnant_ofdm_swing_idx=%d pRF->absolute_cck_swing_idx=%d pRF->remnant_cck_swing_idx=%d rf_path=%d\n",
|
||||
cali_info->absolute_ofdm_swing_idx[rf_path], cali_info->remnant_ofdm_swing_idx[rf_path], cali_info->absolute_cck_swing_idx[rf_path], cali_info->remnant_cck_swing_idx, rf_path);
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,
|
||||
"absolute_ofdm_swing_idx=%d remnant_ofdm_swing_idx=%d path=%d\n",
|
||||
cali_info->absolute_ofdm_swing_idx[rf_path],
|
||||
cali_info->remnant_ofdm_swing_idx[rf_path], rf_path);
|
||||
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,
|
||||
"absolute_cck_swing_idx=%d remnant_cck_swing_idx=%d path=%d\n",
|
||||
cali_info->absolute_cck_swing_idx[rf_path],
|
||||
cali_info->remnant_cck_swing_idx, rf_path);
|
||||
|
||||
#if (DM_ODM_SUPPORT_TYPE & ODM_WIN)
|
||||
tx_power_index = odm_get_tx_power_index(dm, (enum rf_path) rf_path, tx_rate, (enum channel_width)band_width, channel);
|
||||
tx_pwr_idx = odm_get_tx_power_index(dm, (enum rf_path)rf_path, tx_rate, (enum channel_width)band_width, channel);
|
||||
#elif (DM_ODM_SUPPORT_TYPE & ODM_CE)
|
||||
tx_power_index = odm_get_tx_power_index(dm, (enum rf_path) rf_path, tx_rate, band_width, channel);
|
||||
tx_pwr_idx = odm_get_tx_power_index(dm, (enum rf_path)rf_path,
|
||||
tx_rate, band_width, channel);
|
||||
#else
|
||||
tx_power_index = config_phydm_read_txagc_8822b(dm, rf_path, 0x04); /*0x04(TX_AGC_OFDM_6M)*/
|
||||
/*0x04(TX_AGC_OFDM_6M)*/
|
||||
tx_pwr_idx = config_phydm_read_txagc_8822b(dm, rf_path, 0x04);
|
||||
#endif
|
||||
|
||||
if (tx_power_index >= 63)
|
||||
tx_power_index = 63;
|
||||
if (tx_pwr_idx >= 63)
|
||||
tx_pwr_idx = 63;
|
||||
|
||||
tx_power_index_offest = 63 - tx_power_index;
|
||||
tx_pwr_idx_offset = 63 - tx_pwr_idx;
|
||||
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,"tx_power_index=%d tx_power_index_offest=%d rf_path=%d\n", tx_power_index, tx_power_index_offest, rf_path);
|
||||
RF_DBG(dm, DBG_RF_TX_PWR_TRACK,
|
||||
"tx_power_index=%d tx_power_index_offset=%d rf_path=%d\n",
|
||||
tx_pwr_idx, tx_pwr_idx_offset, rf_path);
|
||||
|
||||
if (method == BBSWING) { /*use for mp driver clean power tracking status*/
|
||||
switch (rf_path) {
|
||||
case RF_PATH_A:
|
||||
odm_set_bb_reg(dm, 0xC94, (BIT(29) | BIT(28) | BIT(27) | BIT(26) | BIT(25)), cali_info->absolute_ofdm_swing_idx[rf_path]);
|
||||
odm_set_bb_reg(dm, REG_A_TX_SCALE_JAGUAR, 0xFFE00000, tx_scaling_table_jaguar[cali_info->bb_swing_idx_ofdm[rf_path]]);
|
||||
break;
|
||||
case RF_PATH_B:
|
||||
odm_set_bb_reg(dm, 0xE94, (BIT(29) | BIT(28) | BIT(27) | BIT(26) | BIT(25)), cali_info->absolute_ofdm_swing_idx[rf_path]);
|
||||
odm_set_bb_reg(dm, REG_B_TX_SCALE_JAGUAR, 0xFFE00000, tx_scaling_table_jaguar[cali_info->bb_swing_idx_ofdm[rf_path]]);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
} else if (method == MIX_MODE) {
|
||||
switch (rf_path) {
|
||||
case RF_PATH_A:
|
||||
get_mix_mode_tx_agc_bb_swing_offset_8822b(dm, method, rf_path, tx_power_index_offest);
|
||||
odm_set_bb_reg(dm, 0xC94, (BIT(29) | BIT(28) | BIT(27) | BIT(26) | BIT(25)), cali_info->absolute_ofdm_swing_idx[rf_path]);
|
||||
odm_set_bb_reg(dm, REG_A_TX_SCALE_JAGUAR, 0xFFE00000, tx_scaling_table_jaguar[cali_info->bb_swing_idx_ofdm[rf_path]]);
|
||||
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,"TXAGC(0xC94)=0x%x BBSwing(0xc1c)=0x%x BBSwingIndex=%d rf_path=%d\n",
|
||||
odm_get_bb_reg(dm, 0xC94, (BIT(29) | BIT(28) | BIT(27) | BIT(26) | BIT(25))),
|
||||
odm_get_bb_reg(dm, 0xc1c, 0xFFE00000),
|
||||
cali_info->bb_swing_idx_ofdm[rf_path], rf_path);
|
||||
break;
|
||||
|
||||
case RF_PATH_B:
|
||||
get_mix_mode_tx_agc_bb_swing_offset_8822b(dm, method, rf_path, tx_power_index_offest);
|
||||
odm_set_bb_reg(dm, 0xE94, (BIT(29) | BIT(28) | BIT(27) | BIT(26) | BIT(25)), cali_info->absolute_ofdm_swing_idx[rf_path]);
|
||||
odm_set_bb_reg(dm, REG_B_TX_SCALE_JAGUAR, 0xFFE00000, tx_scaling_table_jaguar[cali_info->bb_swing_idx_ofdm[rf_path]]);
|
||||
|
||||
PHYDM_DBG(dm, ODM_COMP_TX_PWR_TRACK,"TXAGC(0xE94)=0x%x BBSwing(0xe1c)=0x%x BBSwingIndex=%d rf_path=%d\n",
|
||||
odm_get_bb_reg(dm, 0xE94, (BIT(29) | BIT(28) | BIT(27) | BIT(26) | BIT(25))),
|
||||
odm_get_bb_reg(dm, 0xe1c, 0xFFE00000),
|
||||
cali_info->bb_swing_idx_ofdm[rf_path], rf_path);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
odm_pwrtrack_method_set_pwr8822b(dm, method, rf_path,
|
||||
tx_pwr_idx_offset);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
get_delta_swing_table_8822b(
|
||||
void *dm_void,
|
||||
void get_delta_swing_table_8822b(void *dm_void,
|
||||
#if (DM_ODM_SUPPORT_TYPE & ODM_AP)
|
||||
u8 **temperature_up_a,
|
||||
u8 **temperature_down_a,
|
||||
u8 **temperature_up_b,
|
||||
u8 **temperature_down_b,
|
||||
u8 **temperature_up_cck_a,
|
||||
u8 **temperature_down_cck_a,
|
||||
u8 **temperature_up_cck_b,
|
||||
u8 **temperature_down_cck_b
|
||||
u8 **temperature_up_a, u8 **temperature_down_a,
|
||||
u8 **temperature_up_b, u8 **temperature_down_b,
|
||||
u8 **temperature_up_cck_a,
|
||||
u8 **temperature_down_cck_a,
|
||||
u8 **temperature_up_cck_b,
|
||||
u8 **temperature_down_cck_b)
|
||||
#else
|
||||
u8 **temperature_up_a,
|
||||
u8 **temperature_down_a,
|
||||
u8 **temperature_up_b,
|
||||
u8 **temperature_down_b
|
||||
u8 **temperature_up_a,
|
||||
u8 **temperature_down_a,
|
||||
u8 **temperature_up_b,
|
||||
u8 **temperature_down_b)
|
||||
#endif
|
||||
)
|
||||
{
|
||||
struct dm_struct *dm = (struct dm_struct *)dm_void;
|
||||
struct dm_rf_calibration_struct *cali_info = &(dm->rf_calibrate_info);
|
||||
struct dm_struct *dm = (struct dm_struct *)dm_void;
|
||||
struct dm_rf_calibration_struct *cali_info = &dm->rf_calibrate_info;
|
||||
u8 channel = *dm->channel;
|
||||
|
||||
#if (DM_ODM_SUPPORT_TYPE & ODM_AP)
|
||||
u8 channel = *(dm->channel);
|
||||
#elif (DM_ODM_SUPPORT_TYPE & ODM_CE) && defined(DM_ODM_CE_MAC80211)
|
||||
struct rtl_priv *rtlpriv = (struct rtl_priv *)dm->adapter;
|
||||
struct rtl_phy *rtlphy = &(rtlpriv->phy);
|
||||
u8 channel = rtlphy->current_channel;
|
||||
#else
|
||||
void *adapter = dm->adapter;
|
||||
u8 channel = *dm->channel;
|
||||
#endif
|
||||
|
||||
#if (DM_ODM_SUPPORT_TYPE & ODM_AP)
|
||||
*temperature_up_cck_a = cali_info->delta_swing_table_idx_2g_cck_a_p;
|
||||
*temperature_up_cck_a = cali_info->delta_swing_table_idx_2g_cck_a_p;
|
||||
*temperature_down_cck_a = cali_info->delta_swing_table_idx_2g_cck_a_n;
|
||||
*temperature_up_cck_b = cali_info->delta_swing_table_idx_2g_cck_b_p;
|
||||
*temperature_up_cck_b = cali_info->delta_swing_table_idx_2g_cck_b_p;
|
||||
*temperature_down_cck_b = cali_info->delta_swing_table_idx_2g_cck_b_n;
|
||||
#endif
|
||||
|
||||
*temperature_up_a = cali_info->delta_swing_table_idx_2ga_p;
|
||||
*temperature_up_a = cali_info->delta_swing_table_idx_2ga_p;
|
||||
*temperature_down_a = cali_info->delta_swing_table_idx_2ga_n;
|
||||
*temperature_up_b = cali_info->delta_swing_table_idx_2gb_p;
|
||||
*temperature_up_b = cali_info->delta_swing_table_idx_2gb_p;
|
||||
*temperature_down_b = cali_info->delta_swing_table_idx_2gb_n;
|
||||
|
||||
if (36 <= channel && channel <= 64) {
|
||||
*temperature_up_a = cali_info->delta_swing_table_idx_5ga_p[0];
|
||||
if (channel >= 36 && channel <= 64) {
|
||||
*temperature_up_a = cali_info->delta_swing_table_idx_5ga_p[0];
|
||||
*temperature_down_a = cali_info->delta_swing_table_idx_5ga_n[0];
|
||||
*temperature_up_b = cali_info->delta_swing_table_idx_5gb_p[0];
|
||||
*temperature_up_b = cali_info->delta_swing_table_idx_5gb_p[0];
|
||||
*temperature_down_b = cali_info->delta_swing_table_idx_5gb_n[0];
|
||||
} else if (100 <= channel && channel <= 144) {
|
||||
*temperature_up_a = cali_info->delta_swing_table_idx_5ga_p[1];
|
||||
} else if (channel >= 100 && channel <= 144) {
|
||||
*temperature_up_a = cali_info->delta_swing_table_idx_5ga_p[1];
|
||||
*temperature_down_a = cali_info->delta_swing_table_idx_5ga_n[1];
|
||||
*temperature_up_b = cali_info->delta_swing_table_idx_5gb_p[1];
|
||||
*temperature_up_b = cali_info->delta_swing_table_idx_5gb_p[1];
|
||||
*temperature_down_b = cali_info->delta_swing_table_idx_5gb_n[1];
|
||||
} else if (149 <= channel && channel <= 177) {
|
||||
*temperature_up_a = cali_info->delta_swing_table_idx_5ga_p[2];
|
||||
} else if (channel >= 149 && channel <= 177) {
|
||||
*temperature_up_a = cali_info->delta_swing_table_idx_5ga_p[2];
|
||||
*temperature_down_a = cali_info->delta_swing_table_idx_5ga_n[2];
|
||||
*temperature_up_b = cali_info->delta_swing_table_idx_5gb_p[2];
|
||||
*temperature_up_b = cali_info->delta_swing_table_idx_5gb_p[2];
|
||||
*temperature_down_b = cali_info->delta_swing_table_idx_5gb_n[2];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
_phy_lc_calibrate_8822b(
|
||||
struct dm_struct *dm
|
||||
)
|
||||
void aac_check_8822b(struct dm_struct *dm)
|
||||
{
|
||||
u32 lc_cal = 0, cnt = 0,tmp0xc00, tmp0xe00;
|
||||
u32 temp;
|
||||
|
||||
PHYDM_DBG(dm, ODM_COMP_CALIBRATION, "[LCK]LCK start!!!!!!!\n");
|
||||
static boolean firstrun = true;
|
||||
|
||||
if (firstrun) {
|
||||
RF_DBG(dm, DBG_RF_LCK, "[LCK]AAC check for 8822b\n");
|
||||
temp = odm_get_rf_reg(dm, RF_PATH_A, 0xc9, 0xf8);
|
||||
if (temp < 4 || temp > 7) {
|
||||
odm_set_rf_reg(dm, RF_PATH_A, 0xca, BIT(19), 0x0);
|
||||
odm_set_rf_reg(dm, RF_PATH_A, 0xb2, 0x7c000, 0x6);
|
||||
}
|
||||
firstrun = false;
|
||||
}
|
||||
}
|
||||
|
||||
void _phy_lc_calibrate_8822b(struct dm_struct *dm)
|
||||
{
|
||||
u32 lc_cal = 0, cnt = 0, tmp0xc00, tmp0xe00;
|
||||
|
||||
aac_check_8822b(dm);
|
||||
RF_DBG(dm, DBG_RF_IQK, "[LCK]LCK start!!!!!!!\n");
|
||||
tmp0xc00 = odm_read_4byte(dm, 0xc00);
|
||||
tmp0xe00 = odm_read_4byte(dm, 0xe00);
|
||||
odm_write_4byte(dm, 0xc00, 0x4);
|
||||
odm_write_4byte(dm, 0xe00, 0x4);
|
||||
odm_set_rf_reg(dm, RF_PATH_A, 0x0, RFREGOFFSETMASK, 0x10000);
|
||||
odm_set_rf_reg(dm, RF_PATH_B, 0x0, RFREGOFFSETMASK, 0x10000);
|
||||
odm_set_rf_reg(dm, RF_PATH_A, RF_0x0, RFREGOFFSETMASK, 0x10000);
|
||||
odm_set_rf_reg(dm, RF_PATH_B, RF_0x0, RFREGOFFSETMASK, 0x10000);
|
||||
/*backup RF0x18*/
|
||||
lc_cal = odm_get_rf_reg(dm, RF_PATH_A, RF_CHNLBW, RFREGOFFSETMASK);
|
||||
/*disable RTK*/
|
||||
odm_set_rf_reg(dm, RF_PATH_A, 0xc4, RFREGOFFSETMASK, 0x01402);
|
||||
odm_set_rf_reg(dm, RF_PATH_A, RF_0xc4, RFREGOFFSETMASK, 0x01402);
|
||||
/*Start LCK*/
|
||||
odm_set_rf_reg(dm, RF_PATH_A, RF_CHNLBW, RFREGOFFSETMASK, lc_cal | 0x08000);
|
||||
odm_set_rf_reg(dm, RF_PATH_A, RF_CHNLBW, RFREGOFFSETMASK,
|
||||
lc_cal | 0x08000);
|
||||
ODM_delay_ms(100);
|
||||
for (cnt = 0; cnt < 100; cnt++) {
|
||||
if (odm_get_rf_reg(dm, RF_PATH_A, RF_CHNLBW, 0x8000) != 0x1)
|
||||
@@ -419,31 +467,24 @@ _phy_lc_calibrate_8822b(
|
||||
/*Recover channel number*/
|
||||
odm_set_rf_reg(dm, RF_PATH_A, RF_CHNLBW, RFREGOFFSETMASK, lc_cal);
|
||||
/*enable RTK*/
|
||||
odm_set_rf_reg(dm, RF_PATH_A, 0xc4, RFREGOFFSETMASK, 0x81402);
|
||||
odm_set_rf_reg(dm, RF_PATH_A, RF_0xc4, RFREGOFFSETMASK, 0x81402);
|
||||
/**restore*/
|
||||
odm_write_4byte(dm, 0xc00, tmp0xc00);
|
||||
odm_write_4byte(dm, 0xe00, tmp0xe00);
|
||||
odm_set_rf_reg(dm, RF_PATH_A, 0x0, RFREGOFFSETMASK, 0x3ffff);
|
||||
odm_set_rf_reg(dm, RF_PATH_B, 0x0, RFREGOFFSETMASK, 0x3ffff);
|
||||
PHYDM_DBG(dm, ODM_COMP_CALIBRATION, "[LCK]LCK end!!!!!!!\n");
|
||||
odm_set_rf_reg(dm, RF_PATH_A, RF_0x0, RFREGOFFSETMASK, 0x3ffff);
|
||||
odm_set_rf_reg(dm, RF_PATH_B, RF_0x0, RFREGOFFSETMASK, 0x3ffff);
|
||||
RF_DBG(dm, DBG_RF_IQK, "[LCK]LCK end!!!!!!!\n");
|
||||
}
|
||||
|
||||
/*LCK VERSION:0x1*/
|
||||
void
|
||||
phy_lc_calibrate_8822b(
|
||||
void *dm_void
|
||||
)
|
||||
/*LCK VERSION:0x2*/
|
||||
void phy_lc_calibrate_8822b(void *dm_void)
|
||||
{
|
||||
struct dm_struct *dm = (struct dm_struct *)dm_void;
|
||||
struct dm_struct *dm = (struct dm_struct *)dm_void;
|
||||
|
||||
_phy_lc_calibrate_8822b(dm);
|
||||
}
|
||||
|
||||
|
||||
|
||||
void configure_txpower_track_8822b(
|
||||
struct txpwrtrack_cfg *config
|
||||
)
|
||||
void configure_txpower_track_8822b(struct txpwrtrack_cfg *config)
|
||||
{
|
||||
config->swing_table_size_cck = TXSCALE_TABLE_SIZE;
|
||||
config->swing_table_size_ofdm = TXSCALE_TABLE_SIZE;
|
||||
@@ -464,84 +505,79 @@ void configure_txpower_track_8822b(
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
void phy_set_rf_path_switch_8822b(
|
||||
#if ((DM_ODM_SUPPORT_TYPE & ODM_AP) || (DM_ODM_SUPPORT_TYPE == ODM_CE))
|
||||
struct dm_struct *dm,
|
||||
void phy_set_rf_path_switch_8822b(struct dm_struct *dm, boolean is_main)
|
||||
#else
|
||||
void *adapter,
|
||||
void phy_set_rf_path_switch_8822b(void *adapter, boolean is_main)
|
||||
#endif
|
||||
boolean is_main
|
||||
)
|
||||
{
|
||||
#if !(DM_ODM_SUPPORT_TYPE & ODM_AP)
|
||||
#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
|
||||
HAL_DATA_TYPE *hal_data = GET_HAL_DATA(((PADAPTER)adapter));
|
||||
struct dm_struct *dm = &hal_data->DM_OutSrc;
|
||||
HAL_DATA_TYPE *hal_data = GET_HAL_DATA(((PADAPTER)adapter));
|
||||
struct dm_struct *dm = &hal_data->DM_OutSrc;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/*BY SY Request */
|
||||
odm_set_bb_reg(dm, 0x4C, (BIT(24) | BIT(23)), 0x2);
|
||||
odm_set_bb_reg(dm, R_0x4c, (BIT(24) | BIT(23)), 0x2);
|
||||
|
||||
odm_set_bb_reg(dm, 0x974, 0xff, 0xff);
|
||||
odm_set_bb_reg(dm, R_0x974, 0xff, 0xff);
|
||||
|
||||
/*odm_set_bb_reg(dm, 0x1991, 0x3, 0x0);*/
|
||||
odm_set_bb_reg(dm, 0x1990, (BIT(9) | BIT(8)), 0x0);
|
||||
#if 0
|
||||
/*odm_set_bb_reg(dm, R_0x1991, 0x3, 0x0);*/
|
||||
#endif
|
||||
odm_set_bb_reg(dm, R_0x1990, (BIT(9) | BIT(8)), 0x0);
|
||||
|
||||
/*odm_set_bb_reg(dm, 0xCBE, 0x8, 0x0);*/
|
||||
odm_set_bb_reg(dm, 0xCBC, BIT(19), 0x0);
|
||||
#if 0
|
||||
/*odm_set_bb_reg(dm, R_0xcbe, 0x8, 0x0);*/
|
||||
#endif
|
||||
odm_set_bb_reg(dm, R_0xcbc, BIT(19), 0x0);
|
||||
|
||||
odm_set_bb_reg(dm, 0xCB4, 0xff, 0x77);
|
||||
odm_set_bb_reg(dm, R_0xcb4, 0xff, 0x77);
|
||||
|
||||
odm_set_bb_reg(dm, 0x70, MASKBYTE3, 0x0e);
|
||||
odm_set_bb_reg(dm, 0x1704, MASKDWORD, 0x0000ff00);
|
||||
odm_set_bb_reg(dm, 0x1700, MASKDWORD, 0xc00f0038);
|
||||
odm_set_bb_reg(dm, R_0x70, MASKBYTE3, 0x0e);
|
||||
odm_set_bb_reg(dm, R_0x1704, MASKDWORD, 0x0000ff00);
|
||||
odm_set_bb_reg(dm, R_0x1700, MASKDWORD, 0xc00f0038);
|
||||
|
||||
if (is_main) {
|
||||
/*odm_set_bb_reg(dm, 0xCBD, 0x3, 0x2); WiFi */
|
||||
odm_set_bb_reg(dm, 0xCBC, (BIT(9) | BIT(8)), 0x2); /*WiFi */
|
||||
#if 0
|
||||
/*odm_set_bb_reg(dm, R_0xcbd, 0x3, 0x2); WiFi*/
|
||||
#endif
|
||||
odm_set_bb_reg(dm, R_0xcbc, (BIT(9) | BIT(8)), 0x2); /*WiFi*/
|
||||
} else {
|
||||
/*odm_set_bb_reg(dm, 0xCBD, 0x3, 0x1); BT*/
|
||||
odm_set_bb_reg(dm, 0xCBC, (BIT(9) | BIT(8)), 0x1); /*BT*/
|
||||
#if 0
|
||||
/*odm_set_bb_reg(dm, R_0xcbd, 0x3, 0x1); BT*/
|
||||
#endif
|
||||
odm_set_bb_reg(dm, R_0xcbc, (BIT(9) | BIT(8)), 0x1); /*BT*/
|
||||
}
|
||||
}
|
||||
|
||||
boolean
|
||||
_phy_query_rf_path_switch_8822b(
|
||||
#if ((DM_ODM_SUPPORT_TYPE & ODM_AP) || (DM_ODM_SUPPORT_TYPE == ODM_CE))
|
||||
struct dm_struct *dm
|
||||
boolean _phy_query_rf_path_switch_8822b(struct dm_struct *dm)
|
||||
#else
|
||||
void *adapter
|
||||
boolean _phy_query_rf_path_switch_8822b(void *adapter)
|
||||
#endif
|
||||
)
|
||||
{
|
||||
#if !(DM_ODM_SUPPORT_TYPE & ODM_AP)
|
||||
#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
|
||||
HAL_DATA_TYPE *hal_data = GET_HAL_DATA(((PADAPTER)adapter));
|
||||
struct dm_struct *dm = &hal_data->DM_OutSrc;
|
||||
HAL_DATA_TYPE *hal_data = GET_HAL_DATA(((PADAPTER)adapter));
|
||||
struct dm_struct *dm = &hal_data->DM_OutSrc;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
if (odm_get_bb_reg(dm, 0xCBC, (BIT(9) | BIT(8))) == 0x2) /*WiFi */
|
||||
if (odm_get_bb_reg(dm, R_0xcbc, (BIT(9) | BIT(8))) == 0x2) /*WiFi*/
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
boolean phy_query_rf_path_switch_8822b(
|
||||
#if ((DM_ODM_SUPPORT_TYPE & ODM_AP) || (DM_ODM_SUPPORT_TYPE == ODM_CE))
|
||||
struct dm_struct *dm
|
||||
boolean phy_query_rf_path_switch_8822b(struct dm_struct *dm)
|
||||
#else
|
||||
void *adapter
|
||||
boolean phy_query_rf_path_switch_8822b(void *adapter)
|
||||
#endif
|
||||
)
|
||||
{
|
||||
#if DISABLE_BB_RF
|
||||
return true;
|
||||
#endif
|
||||
|
||||
#if ((DM_ODM_SUPPORT_TYPE & ODM_AP) || (DM_ODM_SUPPORT_TYPE == ODM_CE))
|
||||
return _phy_query_rf_path_switch_8822b(dm);
|
||||
#else
|
||||
@@ -549,5 +585,4 @@ boolean phy_query_rf_path_switch_8822b(
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
#endif /* (RTL8822B_SUPPORT == 0)*/
|
||||
#endif /*(RTL8822B_SUPPORT == 0)*/
|
||||
|
||||
@@ -23,63 +23,43 @@
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
#ifndef __HAL_PHY_RF_8822B_H__
|
||||
#define __HAL_PHY_RF_8822B_H__
|
||||
#ifndef __HALRF_8822B_H__
|
||||
#define __HALRF_8822B_H__
|
||||
|
||||
#define AVG_THERMAL_NUM_8822B 4
|
||||
#define RF_T_METER_8822B 0x42
|
||||
#define AVG_THERMAL_NUM_8822B 4
|
||||
#define RF_T_METER_8822B 0x42
|
||||
|
||||
void configure_txpower_track_8822b(
|
||||
struct txpwrtrack_cfg *config
|
||||
);
|
||||
void configure_txpower_track_8822b(struct txpwrtrack_cfg *config);
|
||||
|
||||
void
|
||||
odm_tx_pwr_track_set_pwr8822b(
|
||||
void *dm_void,
|
||||
enum pwrtrack_method method,
|
||||
u8 rf_path,
|
||||
u8 channel_mapped_index
|
||||
);
|
||||
void odm_tx_pwr_track_set_pwr8822b(void *dm_void, enum pwrtrack_method method,
|
||||
u8 rf_path, u8 channel_mapped_index);
|
||||
|
||||
void
|
||||
get_delta_swing_table_8822b(
|
||||
void *dm_void,
|
||||
void get_delta_swing_table_8822b(void *dm_void,
|
||||
#if (DM_ODM_SUPPORT_TYPE & ODM_AP)
|
||||
u8 **temperature_up_a,
|
||||
u8 **temperature_down_a,
|
||||
u8 **temperature_up_b,
|
||||
u8 **temperature_down_b,
|
||||
u8 **temperature_up_cck_a,
|
||||
u8 **temperature_down_cck_a,
|
||||
u8 **temperature_up_cck_b,
|
||||
u8 **temperature_down_cck_b
|
||||
u8 **temperature_up_a, u8 **temperature_down_a,
|
||||
u8 **temperature_up_b, u8 **temperature_down_b,
|
||||
u8 **temperature_up_cck_a,
|
||||
u8 **temperature_down_cck_a,
|
||||
u8 **temperature_up_cck_b,
|
||||
u8 **temperature_down_cck_b
|
||||
#else
|
||||
u8 **temperature_up_a,
|
||||
u8 **temperature_down_a,
|
||||
u8 **temperature_up_b,
|
||||
u8 **temperature_down_b
|
||||
u8 **temperature_up_a, u8 **temperature_down_a,
|
||||
u8 **temperature_up_b,
|
||||
u8 **temperature_down_b
|
||||
#endif
|
||||
);
|
||||
);
|
||||
|
||||
void
|
||||
phy_lc_calibrate_8822b(
|
||||
void *dm_void
|
||||
);
|
||||
void aac_check_8822b(struct dm_struct *dm);
|
||||
|
||||
void
|
||||
halrf_rf_lna_setting_8822b(
|
||||
struct dm_struct *dm,
|
||||
enum phydm_lna_set type
|
||||
);
|
||||
void phy_lc_calibrate_8822b(void *dm_void);
|
||||
|
||||
void halrf_rf_lna_setting_8822b(struct dm_struct *dm, enum halrf_lna_set type);
|
||||
|
||||
void phy_set_rf_path_switch_8822b(
|
||||
#if ((DM_ODM_SUPPORT_TYPE & ODM_AP) || (DM_ODM_SUPPORT_TYPE == ODM_CE))
|
||||
struct dm_struct *dm,
|
||||
void phy_set_rf_path_switch_8822b(struct dm_struct *dm,
|
||||
#else
|
||||
void *adapter,
|
||||
void phy_set_rf_path_switch_8822b(void *adapter,
|
||||
#endif
|
||||
boolean is_main
|
||||
);
|
||||
boolean is_main);
|
||||
|
||||
#endif /* #ifndef __HAL_PHY_RF_8822B_H__ */
|
||||
#endif /*__HALRF_8822B_H__*/
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -23,56 +23,38 @@
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
#ifndef __PHYDM_IQK_8822B_H__
|
||||
#define __PHYDM_IQK_8822B_H__
|
||||
#ifndef __HALRF_IQK_8822B_H__
|
||||
#define __HALRF_IQK_8822B_H__
|
||||
|
||||
#if (RTL8822B_SUPPORT == 1)
|
||||
/*--------------------------Define Parameters-------------------------------*/
|
||||
#define MAC_REG_NUM_8822B 2
|
||||
/*@--------------------------Define Parameters-------------------------------*/
|
||||
#define MAC_REG_NUM_8822B 2
|
||||
#define BB_REG_NUM_8822B 15
|
||||
#define RF_REG_NUM_8822B 5
|
||||
#define LOK_delay_8822B 2
|
||||
#define GS_delay_8822B 2
|
||||
#define WBIQK_delay_8822B 2
|
||||
#define RF_REG_NUM_8822B 5
|
||||
#define LOK_delay_8822B 2
|
||||
#define GS_delay_8822B 2
|
||||
#define WBIQK_delay_8822B 2
|
||||
|
||||
#define TXIQK 0
|
||||
#define RXIQK 1
|
||||
#define SS_8822B 2
|
||||
/*---------------------------End Define Parameters-------------------------------*/
|
||||
/*@-------------------------End Define Parameters-------------------------*/
|
||||
#if !(DM_ODM_SUPPORT_TYPE & ODM_AP)
|
||||
void
|
||||
do_iqk_8822b(
|
||||
void *dm_void,
|
||||
u8 delta_thermal_index,
|
||||
u8 thermal_value,
|
||||
u8 threshold
|
||||
);
|
||||
void do_iqk_8822b(void *dm_void, u8 delta_thermal_index, u8 thermal_value,
|
||||
u8 threshold);
|
||||
#else
|
||||
void
|
||||
do_iqk_8822b(
|
||||
void *dm_void,
|
||||
u8 delta_thermal_index,
|
||||
u8 thermal_value,
|
||||
u8 threshold
|
||||
);
|
||||
void do_iqk_8822b(void *dm_void, u8 delta_thermal_index, u8 thermal_value,
|
||||
u8 threshold);
|
||||
#endif
|
||||
|
||||
void
|
||||
phy_iq_calibrate_8822b(
|
||||
void *dm_void,
|
||||
boolean clear,
|
||||
boolean segment_iqk
|
||||
);
|
||||
void phy_iq_calibrate_8822b(void *dm_void, boolean clear, boolean segment_iqk);
|
||||
|
||||
void
|
||||
do_imr_test_8822b(
|
||||
void *dm_void
|
||||
);
|
||||
void do_imr_test_8822b(void *dm_void);
|
||||
|
||||
#else /* (RTL8822B_SUPPORT == 0)*/
|
||||
#else /* (RTL8822B_SUPPORT == 0)*/
|
||||
|
||||
#define phy_iq_calibrate_8822b(_pdm_void, clear, segment_iqk)
|
||||
|
||||
#endif /* RTL8822B_SUPPORT */
|
||||
#endif /* RTL8822B_SUPPORT */
|
||||
|
||||
#endif /* #ifndef __PHYDM_IQK_8822B_H__*/
|
||||
#endif /*__HALRF_IQK_8822B_H__*/
|
||||
|
||||
1057
hal/phydm/halrf/rtl8822b/halrf_rfk_init_8822b.c
Normal file
1057
hal/phydm/halrf/rtl8822b/halrf_rfk_init_8822b.c
Normal file
File diff suppressed because it is too large
Load Diff
29
hal/phydm/halrf/rtl8822b/halrf_rfk_init_8822b.h
Normal file
29
hal/phydm/halrf/rtl8822b/halrf_rfk_init_8822b.h
Normal file
@@ -0,0 +1,29 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Copyright(c) 2007 - 2017 Realtek Corporation.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of version 2 of the GNU General Public License as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
* more details.
|
||||
*
|
||||
* The full GNU General Public License is included in this distribution in the
|
||||
* file called LICENSE.
|
||||
*
|
||||
* Contact Information:
|
||||
* wlanfae <wlanfae@realtek.com>
|
||||
* Realtek Corporation, No. 2, Innovation Road II, Hsinchu Science Park,
|
||||
* Hsinchu 300, Taiwan.
|
||||
*
|
||||
* Larry Finger <Larry.Finger@lwfinger.net>
|
||||
*
|
||||
*****************************************************************************/
|
||||
#ifndef __HALRF_RFK_INIT_8822B_H__
|
||||
#define __HALRF_RFK_INIT_8822B_H__
|
||||
|
||||
void odm_read_and_config_mp_8822b_cal_init(void *dm_void);
|
||||
#endif
|
||||
Reference in New Issue
Block a user