|
@@ -16061,52 +16061,8 @@ static void wlc_phy_workarounds_nphy_gainctrl(struct brcms_phy *pi)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
-static void wlc_phy_workarounds_nphy(struct brcms_phy *pi)
|
|
|
|
|
|
+static void wlc_phy_workarounds_nphy_rev7(struct brcms_phy *pi)
|
|
{
|
|
{
|
|
- static const u8 rfseq_rx2tx_events[] = {
|
|
|
|
- NPHY_RFSEQ_CMD_NOP,
|
|
|
|
- NPHY_RFSEQ_CMD_RXG_FBW,
|
|
|
|
- NPHY_RFSEQ_CMD_TR_SWITCH,
|
|
|
|
- NPHY_RFSEQ_CMD_CLR_HIQ_DIS,
|
|
|
|
- NPHY_RFSEQ_CMD_RXPD_TXPD,
|
|
|
|
- NPHY_RFSEQ_CMD_TX_GAIN,
|
|
|
|
- NPHY_RFSEQ_CMD_EXT_PA
|
|
|
|
- };
|
|
|
|
- u8 rfseq_rx2tx_dlys[] = { 8, 6, 6, 2, 4, 60, 1 };
|
|
|
|
- static const u8 rfseq_tx2rx_events[] = {
|
|
|
|
- NPHY_RFSEQ_CMD_NOP,
|
|
|
|
- NPHY_RFSEQ_CMD_EXT_PA,
|
|
|
|
- NPHY_RFSEQ_CMD_TX_GAIN,
|
|
|
|
- NPHY_RFSEQ_CMD_RXPD_TXPD,
|
|
|
|
- NPHY_RFSEQ_CMD_TR_SWITCH,
|
|
|
|
- NPHY_RFSEQ_CMD_RXG_FBW,
|
|
|
|
- NPHY_RFSEQ_CMD_CLR_HIQ_DIS
|
|
|
|
- };
|
|
|
|
- static const u8 rfseq_tx2rx_dlys[] = { 8, 6, 2, 4, 4, 6, 1 };
|
|
|
|
- static const u8 rfseq_tx2rx_events_rev3[] = {
|
|
|
|
- NPHY_REV3_RFSEQ_CMD_EXT_PA,
|
|
|
|
- NPHY_REV3_RFSEQ_CMD_INT_PA_PU,
|
|
|
|
- NPHY_REV3_RFSEQ_CMD_TX_GAIN,
|
|
|
|
- NPHY_REV3_RFSEQ_CMD_RXPD_TXPD,
|
|
|
|
- NPHY_REV3_RFSEQ_CMD_TR_SWITCH,
|
|
|
|
- NPHY_REV3_RFSEQ_CMD_RXG_FBW,
|
|
|
|
- NPHY_REV3_RFSEQ_CMD_CLR_HIQ_DIS,
|
|
|
|
- NPHY_REV3_RFSEQ_CMD_END
|
|
|
|
- };
|
|
|
|
- static const u8 rfseq_tx2rx_dlys_rev3[] = { 8, 4, 2, 2, 4, 4, 6, 1 };
|
|
|
|
- u8 rfseq_rx2tx_events_rev3[] = {
|
|
|
|
- NPHY_REV3_RFSEQ_CMD_NOP,
|
|
|
|
- NPHY_REV3_RFSEQ_CMD_RXG_FBW,
|
|
|
|
- NPHY_REV3_RFSEQ_CMD_TR_SWITCH,
|
|
|
|
- NPHY_REV3_RFSEQ_CMD_CLR_HIQ_DIS,
|
|
|
|
- NPHY_REV3_RFSEQ_CMD_RXPD_TXPD,
|
|
|
|
- NPHY_REV3_RFSEQ_CMD_TX_GAIN,
|
|
|
|
- NPHY_REV3_RFSEQ_CMD_INT_PA_PU,
|
|
|
|
- NPHY_REV3_RFSEQ_CMD_EXT_PA,
|
|
|
|
- NPHY_REV3_RFSEQ_CMD_END
|
|
|
|
- };
|
|
|
|
- u8 rfseq_rx2tx_dlys_rev3[] = { 8, 6, 6, 4, 4, 18, 42, 1, 1 };
|
|
|
|
-
|
|
|
|
static const u8 rfseq_rx2tx_events_rev3_ipa[] = {
|
|
static const u8 rfseq_rx2tx_events_rev3_ipa[] = {
|
|
NPHY_REV3_RFSEQ_CMD_NOP,
|
|
NPHY_REV3_RFSEQ_CMD_NOP,
|
|
NPHY_REV3_RFSEQ_CMD_RXG_FBW,
|
|
NPHY_REV3_RFSEQ_CMD_RXG_FBW,
|
|
@@ -16120,29 +16076,15 @@ static void wlc_phy_workarounds_nphy(struct brcms_phy *pi)
|
|
};
|
|
};
|
|
static const u8 rfseq_rx2tx_dlys_rev3_ipa[] = { 8, 6, 6, 4, 4, 16, 43, 1, 1 };
|
|
static const u8 rfseq_rx2tx_dlys_rev3_ipa[] = { 8, 6, 6, 4, 4, 16, 43, 1, 1 };
|
|
static const u16 rfseq_rx2tx_dacbufpu_rev7[] = { 0x10f, 0x10f };
|
|
static const u16 rfseq_rx2tx_dacbufpu_rev7[] = { 0x10f, 0x10f };
|
|
-
|
|
|
|
- s16 alpha0, alpha1, alpha2;
|
|
|
|
- s16 beta0, beta1, beta2;
|
|
|
|
- u32 leg_data_weights, ht_data_weights, nss1_data_weights,
|
|
|
|
- stbc_data_weights;
|
|
|
|
|
|
+ u32 leg_data_weights;
|
|
u8 chan_freq_range = 0;
|
|
u8 chan_freq_range = 0;
|
|
static const u16 dac_control = 0x0002;
|
|
static const u16 dac_control = 0x0002;
|
|
u16 aux_adc_vmid_rev7_core0[] = { 0x8e, 0x96, 0x96, 0x96 };
|
|
u16 aux_adc_vmid_rev7_core0[] = { 0x8e, 0x96, 0x96, 0x96 };
|
|
u16 aux_adc_vmid_rev7_core1[] = { 0x8f, 0x9f, 0x9f, 0x96 };
|
|
u16 aux_adc_vmid_rev7_core1[] = { 0x8f, 0x9f, 0x9f, 0x96 };
|
|
- u16 aux_adc_vmid_rev4[] = { 0xa2, 0xb4, 0xb4, 0x89 };
|
|
|
|
- u16 aux_adc_vmid_rev3[] = { 0xa2, 0xb4, 0xb4, 0x89 };
|
|
|
|
- u16 *aux_adc_vmid;
|
|
|
|
u16 aux_adc_gain_rev7[] = { 0x02, 0x02, 0x02, 0x02 };
|
|
u16 aux_adc_gain_rev7[] = { 0x02, 0x02, 0x02, 0x02 };
|
|
- u16 aux_adc_gain_rev4[] = { 0x02, 0x02, 0x02, 0x00 };
|
|
|
|
- u16 aux_adc_gain_rev3[] = { 0x02, 0x02, 0x02, 0x00 };
|
|
|
|
- u16 *aux_adc_gain;
|
|
|
|
- static const u16 sk_adc_vmid[] = { 0xb4, 0xb4, 0xb4, 0x24 };
|
|
|
|
- static const u16 sk_adc_gain[] = { 0x02, 0x02, 0x02, 0x02 };
|
|
|
|
s32 min_nvar_val = 0x18d;
|
|
s32 min_nvar_val = 0x18d;
|
|
s32 min_nvar_offset_6mbps = 20;
|
|
s32 min_nvar_offset_6mbps = 20;
|
|
u8 pdetrange;
|
|
u8 pdetrange;
|
|
- u8 triso;
|
|
|
|
- u16 regval;
|
|
|
|
u16 afectrl_adc_ctrl1_rev7 = 0x20;
|
|
u16 afectrl_adc_ctrl1_rev7 = 0x20;
|
|
u16 afectrl_adc_ctrl2_rev7 = 0x0;
|
|
u16 afectrl_adc_ctrl2_rev7 = 0x0;
|
|
u16 rfseq_rx2tx_lpf_h_hpc_rev7 = 0x77;
|
|
u16 rfseq_rx2tx_lpf_h_hpc_rev7 = 0x77;
|
|
@@ -16171,17 +16113,6 @@ static void wlc_phy_workarounds_nphy(struct brcms_phy *pi)
|
|
u16 freq;
|
|
u16 freq;
|
|
int coreNum;
|
|
int coreNum;
|
|
|
|
|
|
- if (CHSPEC_IS5G(pi->radio_chanspec))
|
|
|
|
- wlc_phy_classifier_nphy(pi, NPHY_ClassifierCtrl_cck_en, 0);
|
|
|
|
- else
|
|
|
|
- wlc_phy_classifier_nphy(pi, NPHY_ClassifierCtrl_cck_en, 1);
|
|
|
|
-
|
|
|
|
- if (pi->phyhang_avoid)
|
|
|
|
- wlc_phy_stay_in_carriersearch_nphy(pi, true);
|
|
|
|
-
|
|
|
|
- or_phy_reg(pi, 0xb1, NPHY_IQFlip_ADC1 | NPHY_IQFlip_ADC2);
|
|
|
|
-
|
|
|
|
- if (NREV_GE(pi->pubpi.phy_rev, 7)) {
|
|
|
|
|
|
|
|
if (NREV_IS(pi->pubpi.phy_rev, 7)) {
|
|
if (NREV_IS(pi->pubpi.phy_rev, 7)) {
|
|
mod_phy_reg(pi, 0x221, (0x1 << 4), (1 << 4));
|
|
mod_phy_reg(pi, 0x221, (0x1 << 4), (1 << 4));
|
|
@@ -16703,8 +16634,62 @@ static void wlc_phy_workarounds_nphy(struct brcms_phy *pi)
|
|
&aux_adc_gain_rev7);
|
|
&aux_adc_gain_rev7);
|
|
wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_AFECTRL, 4, 0x1c, 16,
|
|
wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_AFECTRL, 4, 0x1c, 16,
|
|
&aux_adc_gain_rev7);
|
|
&aux_adc_gain_rev7);
|
|
|
|
+}
|
|
|
|
|
|
- } else if (NREV_GE(pi->pubpi.phy_rev, 3)) {
|
|
|
|
|
|
+static void wlc_phy_workarounds_nphy_rev3(struct brcms_phy *pi)
|
|
|
|
+{
|
|
|
|
+ static const u8 rfseq_tx2rx_events_rev3[] = {
|
|
|
|
+ NPHY_REV3_RFSEQ_CMD_EXT_PA,
|
|
|
|
+ NPHY_REV3_RFSEQ_CMD_INT_PA_PU,
|
|
|
|
+ NPHY_REV3_RFSEQ_CMD_TX_GAIN,
|
|
|
|
+ NPHY_REV3_RFSEQ_CMD_RXPD_TXPD,
|
|
|
|
+ NPHY_REV3_RFSEQ_CMD_TR_SWITCH,
|
|
|
|
+ NPHY_REV3_RFSEQ_CMD_RXG_FBW,
|
|
|
|
+ NPHY_REV3_RFSEQ_CMD_CLR_HIQ_DIS,
|
|
|
|
+ NPHY_REV3_RFSEQ_CMD_END
|
|
|
|
+ };
|
|
|
|
+ static const u8 rfseq_tx2rx_dlys_rev3[] = { 8, 4, 2, 2, 4, 4, 6, 1 };
|
|
|
|
+ u8 rfseq_rx2tx_events_rev3[] = {
|
|
|
|
+ NPHY_REV3_RFSEQ_CMD_NOP,
|
|
|
|
+ NPHY_REV3_RFSEQ_CMD_RXG_FBW,
|
|
|
|
+ NPHY_REV3_RFSEQ_CMD_TR_SWITCH,
|
|
|
|
+ NPHY_REV3_RFSEQ_CMD_CLR_HIQ_DIS,
|
|
|
|
+ NPHY_REV3_RFSEQ_CMD_RXPD_TXPD,
|
|
|
|
+ NPHY_REV3_RFSEQ_CMD_TX_GAIN,
|
|
|
|
+ NPHY_REV3_RFSEQ_CMD_INT_PA_PU,
|
|
|
|
+ NPHY_REV3_RFSEQ_CMD_EXT_PA,
|
|
|
|
+ NPHY_REV3_RFSEQ_CMD_END
|
|
|
|
+ };
|
|
|
|
+ u8 rfseq_rx2tx_dlys_rev3[] = { 8, 6, 6, 4, 4, 18, 42, 1, 1 };
|
|
|
|
+ static const u8 rfseq_rx2tx_events_rev3_ipa[] = {
|
|
|
|
+ NPHY_REV3_RFSEQ_CMD_NOP,
|
|
|
|
+ NPHY_REV3_RFSEQ_CMD_RXG_FBW,
|
|
|
|
+ NPHY_REV3_RFSEQ_CMD_TR_SWITCH,
|
|
|
|
+ NPHY_REV3_RFSEQ_CMD_CLR_HIQ_DIS,
|
|
|
|
+ NPHY_REV3_RFSEQ_CMD_RXPD_TXPD,
|
|
|
|
+ NPHY_REV3_RFSEQ_CMD_TX_GAIN,
|
|
|
|
+ NPHY_REV3_RFSEQ_CMD_CLR_RXRX_BIAS,
|
|
|
|
+ NPHY_REV3_RFSEQ_CMD_INT_PA_PU,
|
|
|
|
+ NPHY_REV3_RFSEQ_CMD_END
|
|
|
|
+ };
|
|
|
|
+ static const u8 rfseq_rx2tx_dlys_rev3_ipa[] = { 8, 6, 6, 4, 4, 16, 43, 1, 1 };
|
|
|
|
+ s16 alpha0, alpha1, alpha2;
|
|
|
|
+ s16 beta0, beta1, beta2;
|
|
|
|
+ u32 leg_data_weights, ht_data_weights, nss1_data_weights,
|
|
|
|
+ stbc_data_weights;
|
|
|
|
+ u8 chan_freq_range = 0;
|
|
|
|
+ static const u16 dac_control = 0x0002;
|
|
|
|
+ u16 aux_adc_vmid_rev4[] = { 0xa2, 0xb4, 0xb4, 0x89 };
|
|
|
|
+ u16 aux_adc_vmid_rev3[] = { 0xa2, 0xb4, 0xb4, 0x89 };
|
|
|
|
+ u16 *aux_adc_vmid;
|
|
|
|
+ u16 aux_adc_gain_rev4[] = { 0x02, 0x02, 0x02, 0x00 };
|
|
|
|
+ u16 aux_adc_gain_rev3[] = { 0x02, 0x02, 0x02, 0x00 };
|
|
|
|
+ u16 *aux_adc_gain;
|
|
|
|
+ static const u16 sk_adc_vmid[] = { 0xb4, 0xb4, 0xb4, 0x24 };
|
|
|
|
+ static const u16 sk_adc_gain[] = { 0x02, 0x02, 0x02, 0x02 };
|
|
|
|
+ s32 min_nvar_val = 0x18d;
|
|
|
|
+ u8 pdetrange;
|
|
|
|
+ u8 triso;
|
|
|
|
|
|
write_phy_reg(pi, 0x23f, 0x1f8);
|
|
write_phy_reg(pi, 0x23f, 0x1f8);
|
|
write_phy_reg(pi, 0x240, 0x1f8);
|
|
write_phy_reg(pi, 0x240, 0x1f8);
|
|
@@ -17030,7 +17015,33 @@ static void wlc_phy_workarounds_nphy(struct brcms_phy *pi)
|
|
MHF4_BPHY_TXCORE0,
|
|
MHF4_BPHY_TXCORE0,
|
|
MHF4_BPHY_TXCORE0, BRCM_BAND_ALL);
|
|
MHF4_BPHY_TXCORE0, BRCM_BAND_ALL);
|
|
}
|
|
}
|
|
- } else {
|
|
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+void wlc_phy_workarounds_nphy_rev1(struct brcms_phy *pi)
|
|
|
|
+{
|
|
|
|
+ static const u8 rfseq_rx2tx_events[] = {
|
|
|
|
+ NPHY_RFSEQ_CMD_NOP,
|
|
|
|
+ NPHY_RFSEQ_CMD_RXG_FBW,
|
|
|
|
+ NPHY_RFSEQ_CMD_TR_SWITCH,
|
|
|
|
+ NPHY_RFSEQ_CMD_CLR_HIQ_DIS,
|
|
|
|
+ NPHY_RFSEQ_CMD_RXPD_TXPD,
|
|
|
|
+ NPHY_RFSEQ_CMD_TX_GAIN,
|
|
|
|
+ NPHY_RFSEQ_CMD_EXT_PA
|
|
|
|
+ };
|
|
|
|
+ u8 rfseq_rx2tx_dlys[] = { 8, 6, 6, 2, 4, 60, 1 };
|
|
|
|
+ static const u8 rfseq_tx2rx_events[] = {
|
|
|
|
+ NPHY_RFSEQ_CMD_NOP,
|
|
|
|
+ NPHY_RFSEQ_CMD_EXT_PA,
|
|
|
|
+ NPHY_RFSEQ_CMD_TX_GAIN,
|
|
|
|
+ NPHY_RFSEQ_CMD_RXPD_TXPD,
|
|
|
|
+ NPHY_RFSEQ_CMD_TR_SWITCH,
|
|
|
|
+ NPHY_RFSEQ_CMD_RXG_FBW,
|
|
|
|
+ NPHY_RFSEQ_CMD_CLR_HIQ_DIS
|
|
|
|
+ };
|
|
|
|
+ static const u8 rfseq_tx2rx_dlys[] = { 8, 6, 2, 4, 4, 6, 1 };
|
|
|
|
+ s16 alpha0, alpha1, alpha2;
|
|
|
|
+ s16 beta0, beta1, beta2;
|
|
|
|
+ u16 regval;
|
|
|
|
|
|
if (pi->sh->boardflags2 & BFL2_SKWRKFEM_BRD ||
|
|
if (pi->sh->boardflags2 & BFL2_SKWRKFEM_BRD ||
|
|
(pi->sh->boardtype == 0x8b)) {
|
|
(pi->sh->boardtype == 0x8b)) {
|
|
@@ -17128,7 +17139,26 @@ static void wlc_phy_workarounds_nphy(struct brcms_phy *pi)
|
|
mod_phy_reg(pi, 0x221,
|
|
mod_phy_reg(pi, 0x221,
|
|
NPHY_FORCESIG_DECODEGATEDCLKS,
|
|
NPHY_FORCESIG_DECODEGATEDCLKS,
|
|
NPHY_FORCESIG_DECODEGATEDCLKS);
|
|
NPHY_FORCESIG_DECODEGATEDCLKS);
|
|
- }
|
|
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static void wlc_phy_workarounds_nphy(struct brcms_phy *pi)
|
|
|
|
+{
|
|
|
|
+ if (CHSPEC_IS5G(pi->radio_chanspec))
|
|
|
|
+ wlc_phy_classifier_nphy(pi, NPHY_ClassifierCtrl_cck_en, 0);
|
|
|
|
+ else
|
|
|
|
+ wlc_phy_classifier_nphy(pi, NPHY_ClassifierCtrl_cck_en, 1);
|
|
|
|
+
|
|
|
|
+ if (pi->phyhang_avoid)
|
|
|
|
+ wlc_phy_stay_in_carriersearch_nphy(pi, true);
|
|
|
|
+
|
|
|
|
+ or_phy_reg(pi, 0xb1, NPHY_IQFlip_ADC1 | NPHY_IQFlip_ADC2);
|
|
|
|
+
|
|
|
|
+ if (NREV_GE(pi->pubpi.phy_rev, 7))
|
|
|
|
+ wlc_phy_workarounds_nphy_rev7(pi);
|
|
|
|
+ else if (NREV_GE(pi->pubpi.phy_rev, 3))
|
|
|
|
+ wlc_phy_workarounds_nphy_rev3(pi);
|
|
|
|
+ else
|
|
|
|
+ wlc_phy_workarounds_nphy_rev1(pi);
|
|
|
|
|
|
if (pi->phyhang_avoid)
|
|
if (pi->phyhang_avoid)
|
|
wlc_phy_stay_in_carriersearch_nphy(pi, false);
|
|
wlc_phy_stay_in_carriersearch_nphy(pi, false);
|