brcmsmac: bcm4313 iPA related patches
cover brcmsmac: bcm4313 iPA related patches
This series replaces the patch "[PATCH 12/12] brcmsmac: support 4313iPA" with Message-ID: <[email protected]>.
It has been split up into individual patches. Please test this series especially if you had issues with the original commit b6fc28a that was reverted.
Arend van Spriel (13):
brcmsmac: cosmetic change in phy_lcn.c
brcmsmac: change pa_gain for bcm4313 iPA
brcmsmac: use ARRAY_SIZE in phytbl_lcn.c
brcmsmac: add switch control table for BCM4313 iPA BT-combo cards
brcmsmac: add debug info message providing phy and radio info
brcmsmac: update transmit gain table for lcn phy
brcmsmac: change lcnphy receive i/q calibration routine
brcmsmac: fix TSSI idle estimation
brcmsmac: avoid calling set_txpwr_by_index() twice
brcmsmac: rework switch control table init including iPA BT-combo
brcmsmac: correct phy registers for TSSI-based power control
brcmsmac: reinitialize TSSI power control upon channel switch
brcmsmac: add support for BCM4313 iPA variant
drivers/net/wireless/brcm80211/brcmsmac/main.c | 4 +- .../net/wireless/brcm80211/brcmsmac/phy/phy_lcn.c | 397 +++++++++++-------- .../wireless/brcm80211/brcmsmac/phy/phytbl_lcn.c | 405 +++++++++++--------- .../wireless/brcm80211/brcmsmac/phy/phytbl_lcn.h | 1 + 4 files changed, 475 insertions(+), 332 deletions(-)
Signature · 1 line
1.7.10.4
PATCH v2 1/13 brcmsmac: cosmetic change in phy_lcn.c
Cleaning up some code fragments reducing indentation and uncluttering some lines. Apart from whitespace there are no actual code changes made.
--- .../net/wireless/brcm80211/brcmsmac/phy/phy_lcn.c | 213 ++++++++++---------- 1 file changed, 106 insertions(+), 107 deletions(-)
drivers/net/wireless/brcm80211/brcmsmac/phy/phy_lcn.c +106 -107
@@ -1137,8 +1137,9 @@ wlc_lcnphy_set_rx_gain_by_distribution(struct brcms_phy *pi, gain0_15 = ((biq1 &0xf ) <<12 ) | ((tia &0xf ) <<8 ) | ((lna2 &0x3 ) <<6 ) | - ((lna2 & -0x3 ) <<4 ) | ((lna1 &0x3 ) <<2 ) | ((lna1 &0x3 ) <<0 ); + ((lna2 &0x3 ) <<4 ) | + ((lna1 &0x3 ) <<2 ) | + ((lna1 &0x3 ) <<0 );mod_phy_reg (pi,0x4b6 , (0xffff <<0 ), gain0_15 <<0 );mod_phy_reg (pi,0x4b7 , (0xf <<0 ), gain16_19 <<0 );
@@ -1368,126 +1369,124 @@ wlc_lcnphy_rx_iq_cal(struct brcms_phy *pi, goto cal_done; } -if (module ==1 ) { +WARN_ON (module !=1 ); + tx_pwr_ctrl =wlc_lcnphy_get_tx_pwr_ctrl (pi); +wlc_lcnphy_set_tx_pwr_ctrl (pi,LCNPHY_TX_PWR_CTRL_OFF ); - tx_pwr_ctrl =wlc_lcnphy_get_tx_pwr_ctrl (pi); -wlc_lcnphy_set_tx_pwr_ctrl (pi,LCNPHY_TX_PWR_CTRL_OFF ); +for (i =0 ; i <11 ; i++) + values_to_save[i] = +read_radio_reg (pi, rxiq_cal_rf_reg[i]); + Core1TxControl_old =read_phy_reg (pi,0x631 ); + +or_phy_reg (pi,0x631 ,0x0015 ); + + RFOverride0_old =read_phy_reg (pi,0x44c ); + RFOverrideVal0_old =read_phy_reg (pi,0x44d ); + rfoverride2_old =read_phy_reg (pi,0x4b0 ); + rfoverride2val_old =read_phy_reg (pi,0x4b1 ); + rfoverride3_old =read_phy_reg (pi,0x4f9 ); + rfoverride3val_old =read_phy_reg (pi,0x4fa ); + rfoverride4_old =read_phy_reg (pi,0x938 ); + rfoverride4val_old =read_phy_reg (pi,0x939 ); + afectrlovr_old =read_phy_reg (pi,0x43b ); + afectrlovrval_old =read_phy_reg (pi,0x43c ); + old_sslpnCalibClkEnCtrl =read_phy_reg (pi,0x6da ); + old_sslpnRxFeClkEnCtrl =read_phy_reg (pi,0x6db ); -for (i =0 ; i <11 ; i++) - values_to_save[i] = -read_radio_reg (pi, rxiq_cal_rf_reg[i]); - Core1TxControl_old =read_phy_reg (pi,0x631 ); - -or_phy_reg (pi,0x631 ,0x0015 ); - - RFOverride0_old =read_phy_reg (pi,0x44c ); - RFOverrideVal0_old =read_phy_reg (pi,0x44d ); - rfoverride2_old =read_phy_reg (pi,0x4b0 ); - rfoverride2val_old =read_phy_reg (pi,0x4b1 ); - rfoverride3_old =read_phy_reg (pi,0x4f9 ); - rfoverride3val_old =read_phy_reg (pi,0x4fa ); - rfoverride4_old =read_phy_reg (pi,0x938 ); - rfoverride4val_old =read_phy_reg (pi,0x939 ); - afectrlovr_old =read_phy_reg (pi,0x43b ); - afectrlovrval_old =read_phy_reg (pi,0x43c ); - old_sslpnCalibClkEnCtrl =read_phy_reg (pi,0x6da ); - old_sslpnRxFeClkEnCtrl =read_phy_reg (pi,0x6db ); - - tx_gain_override_old =wlc_lcnphy_tx_gain_override_enabled (pi); -if (tx_gain_override_old) { -wlc_lcnphy_get_tx_gain (pi, &old_gains); - tx_gain_index_old = pi_lcn->lcnphy_current_index; - } + tx_gain_override_old =wlc_lcnphy_tx_gain_override_enabled (pi); +if (tx_gain_override_old) { +wlc_lcnphy_get_tx_gain (pi, &old_gains); + tx_gain_index_old = pi_lcn->lcnphy_current_index; + } -wlc_lcnphy_set_tx_pwr_by_index (pi, tx_gain_idx); +wlc_lcnphy_set_tx_pwr_by_index (pi, tx_gain_idx); -mod_phy_reg (pi,0x4f9 , (0x1 <<0 ),1 <<0 ); -mod_phy_reg (pi,0x4fa , (0x1 <<0 ),0 <<0 ); +mod_phy_reg (pi,0x4f9 , (0x1 <<0 ),1 <<0 ); +mod_phy_reg (pi,0x4fa , (0x1 <<0 ),0 <<0 ); -mod_phy_reg (pi,0x43b , (0x1 <<1 ),1 <<1 ); -mod_phy_reg (pi,0x43c , (0x1 <<1 ),0 <<1 ); +mod_phy_reg (pi,0x43b , (0x1 <<1 ),1 <<1 ); +mod_phy_reg (pi,0x43c , (0x1 <<1 ),0 <<1 ); -write_radio_reg (pi,RADIO_2064_REG116 ,0x06 ); -write_radio_reg (pi,RADIO_2064_REG12C ,0x07 ); -write_radio_reg (pi,RADIO_2064_REG06A ,0xd3 ); -write_radio_reg (pi,RADIO_2064_REG098 ,0x03 ); -write_radio_reg (pi,RADIO_2064_REG00B ,0x7 ); -mod_radio_reg (pi,RADIO_2064_REG113 ,1 <<4 ,1 <<4 ); -write_radio_reg (pi,RADIO_2064_REG01D ,0x01 ); -write_radio_reg (pi,RADIO_2064_REG114 ,0x01 ); -write_radio_reg (pi,RADIO_2064_REG02E ,0x10 ); -write_radio_reg (pi,RADIO_2064_REG12A ,0x08 ); - -mod_phy_reg (pi,0x938 , (0x1 <<0 ),1 <<0 ); -mod_phy_reg (pi,0x939 , (0x1 <<0 ),0 <<0 ); -mod_phy_reg (pi,0x938 , (0x1 <<1 ),1 <<1 ); -mod_phy_reg (pi,0x939 , (0x1 <<1 ),1 <<1 ); -mod_phy_reg (pi,0x938 , (0x1 <<2 ),1 <<2 ); -mod_phy_reg (pi,0x939 , (0x1 <<2 ),1 <<2 ); -mod_phy_reg (pi,0x938 , (0x1 <<3 ),1 <<3 ); -mod_phy_reg (pi,0x939 , (0x1 <<3 ),1 <<3 ); -mod_phy_reg (pi,0x938 , (0x1 <<5 ),1 <<5 ); -mod_phy_reg (pi,0x939 , (0x1 <<5 ),0 <<5 ); - -mod_phy_reg (pi,0x43b , (0x1 <<0 ),1 <<0 ); -mod_phy_reg (pi,0x43c , (0x1 <<0 ),0 <<0 ); - -wlc_lcnphy_start_tx_tone (pi,2000 ,120 ,0 ); -write_phy_reg (pi,0x6da ,0xffff ); -or_phy_reg (pi,0x6db ,0x3 ); -wlc_lcnphy_set_trsw_override (pi, tx_switch, rx_switch); -wlc_lcnphy_rx_gain_override_enable (pi, true); - - tia_gain =8 ; - rx_pwr_threshold =950 ; -while (tia_gain >0 ) { - tia_gain -=1 ; -wlc_lcnphy_set_rx_gain_by_distribution (pi, -0 ,0 ,2 ,2 , - (u16 ) - tia_gain,1 ,0 ); -udelay (500 ); +write_radio_reg (pi,RADIO_2064_REG116 ,0x06 ); +write_radio_reg (pi,RADIO_2064_REG12C ,0x07 ); +write_radio_reg (pi,RADIO_2064_REG06A ,0xd3 ); +write_radio_reg (pi,RADIO_2064_REG098 ,0x03 ); +write_radio_reg (pi,RADIO_2064_REG00B ,0x7 ); +mod_radio_reg (pi,RADIO_2064_REG113 ,1 <<4 ,1 <<4 ); +write_radio_reg (pi,RADIO_2064_REG01D ,0x01 ); +write_radio_reg (pi,RADIO_2064_REG114 ,0x01 ); +write_radio_reg (pi,RADIO_2064_REG02E ,0x10 ); +write_radio_reg (pi,RADIO_2064_REG12A ,0x08 ); + +mod_phy_reg (pi,0x938 , (0x1 <<0 ),1 <<0 ); +mod_phy_reg (pi,0x939 , (0x1 <<0 ),0 <<0 ); +mod_phy_reg (pi,0x938 , (0x1 <<1 ),1 <<1 ); +mod_phy_reg (pi,0x939 , (0x1 <<1 ),1 <<1 ); +mod_phy_reg (pi,0x938 , (0x1 <<2 ),1 <<2 ); +mod_phy_reg (pi,0x939 , (0x1 <<2 ),1 <<2 ); +mod_phy_reg (pi,0x938 , (0x1 <<3 ),1 <<3 ); +mod_phy_reg (pi,0x939 , (0x1 <<3 ),1 <<3 ); +mod_phy_reg (pi,0x938 , (0x1 <<5 ),1 <<5 ); +mod_phy_reg (pi,0x939 , (0x1 <<5 ),0 <<5 ); - received_power = -wlc_lcnphy_measure_digital_power (pi,2000 ); -if (received_power < rx_pwr_threshold) -break ; - } - result =wlc_lcnphy_calc_rx_iq_comp (pi,0xffff ); +mod_phy_reg (pi,0x43b , (0x1 <<0 ),1 <<0 ); +mod_phy_reg (pi,0x43c , (0x1 <<0 ),0 <<0 ); -wlc_lcnphy_stop_tx_tone (pi); +wlc_lcnphy_start_tx_tone (pi,2000 ,120 ,0 ); +write_phy_reg (pi,0x6da ,0xffff ); +or_phy_reg (pi,0x6db ,0x3 ); +wlc_lcnphy_set_trsw_override (pi, tx_switch, rx_switch); +wlc_lcnphy_rx_gain_override_enable (pi, true); -write_phy_reg (pi,0x631 , Core1TxControl_old); + tia_gain =8 ; + rx_pwr_threshold =950 ; +while (tia_gain >0 ) { + tia_gain -=1 ; +wlc_lcnphy_set_rx_gain_by_distribution (pi, +0 ,0 ,2 ,2 , + (u16 ) + tia_gain,1 ,0 ); +udelay (500 ); -write_phy_reg (pi,0x44c , RFOverrideVal0_old); -write_phy_reg (pi,0x44d , RFOverrideVal0_old); -write_phy_reg (pi,0x4b0 , rfoverride2_old); -write_phy_reg (pi,0x4b1 , rfoverride2val_old); -write_phy_reg (pi,0x4f9 , rfoverride3_old); -write_phy_reg (pi,0x4fa , rfoverride3val_old); -write_phy_reg (pi,0x938 , rfoverride4_old); -write_phy_reg (pi,0x939 , rfoverride4val_old); -write_phy_reg (pi,0x43b , afectrlovr_old); -write_phy_reg (pi,0x43c , afectrlovrval_old); -write_phy_reg (pi,0x6da , old_sslpnCalibClkEnCtrl); -write_phy_reg (pi,0x6db , old_sslpnRxFeClkEnCtrl); + received_power = +wlc_lcnphy_measure_digital_power (pi,2000 ); +if (received_power < rx_pwr_threshold) +break ; + } + result =wlc_lcnphy_calc_rx_iq_comp (pi,0xffff ); -wlc_lcnphy_clear_trsw_override (pi); +wlc_lcnphy_stop_tx_tone (pi); -mod_phy_reg (pi,0x44c , (0x1 <<2 ),0 <<2 ); +write_phy_reg (pi,0x631 , Core1TxControl_old); + +write_phy_reg (pi,0x44c , RFOverrideVal0_old); +write_phy_reg (pi,0x44d , RFOverrideVal0_old); +write_phy_reg (pi,0x4b0 , rfoverride2_old); +write_phy_reg (pi,0x4b1 , rfoverride2val_old); +write_phy_reg (pi,0x4f9 , rfoverride3_old); +write_phy_reg (pi,0x4fa , rfoverride3val_old); +write_phy_reg (pi,0x938 , rfoverride4_old); +write_phy_reg (pi,0x939 , rfoverride4val_old); +write_phy_reg (pi,0x43b , afectrlovr_old); +write_phy_reg (pi,0x43c , afectrlovrval_old); +write_phy_reg (pi,0x6da , old_sslpnCalibClkEnCtrl); +write_phy_reg (pi,0x6db , old_sslpnRxFeClkEnCtrl); -for (i =0 ; i <11 ; i++) -write_radio_reg (pi, rxiq_cal_rf_reg[i], - values_to_save[i]); +wlc_lcnphy_clear_trsw_override (pi); -if (tx_gain_override_old) -wlc_lcnphy_set_tx_pwr_by_index (pi, tx_gain_index_old); -else -wlc_lcnphy_disable_tx_gain_override (pi); +mod_phy_reg (pi,0x44c , (0x1 <<2 ),0 <<2 ); -wlc_lcnphy_set_tx_pwr_ctrl (pi, tx_pwr_ctrl); -wlc_lcnphy_rx_gain_override_enable (pi, false); - } +for (i =0 ; i <11 ; i++) +write_radio_reg (pi, rxiq_cal_rf_reg[i], + values_to_save[i]); + +if (tx_gain_override_old) +wlc_lcnphy_set_tx_pwr_by_index (pi, tx_gain_index_old); +else +wlc_lcnphy_disable_tx_gain_override (pi); + +wlc_lcnphy_set_tx_pwr_ctrl (pi, tx_pwr_ctrl); +wlc_lcnphy_rx_gain_override_enable (pi, false); cal_done:kfree (ptr);
Signature · 1 line
1.7.10.4
PATCH v2 2/13 brcmsmac: change pa_gain for bcm4313 iPA
In reply to Arend van SprielThe function wlc_lcnphy_load_tx_gain_table() has a target PA gain specified for the iPA variant of the bcm4313. This gain value is reduced to avoid PA distortion. The if-statement is removed because it was rather redundant in the first place. Please not that this patch does not provide full iPA support.
--- drivers/net/wireless/brcm80211/brcmsmac/phy/phy_lcn.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-)
drivers/net/wireless/brcm80211/brcmsmac/phy/phy_lcn.c +2 -5
@@ -4282,13 +4282,10 @@ wlc_lcnphy_load_tx_gain_table(struct brcms_phy *pi,u16 pa_gain;u16 gm_gain; -if (CHSPEC_IS5G (pi->radio_chanspec)) - pa_gain =0x70 ; -else - pa_gain =0x70 ; -if (pi->sh->boardflags &BFL_FEM ) pa_gain =0x10 ; +else + pa_gain =0x60 ; tab.tbl_id =LCNPHY_TBL_ID_TXPWRCTL ; tab.tbl_width =32 ; tab.tbl_len =1 ;
Signature · 1 line
1.7.10.4
Re: [RFT V2 02/13] brcmsmac: change pa_gain for bcm4313 iPA
Hi Arend,
when you send a new patch please fix this typo.
Hauke
Quoted 5 lines · Arend van Spriel
The function
wlc_lcnphy_load_tx_gain_table()has a target PA gain specified for the iPA variant of the bcm4313. This gain value is reduced to avoid PA distortion. The if-statement is removed because it was rather redundant in the first place. Please not that this patch does not provide full iPA support.
^^^
noteRe: [RFT V2 02/13] brcmsmac: change pa_gain for bcm4313 iPA
Quoted 3 lines · Hauke Mehrtens
Hi Arend,
when you send a new patch please fix this typo.
Got it covered already:
http://mid.gmane.org/[email protected]
Regards,
Arend
Quoted 13 lines
Hauke
Quoted 5 lines · Arend van Spriel
The function
wlc_lcnphy_load_tx_gain_table()has a target PA gain specified for the iPA variant of the bcm4313. This gain value is reduced to avoid PA distortion. The if-statement is removed because it was rather redundant in the first place. Please not that this patch does not provide full iPA support.^^^ note
PATCH v2 3/13 brcmsmac: use ARRAY_SIZE in phytbl_lcn.c
In reply to Arend van SprielThis patch converts all sizeof(x)/sizeof(x[0]) instances to ARRAY_SIZE macro in phytbl_lcn.c. The patch was made using spatch with ARRAY_SIZE.cocci (see [1]).
[1] https://github.com/coccinelle/coccinelle/tree/master/demos/janitorings
--- .../wireless/brcm80211/brcmsmac/phy/phytbl_lcn.c | 117 ++++++++------------ 1 file changed, 44 insertions(+), 73 deletions(-)
drivers/net/wireless/brcm80211/brcmsmac/phy/phytbl_lcn.c +44 -73
@@ -1507,117 +1507,103 @@ static const u32 dot11lcn_gain_tbl_5G[] = {const struct phytbl_info dot11lcnphytbl_rx_gain_info_rev0[] = { {&dot11lcn_gain_tbl_rev0, -sizeof (dot11lcn_gain_tbl_rev0) /sizeof (dot11lcn_gain_tbl_rev0[0 ]),18 , +ARRAY_SIZE (dot11lcn_gain_tbl_rev0),18 ,0 ,32 } , {&dot11lcn_aux_gain_idx_tbl_rev0, -sizeof (dot11lcn_aux_gain_idx_tbl_rev0) / -sizeof (dot11lcn_aux_gain_idx_tbl_rev0[0 ]),14 ,0 ,16 } +ARRAY_SIZE (dot11lcn_aux_gain_idx_tbl_rev0),14 ,0 ,16 } , {&dot11lcn_gain_idx_tbl_rev0, -sizeof (dot11lcn_gain_idx_tbl_rev0) / -sizeof (dot11lcn_gain_idx_tbl_rev0[0 ]),13 ,0 ,32 } +ARRAY_SIZE (dot11lcn_gain_idx_tbl_rev0),13 ,0 ,32 } , };static const struct phytbl_info dot11lcnphytbl_rx_gain_info_rev1[] = { {&dot11lcn_gain_tbl_rev1, -sizeof (dot11lcn_gain_tbl_rev1) /sizeof (dot11lcn_gain_tbl_rev1[0 ]),18 , +ARRAY_SIZE (dot11lcn_gain_tbl_rev1),18 ,0 ,32 } , {&dot11lcn_aux_gain_idx_tbl_rev0, -sizeof (dot11lcn_aux_gain_idx_tbl_rev0) / -sizeof (dot11lcn_aux_gain_idx_tbl_rev0[0 ]),14 ,0 ,16 } +ARRAY_SIZE (dot11lcn_aux_gain_idx_tbl_rev0),14 ,0 ,16 } , {&dot11lcn_gain_idx_tbl_rev0, -sizeof (dot11lcn_gain_idx_tbl_rev0) / -sizeof (dot11lcn_gain_idx_tbl_rev0[0 ]),13 ,0 ,32 } +ARRAY_SIZE (dot11lcn_gain_idx_tbl_rev0),13 ,0 ,32 } , };const struct phytbl_info dot11lcnphytbl_rx_gain_info_2G_rev2[] = { {&dot11lcn_gain_tbl_2G, -sizeof (dot11lcn_gain_tbl_2G) /sizeof (dot11lcn_gain_tbl_2G[0 ]),18 ,0 , +ARRAY_SIZE (dot11lcn_gain_tbl_2G),18 ,0 ,32 } , {&dot11lcn_aux_gain_idx_tbl_2G, -sizeof (dot11lcn_aux_gain_idx_tbl_2G) / -sizeof (dot11lcn_aux_gain_idx_tbl_2G[0 ]),14 ,0 ,16 } +ARRAY_SIZE (dot11lcn_aux_gain_idx_tbl_2G),14 ,0 ,16 } , {&dot11lcn_gain_idx_tbl_2G, -sizeof (dot11lcn_gain_idx_tbl_2G) /sizeof (dot11lcn_gain_idx_tbl_2G[0 ]), +ARRAY_SIZE (dot11lcn_gain_idx_tbl_2G),13 ,0 ,32 } , {&dot11lcn_gain_val_tbl_2G, -sizeof (dot11lcn_gain_val_tbl_2G) /sizeof (dot11lcn_gain_val_tbl_2G[0 ]), +ARRAY_SIZE (dot11lcn_gain_val_tbl_2G),17 ,0 ,8 } };const struct phytbl_info dot11lcnphytbl_rx_gain_info_5G_rev2[] = { {&dot11lcn_gain_tbl_5G, -sizeof (dot11lcn_gain_tbl_5G) /sizeof (dot11lcn_gain_tbl_5G[0 ]),18 ,0 , +ARRAY_SIZE (dot11lcn_gain_tbl_5G),18 ,0 ,32 } , {&dot11lcn_aux_gain_idx_tbl_5G, -sizeof (dot11lcn_aux_gain_idx_tbl_5G) / -sizeof (dot11lcn_aux_gain_idx_tbl_5G[0 ]),14 ,0 ,16 } +ARRAY_SIZE (dot11lcn_aux_gain_idx_tbl_5G),14 ,0 ,16 } , {&dot11lcn_gain_idx_tbl_5G, -sizeof (dot11lcn_gain_idx_tbl_5G) /sizeof (dot11lcn_gain_idx_tbl_5G[0 ]), +ARRAY_SIZE (dot11lcn_gain_idx_tbl_5G),13 ,0 ,32 } , {&dot11lcn_gain_val_tbl_5G, -sizeof (dot11lcn_gain_val_tbl_5G) /sizeof (dot11lcn_gain_val_tbl_5G[0 ]), +ARRAY_SIZE (dot11lcn_gain_val_tbl_5G),17 ,0 ,8 } };const struct phytbl_info dot11lcnphytbl_rx_gain_info_extlna_2G_rev2[] = { {&dot11lcn_gain_tbl_extlna_2G, -sizeof (dot11lcn_gain_tbl_extlna_2G) / -sizeof (dot11lcn_gain_tbl_extlna_2G[0 ]),18 ,0 ,32 } +ARRAY_SIZE (dot11lcn_gain_tbl_extlna_2G),18 ,0 ,32 } , {&dot11lcn_aux_gain_idx_tbl_extlna_2G, -sizeof (dot11lcn_aux_gain_idx_tbl_extlna_2G) / -sizeof (dot11lcn_aux_gain_idx_tbl_extlna_2G[0 ]),14 ,0 ,16 } +ARRAY_SIZE (dot11lcn_aux_gain_idx_tbl_extlna_2G),14 ,0 ,16 } , {&dot11lcn_gain_idx_tbl_extlna_2G, -sizeof (dot11lcn_gain_idx_tbl_extlna_2G) / -sizeof (dot11lcn_gain_idx_tbl_extlna_2G[0 ]),13 ,0 ,32 } +ARRAY_SIZE (dot11lcn_gain_idx_tbl_extlna_2G),13 ,0 ,32 } , {&dot11lcn_gain_val_tbl_extlna_2G, -sizeof (dot11lcn_gain_val_tbl_extlna_2G) / -sizeof (dot11lcn_gain_val_tbl_extlna_2G[0 ]),17 ,0 ,8 } +ARRAY_SIZE (dot11lcn_gain_val_tbl_extlna_2G),17 ,0 ,8 } };const struct phytbl_info dot11lcnphytbl_rx_gain_info_extlna_5G_rev2[] = { {&dot11lcn_gain_tbl_5G, -sizeof (dot11lcn_gain_tbl_5G) /sizeof (dot11lcn_gain_tbl_5G[0 ]),18 ,0 , +ARRAY_SIZE (dot11lcn_gain_tbl_5G),18 ,0 ,32 } , {&dot11lcn_aux_gain_idx_tbl_5G, -sizeof (dot11lcn_aux_gain_idx_tbl_5G) / -sizeof (dot11lcn_aux_gain_idx_tbl_5G[0 ]),14 ,0 ,16 } +ARRAY_SIZE (dot11lcn_aux_gain_idx_tbl_5G),14 ,0 ,16 } , {&dot11lcn_gain_idx_tbl_5G, -sizeof (dot11lcn_gain_idx_tbl_5G) /sizeof (dot11lcn_gain_idx_tbl_5G[0 ]), +ARRAY_SIZE (dot11lcn_gain_idx_tbl_5G),13 ,0 ,32 } , {&dot11lcn_gain_val_tbl_5G, -sizeof (dot11lcn_gain_val_tbl_5G) /sizeof (dot11lcn_gain_val_tbl_5G[0 ]), +ARRAY_SIZE (dot11lcn_gain_val_tbl_5G),17 ,0 ,8 } };const u32 dot11lcnphytbl_rx_gain_info_sz_rev0 = -sizeof (dot11lcnphytbl_rx_gain_info_rev0) / -sizeof (dot11lcnphytbl_rx_gain_info_rev0[0 ]); +ARRAY_SIZE (dot11lcnphytbl_rx_gain_info_rev0);const u32 dot11lcnphytbl_rx_gain_info_2G_rev2_sz = -sizeof (dot11lcnphytbl_rx_gain_info_2G_rev2) / -sizeof (dot11lcnphytbl_rx_gain_info_2G_rev2[0 ]); +ARRAY_SIZE (dot11lcnphytbl_rx_gain_info_2G_rev2);const u32 dot11lcnphytbl_rx_gain_info_5G_rev2_sz = -sizeof (dot11lcnphytbl_rx_gain_info_5G_rev2) / -sizeof (dot11lcnphytbl_rx_gain_info_5G_rev2[0 ]); +ARRAY_SIZE (dot11lcnphytbl_rx_gain_info_5G_rev2);static const u16 dot11lcn_min_sig_sq_tbl_rev0[] = {0x014d ,
@@ -2771,89 +2757,74 @@ static const u32 dot11lcn_papd_compdelta_tbl_rev0[] = {const struct phytbl_info dot11lcnphytbl_info_rev0[] = { {&dot11lcn_min_sig_sq_tbl_rev0, -sizeof (dot11lcn_min_sig_sq_tbl_rev0) / -sizeof (dot11lcn_min_sig_sq_tbl_rev0[0 ]),2 ,0 ,16 } +ARRAY_SIZE (dot11lcn_min_sig_sq_tbl_rev0),2 ,0 ,16 } , {&dot11lcn_noise_scale_tbl_rev0, -sizeof (dot11lcn_noise_scale_tbl_rev0) / -sizeof (dot11lcn_noise_scale_tbl_rev0[0 ]),1 ,0 ,16 } +ARRAY_SIZE (dot11lcn_noise_scale_tbl_rev0),1 ,0 ,16 } , {&dot11lcn_fltr_ctrl_tbl_rev0, -sizeof (dot11lcn_fltr_ctrl_tbl_rev0) / -sizeof (dot11lcn_fltr_ctrl_tbl_rev0[0 ]),11 ,0 ,32 } +ARRAY_SIZE (dot11lcn_fltr_ctrl_tbl_rev0),11 ,0 ,32 } , {&dot11lcn_ps_ctrl_tbl_rev0, -sizeof (dot11lcn_ps_ctrl_tbl_rev0) / -sizeof (dot11lcn_ps_ctrl_tbl_rev0[0 ]),12 ,0 ,32 } +ARRAY_SIZE (dot11lcn_ps_ctrl_tbl_rev0),12 ,0 ,32 } , {&dot11lcn_gain_idx_tbl_rev0, -sizeof (dot11lcn_gain_idx_tbl_rev0) / -sizeof (dot11lcn_gain_idx_tbl_rev0[0 ]),13 ,0 ,32 } +ARRAY_SIZE (dot11lcn_gain_idx_tbl_rev0),13 ,0 ,32 } , {&dot11lcn_aux_gain_idx_tbl_rev0, -sizeof (dot11lcn_aux_gain_idx_tbl_rev0) / -sizeof (dot11lcn_aux_gain_idx_tbl_rev0[0 ]),14 ,0 ,16 } +ARRAY_SIZE (dot11lcn_aux_gain_idx_tbl_rev0),14 ,0 ,16 } , {&dot11lcn_sw_ctrl_tbl_rev0, -sizeof (dot11lcn_sw_ctrl_tbl_rev0) / -sizeof (dot11lcn_sw_ctrl_tbl_rev0[0 ]),15 ,0 ,16 } +ARRAY_SIZE (dot11lcn_sw_ctrl_tbl_rev0),15 ,0 ,16 } , {&dot11lcn_nf_table_rev0, -sizeof (dot11lcn_nf_table_rev0) /sizeof (dot11lcn_nf_table_rev0[0 ]),16 , +ARRAY_SIZE (dot11lcn_nf_table_rev0),16 ,0 ,8 } , {&dot11lcn_gain_val_tbl_rev0, -sizeof (dot11lcn_gain_val_tbl_rev0) / -sizeof (dot11lcn_gain_val_tbl_rev0[0 ]),17 ,0 ,8 } +ARRAY_SIZE (dot11lcn_gain_val_tbl_rev0),17 ,0 ,8 } , {&dot11lcn_gain_tbl_rev0, -sizeof (dot11lcn_gain_tbl_rev0) /sizeof (dot11lcn_gain_tbl_rev0[0 ]),18 , +ARRAY_SIZE (dot11lcn_gain_tbl_rev0),18 ,0 ,32 } , {&dot11lcn_spur_tbl_rev0, -sizeof (dot11lcn_spur_tbl_rev0) /sizeof (dot11lcn_spur_tbl_rev0[0 ]),20 , +ARRAY_SIZE (dot11lcn_spur_tbl_rev0),20 ,0 ,8 } , {&dot11lcn_unsup_mcs_tbl_rev0, -sizeof (dot11lcn_unsup_mcs_tbl_rev0) / -sizeof (dot11lcn_unsup_mcs_tbl_rev0[0 ]),23 ,0 ,16 } +ARRAY_SIZE (dot11lcn_unsup_mcs_tbl_rev0),23 ,0 ,16 } , {&dot11lcn_iq_local_tbl_rev0, -sizeof (dot11lcn_iq_local_tbl_rev0) / -sizeof (dot11lcn_iq_local_tbl_rev0[0 ]),0 ,0 ,16 } +ARRAY_SIZE (dot11lcn_iq_local_tbl_rev0),0 ,0 ,16 } , {&dot11lcn_papd_compdelta_tbl_rev0, -sizeof (dot11lcn_papd_compdelta_tbl_rev0) / -sizeof (dot11lcn_papd_compdelta_tbl_rev0[0 ]),24 ,0 ,32 } +ARRAY_SIZE (dot11lcn_papd_compdelta_tbl_rev0),24 ,0 ,32 } , };const struct phytbl_info dot11lcn_sw_ctrl_tbl_info_4313 = { &dot11lcn_sw_ctrl_tbl_4313_rev0, -sizeof (dot11lcn_sw_ctrl_tbl_4313_rev0) / -sizeof (dot11lcn_sw_ctrl_tbl_4313_rev0[0 ]),15 ,0 ,16 +ARRAY_SIZE (dot11lcn_sw_ctrl_tbl_4313_rev0),15 ,0 ,16 };const struct phytbl_info dot11lcn_sw_ctrl_tbl_info_4313_epa = { &dot11lcn_sw_ctrl_tbl_4313_epa_rev0, -sizeof (dot11lcn_sw_ctrl_tbl_4313_epa_rev0) / -sizeof (dot11lcn_sw_ctrl_tbl_4313_epa_rev0[0 ]),15 ,0 ,16 +ARRAY_SIZE (dot11lcn_sw_ctrl_tbl_4313_epa_rev0),15 ,0 ,16 };const struct phytbl_info dot11lcn_sw_ctrl_tbl_info_4313_bt_epa = { &dot11lcn_sw_ctrl_tbl_4313_epa_rev0_combo, -sizeof (dot11lcn_sw_ctrl_tbl_4313_epa_rev0_combo) / -sizeof (dot11lcn_sw_ctrl_tbl_4313_epa_rev0_combo[0 ]),15 ,0 ,16 +ARRAY_SIZE (dot11lcn_sw_ctrl_tbl_4313_epa_rev0_combo),15 ,0 ,16 };const struct phytbl_info dot11lcn_sw_ctrl_tbl_info_4313_bt_epa_p250 = { &dot11lcn_sw_ctrl_tbl_4313_bt_epa_p250_rev0, -sizeof (dot11lcn_sw_ctrl_tbl_4313_bt_epa_p250_rev0) / -sizeof (dot11lcn_sw_ctrl_tbl_4313_bt_epa_p250_rev0[0 ]),15 ,0 ,16 +ARRAY_SIZE (dot11lcn_sw_ctrl_tbl_4313_bt_epa_p250_rev0),15 ,0 ,16 };const u32 dot11lcnphytbl_info_sz_rev0 = -sizeof (dot11lcnphytbl_info_rev0) /sizeof (dot11lcnphytbl_info_rev0[0 ]); +ARRAY_SIZE (dot11lcnphytbl_info_rev0);const struct lcnphy_tx_gain_tbl_entry dot11lcnphy_2GHz_extPA_gaintable_rev0[128 ] = {
Signature · 1 line
1.7.10.4
PATCH v2 4/13 brcmsmac: add switch control table for BCM4313 iPA BT-combo cards
In reply to Arend van SprielThe bcm4313 iPA BT-WLAN combo cards need to be initialized with a different switch control table. This patch adds that table.
--- .../wireless/brcm80211/brcmsmac/phy/phytbl_lcn.c | 72 ++++++++++++++++++++ .../wireless/brcm80211/brcmsmac/phy/phytbl_lcn.h | 1 + 2 files changed, 73 insertions(+)
drivers/net/wireless/brcm80211/brcmsmac/phy/phytbl_lcn.c +72 -0
@@ -2044,6 +2044,73 @@ static const u16 dot11lcn_sw_ctrl_tbl_4313_rev0[] = { 0x0005, }; +static const u16 dot11lcn_sw_ctrl_tbl_4313_ipa_rev0_combo[] = { +0x0005 , +0x0006 , +0x0009 , +0x000a , +0x0005 , +0x0006 , +0x0009 , +0x000a , +0x0005 , +0x0006 , +0x0009 , +0x000a , +0x0005 , +0x0006 , +0x0009 , +0x000a , +0x0005 , +0x0006 , +0x0009 , +0x000a , +0x0005 , +0x0006 , +0x0009 , +0x000a , +0x0005 , +0x0006 , +0x0009 , +0x000a , +0x0005 , +0x0006 , +0x0009 , +0x000a , +0x0005 , +0x0006 , +0x0009 , +0x000a , +0x0005 , +0x0006 , +0x0009 , +0x000a , +0x0005 , +0x0006 , +0x0009 , +0x000a , +0x0005 , +0x0006 , +0x0009 , +0x000a , +0x0005 , +0x0006 , +0x0009 , +0x000a , +0x0005 , +0x0006 , +0x0009 , +0x000a , +0x0005 , +0x0006 , +0x0009 , +0x000a , +0x0005 , +0x0006 , +0x0009 , +0x000a , +}; +static const u16 dot11lcn_sw_ctrl_tbl_rev0[] = {0x0004 ,0x0004 ,
@@ -2808,6 +2875,11 @@ const struct phytbl_info dot11lcn_sw_ctrl_tbl_info_4313 = {ARRAY_SIZE (dot11lcn_sw_ctrl_tbl_4313_rev0),15 ,0 ,16 }; +const struct phytbl_info dot11lcn_sw_ctrl_tbl_info_4313_bt_ipa = { + &dot11lcn_sw_ctrl_tbl_4313_ipa_rev0_combo, +ARRAY_SIZE (dot11lcn_sw_ctrl_tbl_4313_ipa_rev0_combo),15 ,0 ,16 +}; +const struct phytbl_info dot11lcn_sw_ctrl_tbl_info_4313_epa = { &dot11lcn_sw_ctrl_tbl_4313_epa_rev0, ARRAY_SIZE(dot11lcn_sw_ctrl_tbl_4313_epa_rev0), 15, 0, 16
drivers/net/wireless/brcm80211/brcmsmac/phy/phytbl_lcn.h +1 -0
@@ -20,6 +20,7 @@extern const struct phytbl_info dot11lcnphytbl_rx_gain_info_rev0[];extern const u32 dot11lcnphytbl_rx_gain_info_sz_rev0;extern const struct phytbl_info dot11lcn_sw_ctrl_tbl_info_4313; +extern const struct phytbl_info dot11lcn_sw_ctrl_tbl_info_4313_bt_ipa;extern const struct phytbl_info dot11lcn_sw_ctrl_tbl_info_4313_epa;extern const struct phytbl_info dot11lcn_sw_ctrl_tbl_info_4313_epa_combo;extern const struct phytbl_info dot11lcn_sw_ctrl_tbl_info_4313_bt_epa;
Signature · 1 line
1.7.10.4
PATCH v2 5/13 brcmsmac: add debug info message providing phy and radio info
In reply to Arend van SprielFor debug purposes it is good to have the phy and radio information available in the log. Only logged when driver is build when BRCMDBG or BRCM_TRACING kconfig are set.
--- drivers/net/wireless/brcm80211/brcmsmac/main.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
drivers/net/wireless/brcm80211/brcmsmac/main.c +3 -1
@@ -4652,7 +4652,9 @@ static int brcms_b_attach(struct brcms_c_info *wlc, struct bcma_device *core, wlc->band->phyrev = wlc_hw->band->phyrev; wlc->band->radioid = wlc_hw->band->radioid; wlc->band->radiorev = wlc_hw->band->radiorev; - +brcms_dbg_info (core,"wl%d: phy %u/%u radio %x/%u\n" , unit, + wlc->band->phytype, wlc->band->phyrev, + wlc->band->radioid, wlc->band->radiorev);/* default contention windows size limits */ wlc_hw->band->CWmin =APHY_CWMIN ; wlc_hw->band->CWmax =PHY_CWMAX ;
Signature · 1 line
1.7.10.4
PATCH v2 6/13 brcmsmac: update transmit gain table for lcn phy
In reply to Arend van SprielUpdate the transmit gain table for bcm4313 chip family.
--- .../wireless/brcm80211/brcmsmac/phy/phytbl_lcn.c | 216 ++++++++++---------- 1 file changed, 108 insertions(+), 108 deletions(-)
drivers/net/wireless/brcm80211/brcmsmac/phy/phytbl_lcn.c +108 -108
@@ -3031,134 +3031,134 @@ dot11lcnphy_2GHz_extPA_gaintable_rev0[128] = { };const struct lcnphy_tx_gain_tbl_entry dot11lcnphy_2GHz_gaintable_rev0[128 ] = { - {7 ,0 ,31 ,0 ,72 }, - {7 ,0 ,31 ,0 ,70 }, - {7 ,0 ,31 ,0 ,68 }, - {7 ,0 ,30 ,0 ,67 }, - {7 ,0 ,29 ,0 ,68 }, - {7 ,0 ,28 ,0 ,68 }, - {7 ,0 ,27 ,0 ,69 }, - {7 ,0 ,26 ,0 ,70 }, - {7 ,0 ,25 ,0 ,70 }, - {7 ,0 ,24 ,0 ,71 }, - {7 ,0 ,23 ,0 ,72 }, - {7 ,0 ,23 ,0 ,70 }, - {7 ,0 ,22 ,0 ,71 }, - {7 ,0 ,21 ,0 ,72 }, - {7 ,0 ,21 ,0 ,70 }, - {7 ,0 ,21 ,0 ,68 }, - {7 ,0 ,21 ,0 ,66 }, - {7 ,0 ,21 ,0 ,64 }, - {7 ,0 ,21 ,0 ,63 }, - {7 ,0 ,20 ,0 ,64 }, - {7 ,0 ,19 ,0 ,65 }, - {7 ,0 ,19 ,0 ,64 }, - {7 ,0 ,18 ,0 ,65 }, - {7 ,0 ,18 ,0 ,64 }, - {7 ,0 ,17 ,0 ,65 }, - {7 ,0 ,17 ,0 ,64 }, - {7 ,0 ,16 ,0 ,65 }, - {7 ,0 ,16 ,0 ,64 }, - {7 ,0 ,16 ,0 ,62 }, - {7 ,0 ,16 ,0 ,60 }, - {7 ,0 ,16 ,0 ,58 }, - {7 ,0 ,15 ,0 ,61 }, - {7 ,0 ,15 ,0 ,59 }, - {7 ,0 ,14 ,0 ,61 }, - {7 ,0 ,14 ,0 ,60 }, - {7 ,0 ,14 ,0 ,58 }, - {7 ,0 ,13 ,0 ,60 }, - {7 ,0 ,13 ,0 ,59 }, - {7 ,0 ,12 ,0 ,62 }, - {7 ,0 ,12 ,0 ,60 }, - {7 ,0 ,12 ,0 ,58 }, - {7 ,0 ,11 ,0 ,62 }, - {7 ,0 ,11 ,0 ,60 }, - {7 ,0 ,11 ,0 ,59 }, - {7 ,0 ,11 ,0 ,57 }, - {7 ,0 ,10 ,0 ,61 }, - {7 ,0 ,10 ,0 ,59 }, - {7 ,0 ,10 ,0 ,57 }, - {7 ,0 ,9 ,0 ,62 }, - {7 ,0 ,9 ,0 ,60 }, - {7 ,0 ,9 ,0 ,58 }, - {7 ,0 ,9 ,0 ,57 }, - {7 ,0 ,8 ,0 ,62 }, - {7 ,0 ,8 ,0 ,60 }, - {7 ,0 ,8 ,0 ,58 }, - {7 ,0 ,8 ,0 ,57 }, - {7 ,0 ,8 ,0 ,55 }, - {7 ,0 ,7 ,0 ,61 }, + {15 ,0 ,31 ,0 ,72 }, + {15 ,0 ,31 ,0 ,70 }, + {15 ,0 ,31 ,0 ,68 }, + {15 ,0 ,30 ,0 ,68 }, + {15 ,0 ,29 ,0 ,69 }, + {15 ,0 ,28 ,0 ,69 }, + {15 ,0 ,27 ,0 ,70 }, + {15 ,0 ,26 ,0 ,70 }, + {15 ,0 ,25 ,0 ,71 }, + {15 ,0 ,24 ,0 ,72 }, + {15 ,0 ,23 ,0 ,73 }, + {15 ,0 ,23 ,0 ,71 }, + {15 ,0 ,22 ,0 ,72 }, + {15 ,0 ,21 ,0 ,73 }, + {15 ,0 ,21 ,0 ,71 }, + {15 ,0 ,21 ,0 ,69 }, + {15 ,0 ,21 ,0 ,67 }, + {15 ,0 ,21 ,0 ,65 }, + {15 ,0 ,21 ,0 ,63 }, + {15 ,0 ,20 ,0 ,65 }, + {15 ,0 ,19 ,0 ,66 }, + {15 ,0 ,19 ,0 ,64 }, + {15 ,0 ,18 ,0 ,66 }, + {15 ,0 ,18 ,0 ,64 }, + {15 ,0 ,17 ,0 ,66 }, + {15 ,0 ,17 ,0 ,64 }, + {15 ,0 ,16 ,0 ,66 }, + {15 ,0 ,16 ,0 ,64 }, + {15 ,0 ,16 ,0 ,62 }, + {15 ,0 ,16 ,0 ,61 }, + {15 ,0 ,16 ,0 ,59 }, + {15 ,0 ,15 ,0 ,61 }, + {15 ,0 ,15 ,0 ,59 }, + {15 ,0 ,14 ,0 ,62 }, + {15 ,0 ,14 ,0 ,60 }, + {15 ,0 ,14 ,0 ,58 }, + {15 ,0 ,13 ,0 ,61 }, + {15 ,0 ,13 ,0 ,59 }, + {15 ,0 ,12 ,0 ,62 }, + {15 ,0 ,12 ,0 ,61 }, + {15 ,0 ,12 ,0 ,59 }, + {15 ,0 ,11 ,0 ,62 }, + {15 ,0 ,11 ,0 ,61 }, + {15 ,0 ,11 ,0 ,59 }, + {15 ,0 ,11 ,0 ,57 }, + {15 ,0 ,10 ,0 ,61 }, + {15 ,0 ,10 ,0 ,59 }, + {15 ,0 ,10 ,0 ,58 }, + {15 ,0 ,9 ,0 ,62 }, + {15 ,0 ,9 ,0 ,61 }, + {15 ,0 ,9 ,0 ,59 }, + {15 ,0 ,9 ,0 ,57 }, + {15 ,0 ,8 ,0 ,62 }, + {15 ,0 ,8 ,0 ,61 }, + {15 ,0 ,8 ,0 ,59 }, + {15 ,0 ,8 ,0 ,57 }, + {15 ,0 ,8 ,0 ,56 }, + {15 ,0 ,8 ,0 ,54 }, + {15 ,0 ,8 ,0 ,53 }, + {15 ,0 ,8 ,0 ,51 }, + {15 ,0 ,8 ,0 ,50 }, + {7 ,0 ,7 ,0 ,69 }, + {7 ,0 ,7 ,0 ,67 }, + {7 ,0 ,7 ,0 ,65 }, + {7 ,0 ,7 ,0 ,64 }, + {7 ,0 ,7 ,0 ,62 }, {7 ,0 ,7 ,0 ,60 }, {7 ,0 ,7 ,0 ,58 }, - {7 ,0 ,7 ,0 ,56 }, + {7 ,0 ,7 ,0 ,57 }, {7 ,0 ,7 ,0 ,55 }, {7 ,0 ,6 ,0 ,62 }, - {7 ,0 ,6 ,0 ,60 }, - {7 ,0 ,6 ,0 ,58 }, + {7 ,0 ,6 ,0 ,61 }, + {7 ,0 ,6 ,0 ,59 }, {7 ,0 ,6 ,0 ,57 }, - {7 ,0 ,6 ,0 ,55 }, + {7 ,0 ,6 ,0 ,56 }, {7 ,0 ,6 ,0 ,54 }, - {7 ,0 ,6 ,0 ,52 }, + {7 ,0 ,6 ,0 ,53 }, {7 ,0 ,5 ,0 ,61 }, - {7 ,0 ,5 ,0 ,59 }, - {7 ,0 ,5 ,0 ,57 }, + {7 ,0 ,5 ,0 ,60 }, + {7 ,0 ,5 ,0 ,58 }, {7 ,0 ,5 ,0 ,56 }, - {7 ,0 ,5 ,0 ,54 }, + {7 ,0 ,5 ,0 ,55 }, {7 ,0 ,5 ,0 ,53 }, - {7 ,0 ,5 ,0 ,51 }, - {7 ,0 ,4 ,0 ,62 }, - {7 ,0 ,4 ,0 ,60 }, - {7 ,0 ,4 ,0 ,58 }, + {7 ,0 ,5 ,0 ,52 }, + {7 ,0 ,5 ,0 ,50 }, + {7 ,0 ,5 ,0 ,49 }, + {7 ,0 ,5 ,0 ,47 }, {7 ,0 ,4 ,0 ,57 }, - {7 ,0 ,4 ,0 ,55 }, + {7 ,0 ,4 ,0 ,56 }, {7 ,0 ,4 ,0 ,54 }, - {7 ,0 ,4 ,0 ,52 }, + {7 ,0 ,4 ,0 ,53 }, {7 ,0 ,4 ,0 ,51 }, - {7 ,0 ,4 ,0 ,49 }, + {7 ,0 ,4 ,0 ,50 }, {7 ,0 ,4 ,0 ,48 }, + {7 ,0 ,4 ,0 ,47 }, {7 ,0 ,4 ,0 ,46 }, - {7 ,0 ,3 ,0 ,60 }, - {7 ,0 ,3 ,0 ,58 }, - {7 ,0 ,3 ,0 ,57 }, - {7 ,0 ,3 ,0 ,55 }, - {7 ,0 ,3 ,0 ,54 }, - {7 ,0 ,3 ,0 ,52 }, + {7 ,0 ,4 ,0 ,44 }, + {7 ,0 ,4 ,0 ,43 }, + {7 ,0 ,4 ,0 ,42 }, + {7 ,0 ,4 ,0 ,41 }, + {7 ,0 ,4 ,0 ,40 }, {7 ,0 ,3 ,0 ,51 }, - {7 ,0 ,3 ,0 ,49 }, + {7 ,0 ,3 ,0 ,50 }, {7 ,0 ,3 ,0 ,48 }, + {7 ,0 ,3 ,0 ,47 }, {7 ,0 ,3 ,0 ,46 }, - {7 ,0 ,3 ,0 ,45 }, {7 ,0 ,3 ,0 ,44 }, {7 ,0 ,3 ,0 ,43 }, + {7 ,0 ,3 ,0 ,42 }, {7 ,0 ,3 ,0 ,41 }, - {7 ,0 ,2 ,0 ,61 }, - {7 ,0 ,2 ,0 ,59 }, - {7 ,0 ,2 ,0 ,57 }, - {7 ,0 ,2 ,0 ,56 }, - {7 ,0 ,2 ,0 ,54 }, - {7 ,0 ,2 ,0 ,53 }, - {7 ,0 ,2 ,0 ,51 }, - {7 ,0 ,2 ,0 ,50 }, - {7 ,0 ,2 ,0 ,48 }, - {7 ,0 ,2 ,0 ,47 }, - {7 ,0 ,2 ,0 ,46 }, - {7 ,0 ,2 ,0 ,44 }, - {7 ,0 ,2 ,0 ,43 }, - {7 ,0 ,2 ,0 ,42 }, - {7 ,0 ,2 ,0 ,41 }, - {7 ,0 ,2 ,0 ,39 }, - {7 ,0 ,2 ,0 ,38 }, - {7 ,0 ,2 ,0 ,37 }, - {7 ,0 ,2 ,0 ,36 }, - {7 ,0 ,2 ,0 ,35 }, - {7 ,0 ,2 ,0 ,34 }, - {7 ,0 ,2 ,0 ,33 }, - {7 ,0 ,2 ,0 ,32 }, - {7 ,0 ,1 ,0 ,63 }, - {7 ,0 ,1 ,0 ,61 }, - {7 ,0 ,1 ,0 ,59 }, - {7 ,0 ,1 ,0 ,57 }, + {3 ,0 ,3 ,0 ,56 }, + {3 ,0 ,3 ,0 ,54 }, + {3 ,0 ,3 ,0 ,53 }, + {3 ,0 ,3 ,0 ,51 }, + {3 ,0 ,3 ,0 ,50 }, + {3 ,0 ,3 ,0 ,48 }, + {3 ,0 ,3 ,0 ,47 }, + {3 ,0 ,3 ,0 ,46 }, + {3 ,0 ,3 ,0 ,44 }, + {3 ,0 ,3 ,0 ,43 }, + {3 ,0 ,3 ,0 ,42 }, + {3 ,0 ,3 ,0 ,41 }, + {3 ,0 ,3 ,0 ,39 }, + {3 ,0 ,3 ,0 ,38 }, + {3 ,0 ,3 ,0 ,37 }, + {3 ,0 ,3 ,0 ,36 }, + {3 ,0 ,3 ,0 ,35 }, + {3 ,0 ,3 ,0 ,34 }, };const struct lcnphy_tx_gain_tbl_entry dot11lcnphy_5GHz_gaintable_rev0[128 ] = {
Signature · 1 line
1.7.10.4
PATCH v2 7/13 brcmsmac: change lcnphy receive i/q calibration routine
In reply to Arend van SprielThe gain setting for the test tone of the i/q calibration is controlled has changed. This gain level needs to be set correctly before the i/q compensation can be determined.
--- .../net/wireless/brcm80211/brcmsmac/phy/phy_lcn.c | 78 +++++++++++++++----- 1 file changed, 58 insertions(+), 20 deletions(-)
drivers/net/wireless/brcm80211/brcmsmac/phy/phy_lcn.c +58 -20
@@ -1329,6 +1329,43 @@ static u32 wlc_lcnphy_measure_digital_power(struct brcms_phy *pi, u16 nsamples)return (iq_est.i_pwr + iq_est.q_pwr) / nsamples; } +static bool wlc_lcnphy_rx_iq_cal_gain (struct brcms_phy *pi,u16 biq1_gain, +u16 tia_gain,u16 lna2_gain) +{ +u32 i_thresh_l, q_thresh_l; +u32 i_thresh_h, q_thresh_h; +struct lcnphy_iq_est iq_est_h, iq_est_l; + +wlc_lcnphy_set_rx_gain_by_distribution (pi,0 ,0 ,0 , biq1_gain, tia_gain, + lna2_gain,0 ); + +wlc_lcnphy_rx_gain_override_enable (pi, true); +wlc_lcnphy_start_tx_tone (pi,2000 , (40 >>1 ),0 ); +udelay (500 ); +write_radio_reg (pi,RADIO_2064_REG112 ,0 ); +if (!wlc_lcnphy_rx_iq_est (pi,1024 ,32 , &iq_est_l)) +return false; + +wlc_lcnphy_start_tx_tone (pi,2000 ,40 ,0 ); +udelay (500 ); +write_radio_reg (pi,RADIO_2064_REG112 ,0 ); +if (!wlc_lcnphy_rx_iq_est (pi,1024 ,32 , &iq_est_h)) +return false; + + i_thresh_l = (iq_est_l.i_pwr <<1 ); + i_thresh_h = (iq_est_l.i_pwr <<2 ) + iq_est_l.i_pwr; + + q_thresh_l = (iq_est_l.q_pwr <<1 ); + q_thresh_h = (iq_est_l.q_pwr <<2 ) + iq_est_l.q_pwr; +if ((iq_est_h.i_pwr > i_thresh_l) && + (iq_est_h.i_pwr < i_thresh_h) && + (iq_est_h.q_pwr > q_thresh_l) && + (iq_est_h.q_pwr < q_thresh_h)) +return true; + +return false; +} + static bool wlc_lcnphy_rx_iq_cal(struct brcms_phy *pi, const struct lcnphy_rx_iqcomp *iqcomp,
@@ -1343,8 +1380,8 @@ wlc_lcnphy_rx_iq_cal(struct brcms_phy *pi, RFOverrideVal0_old, rfoverride2_old, rfoverride2val_old, rfoverride3_old, rfoverride3val_old, rfoverride4_old, rfoverride4val_old, afectrlovr_old, afectrlovrval_old; -int tia_gain; -u32 received_power, rx_pwr_threshold; +int tia_gain, lna2_gain, biq1_gain; +bool set_gain;u16 old_sslpnCalibClkEnCtrl, old_sslpnRxFeClkEnCtrl;u16 values_to_save[11 ];s16 *ptr;
@@ -1432,29 +1469,30 @@ wlc_lcnphy_rx_iq_cal(struct brcms_phy *pi,mod_phy_reg (pi,0x43b , (0x1 <<0 ),1 <<0 );mod_phy_reg (pi,0x43c , (0x1 <<0 ),0 <<0 ); -wlc_lcnphy_start_tx_tone (pi,2000 ,120 ,0 );write_phy_reg (pi,0x6da ,0xffff );or_phy_reg (pi,0x6db ,0x3 ); -wlc_lcnphy_set_trsw_override (pi, tx_switch, rx_switch); -wlc_lcnphy_rx_gain_override_enable (pi, true); - - tia_gain =8 ; - rx_pwr_threshold =950 ; -while (tia_gain >0 ) { - tia_gain -=1 ; -wlc_lcnphy_set_rx_gain_by_distribution (pi, -0 ,0 ,2 ,2 , - (u16 ) - tia_gain,1 ,0 ); -udelay (500 ); - received_power = -wlc_lcnphy_measure_digital_power (pi,2000 ); -if (received_power < rx_pwr_threshold) -break ; +wlc_lcnphy_set_trsw_override (pi, tx_switch, rx_switch); +for (lna2_gain =3 ; lna2_gain >=0 ; lna2_gain--) { +for (tia_gain =4 ; tia_gain >=0 ; tia_gain--) { +for (biq1_gain =6 ; biq1_gain >=0 ; biq1_gain--) { + set_gain =wlc_lcnphy_rx_iq_cal_gain (pi, + (u16 ) + biq1_gain, + (u16 ) + tia_gain, + (u16 ) + lna2_gain); +if (set_gain) { + result =wlc_lcnphy_calc_rx_iq_comp (pi, +1024 ); + goto stop_tone; + } + } + } } - result =wlc_lcnphy_calc_rx_iq_comp (pi,0xffff ); +stop_tone:wlc_lcnphy_stop_tx_tone (pi);write_phy_reg (pi,0x631 , Core1TxControl_old);
Signature · 1 line
1.7.10.4
PATCH v2 8/13 brcmsmac: fix TSSI idle estimation
In reply to Arend van SprielThe baseband multiplier must be zero during TSSI idle estimation and restored afterwards.
--- drivers/net/wireless/brcm80211/brcmsmac/phy/phy_lcn.c | 9 +++++++++ 1 file changed, 9 insertions(+)
drivers/net/wireless/brcm80211/brcmsmac/phy/phy_lcn.c +9 -0
@@ -2836,6 +2836,8 @@ static void wlc_lcnphy_idle_tssi_est(struct brcms_phy_pub *ppi)read_radio_reg (pi,RADIO_2064_REG007 ) &1 ;u16 SAVE_jtag_auxpga =read_radio_reg (pi,RADIO_2064_REG0FF ) &0x10 ;u16 SAVE_iqadc_aux_en =read_radio_reg (pi,RADIO_2064_REG11F ) &4 ; +u8 SAVE_bbmult =wlc_lcnphy_get_bbmult (pi); + idleTssi =read_phy_reg (pi,0x4ab ); suspend = (0 == (bcma_read32 (pi->d11core,D11REGOFFS (maccontrol)) &MCTL_EN_MAC ));
@@ -2853,6 +2855,12 @@ static void wlc_lcnphy_idle_tssi_est(struct brcms_phy_pub *ppi)mod_radio_reg (pi,RADIO_2064_REG0FF ,0x10 ,1 <<4 );mod_radio_reg (pi,RADIO_2064_REG11F ,0x4 ,1 <<2 );wlc_lcnphy_tssi_setup (pi); + +mod_phy_reg (pi,0x4d7 , (0x1 <<0 ), (1 <<0 )); +mod_phy_reg (pi,0x4d7 , (0x1 <<6 ), (1 <<6 )); + +wlc_lcnphy_set_bbmult (pi,0x0 ); +wlc_phy_do_dummy_tx (pi, true,OFF ); idleTssi = ((read_phy_reg (pi,0x4ab ) & (0x1ff <<0 )) >>0 );
@@ -2874,6 +2882,7 @@ static void wlc_lcnphy_idle_tssi_est(struct brcms_phy_pub *ppi)mod_phy_reg (pi,0x44c , (0x1 <<12 ), (0 ) <<12 ); +wlc_lcnphy_set_bbmult (pi, SAVE_bbmult);wlc_lcnphy_set_tx_gain_override (pi, tx_gain_override_old);wlc_lcnphy_set_tx_gain (pi, &old_gains);wlc_lcnphy_set_tx_pwr_ctrl (pi, SAVE_txpwrctrl);
Signature · 1 line
1.7.10.4
PATCH v2 9/13 brcmsmac: avoid calling set_txpwr_by_index() twice
In reply to Arend van SprielFor lcnphy revision 1 or when hardware supports i/q calibration the function wlc_lcnphy_set_txpwr_by_index() was called twice.
--- drivers/net/wireless/brcm80211/brcmsmac/phy/phy_lcn.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/net/wireless/brcm80211/brcmsmac/phy/phy_lcn.c +1 -1
@@ -3897,7 +3897,6 @@ static void wlc_lcnphy_txpwrtbl_iqlo_cal(struct brcms_phy *pi) target_gains.pad_gain =21 ; target_gains.dac_gain =0 ;wlc_lcnphy_set_tx_gain (pi, &target_gains); -wlc_lcnphy_set_tx_pwr_by_index (pi,16 );if (LCNREV_IS (pi->pubpi.phy_rev,1 ) || pi_lcn->lcnphy_hw_iqcal_en) {
@@ -3908,6 +3907,7 @@ static void wlc_lcnphy_txpwrtbl_iqlo_cal(struct brcms_phy *pi) lcnphy_recal ?LCNPHY_CAL_RECAL : LCNPHY_CAL_FULL), false); }else { +wlc_lcnphy_set_tx_pwr_by_index (pi,16 );wlc_lcnphy_tx_iqlo_soft_cal_full (pi); }
Signature · 1 line
1.7.10.4
PATCH v2 10/13 brcmsmac: rework switch control table init including iPA BT-combo
In reply to Arend van SprielRework the code path in lcnphy tbl_init() for switch control table programming. This also takes the iPA BT-combo card into account.
--- .../net/wireless/brcm80211/brcmsmac/phy/phy_lcn.c | 31 ++++++++++---------- 1 file changed, 16 insertions(+), 15 deletions(-)
drivers/net/wireless/brcm80211/brcmsmac/phy/phy_lcn.c +16 -15
@@ -4573,6 +4573,7 @@ static void wlc_lcnphy_tbl_init(struct brcms_phy *pi)uint idx;u8 phybw40;struct phytbl_info tab; +const struct phytbl_info *tb;u32 val; phybw40 =CHSPEC_IS40 (pi->radio_chanspec);
@@ -4619,7 +4620,6 @@ static void wlc_lcnphy_tbl_init(struct brcms_phy *pi) }if (LCNREV_IS (pi->pubpi.phy_rev,2 )) { -const struct phytbl_info *tb;int l;if (CHSPEC_IS2G (pi->radio_chanspec)) {
@@ -4640,21 +4640,22 @@ static void wlc_lcnphy_tbl_init(struct brcms_phy *pi)wlc_lcnphy_write_table (pi, &tb[idx]); } -if ((pi->sh->boardflags &BFL_FEM ) - && !(pi->sh->boardflags &BFL_FEM_BT )) -wlc_lcnphy_write_table (pi, &dot11lcn_sw_ctrl_tbl_info_4313_epa); -else if (pi->sh->boardflags &BFL_FEM_BT ) { -if (pi->sh->boardrev <0x1250 ) -wlc_lcnphy_write_table ( - pi, - &dot11lcn_sw_ctrl_tbl_info_4313_bt_epa); +if (pi->sh->boardflags &BFL_FEM ) { +if (pi->sh->boardflags &BFL_FEM_BT ) { +if (pi->sh->boardrev <0x1250 ) + tb = &dot11lcn_sw_ctrl_tbl_info_4313_bt_epa; +else + tb = &dot11lcn_sw_ctrl_tbl_info_4313_bt_epa_p250; + }else { + tb = &dot11lcn_sw_ctrl_tbl_info_4313_epa; + } + }else { +if (pi->sh->boardflags &BFL_FEM_BT ) + tb = &dot11lcn_sw_ctrl_tbl_info_4313_bt_ipa;else -wlc_lcnphy_write_table ( - pi, - &dot11lcn_sw_ctrl_tbl_info_4313_bt_epa_p250); - }else -wlc_lcnphy_write_table (pi, &dot11lcn_sw_ctrl_tbl_info_4313); - + tb = &dot11lcn_sw_ctrl_tbl_info_4313; + } +wlc_lcnphy_write_table (pi, tb);wlc_lcnphy_load_rfpower (pi);wlc_lcnphy_clear_papd_comptable (pi);
Signature · 1 line
1.7.10.4
PATCH v2 11/13 brcmsmac: correct phy registers for TSSI-based power control
In reply to Arend van SprielA number of additional phy registers needs to be programmed when using TSSI-based power control.
--- .../net/wireless/brcm80211/brcmsmac/phy/phy_lcn.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+)
drivers/net/wireless/brcm80211/brcmsmac/phy/phy_lcn.c +20 -0
@@ -2020,6 +2020,16 @@ wlc_lcnphy_set_tssi_mux(struct brcms_phy *pi, enum lcnphy_tssi_mode pos) }else {mod_radio_reg (pi,RADIO_2064_REG03A ,1 ,0x1 );mod_radio_reg (pi,RADIO_2064_REG11A ,0x8 ,0x8 ); +mod_radio_reg (pi,RADIO_2064_REG028 ,0x1 ,0x0 ); +mod_radio_reg (pi,RADIO_2064_REG11A ,0x4 ,1 <<2 ); +mod_radio_reg (pi,RADIO_2064_REG036 ,0x10 ,0x0 ); +mod_radio_reg (pi,RADIO_2064_REG11A ,0x10 ,1 <<4 ); +mod_radio_reg (pi,RADIO_2064_REG036 ,0x3 ,0x0 ); +mod_radio_reg (pi,RADIO_2064_REG035 ,0xff ,0x77 ); +mod_radio_reg (pi,RADIO_2064_REG028 ,0x1e ,0xe <<1 ); +mod_radio_reg (pi,RADIO_2064_REG112 ,0x80 ,1 <<7 ); +mod_radio_reg (pi,RADIO_2064_REG005 ,0x7 ,1 <<1 ); +mod_radio_reg (pi,RADIO_2064_REG029 ,0xf0 ,0 <<4 ); } }else {mod_phy_reg (pi,0x4d9 , (0x1 <<2 ), (0x1 ) <<2 );
@@ -2106,6 +2116,7 @@ static void wlc_lcnphy_pwrctrl_rssiparams(struct brcms_phy *pi) (auxpga_vmid_temp << 0) | (auxpga_gain_temp << 12));mod_radio_reg (pi,RADIO_2064_REG082 , (1 <<5 ), (1 <<5 )); +mod_radio_reg (pi,RADIO_2064_REG07C , (1 <<0 ), (1 <<0 )); }static void wlc_lcnphy_tssi_setup (struct brcms_phy *pi)
@@ -2218,6 +2229,10 @@ static void wlc_lcnphy_tssi_setup(struct brcms_phy *pi)mod_phy_reg (pi,0x4d7 , (0xf <<8 ), (0 ) <<8 ); +mod_radio_reg (pi,RADIO_2064_REG035 ,0xff ,0x0 ); +mod_radio_reg (pi,RADIO_2064_REG036 ,0x3 ,0x0 ); +mod_radio_reg (pi,RADIO_2064_REG11A ,0x8 ,0x8 ); +wlc_lcnphy_pwrctrl_rssiparams (pi); }
@@ -3096,6 +3111,11 @@ static void wlc_lcnphy_tx_pwr_ctrl_init(struct brcms_phy_pub *ppi)wlc_lcnphy_write_table (pi, &tab); tab.tbl_offset++; } +mod_phy_reg (pi,0x4d0 , (0x1 <<0 ), (0 ) <<0 ); +mod_phy_reg (pi,0x4d3 , (0xff <<0 ), (0 ) <<0 ); +mod_phy_reg (pi,0x4d3 , (0xff <<8 ), (0 ) <<8 ); +mod_phy_reg (pi,0x4d0 , (0x1 <<4 ), (0 ) <<4 ); +mod_phy_reg (pi,0x4d0 , (0x1 <<2 ), (0 ) <<2 );mod_phy_reg (pi,0x410 , (0x1 <<7 ), (0 ) <<7 );
Signature · 1 line
1.7.10.4
PATCH v2 12/13 brcmsmac: reinitialize TSSI power control upon channel switch
In reply to Arend van SprielWhen changing channels the TSSI based power control needs to be reinitialized.
--- drivers/net/wireless/brcm80211/brcmsmac/phy/phy_lcn.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/net/wireless/brcm80211/brcmsmac/phy/phy_lcn.c +2 -0
@@ -5019,6 +5019,8 @@ void wlc_phy_chanspec_set_lcnphy(struct brcms_phy *pi, u16 chanspec)wlc_lcnphy_load_tx_iir_filter (pi, true,3 );mod_phy_reg (pi,0x4eb , (0x7 <<3 ), (1 ) <<3 ); +if (wlc_lcnphy_tssi_based_pwr_ctrl_enabled (pi)) +wlc_lcnphy_tssi_setup (pi); }void wlc_phy_detach_lcnphy (struct brcms_phy *pi)
Signature · 1 line
1.7.10.4
PATCH v2 13/13 brcmsmac: add support for BCM4313 iPA variant
In reply to Arend van SprielThis patch completes the changes needed for supporting the iPA variant cards of the BCM4313 wireless chipset.
--- .../net/wireless/brcm80211/brcmsmac/phy/phy_lcn.c | 71 ++++++++++++++------ 1 file changed, 51 insertions(+), 20 deletions(-)
drivers/net/wireless/brcm80211/brcmsmac/phy/phy_lcn.c +51 -20
@@ -1826,6 +1826,17 @@ wlc_lcnphy_radio_2064_channel_tune_4313(struct brcms_phy *pi, u8 channel)write_radio_reg (pi,RADIO_2064_REG038 ,3 );write_radio_reg (pi,RADIO_2064_REG091 ,7 ); } + +if (!(pi->sh->boardflags &BFL_FEM )) { +u8 reg038[14 ] = {0xd ,0xe ,0xd ,0xd ,0xd ,0xc , +0xa ,0xb ,0xb ,0x3 ,0x3 ,0x2 ,0x0 ,0x0 }; + +write_radio_reg (pi,RADIO_2064_REG02A ,0xf ); +write_radio_reg (pi,RADIO_2064_REG091 ,0x3 ); +write_radio_reg (pi,RADIO_2064_REG038 ,0x3 ); + +write_radio_reg (pi,RADIO_2064_REG038 , reg038[channel -1 ]); + } } static int
@@ -2123,7 +2134,16 @@ static void wlc_lcnphy_tssi_setup(struct brcms_phy *pi) {struct phytbl_info tab;u32 rfseq, ind; +enum lcnphy_tssi_mode mode; +u8 tssi_sel; +if (pi->sh->boardflags &BFL_FEM ) { + tssi_sel =0x1 ; + mode =LCNPHY_TSSI_EXT ; + }else { + tssi_sel =0xe ; + mode =LCNPHY_TSSI_POST_PA ; + } tab.tbl_id =LCNPHY_TBL_ID_TXPWRCTL ; tab.tbl_width =32 ; tab.tbl_ptr = &ind;
@@ -2144,7 +2164,7 @@ static void wlc_lcnphy_tssi_setup(struct brcms_phy *pi)mod_phy_reg (pi,0x503 , (0x1 <<4 ), (1 ) <<4 ); -wlc_lcnphy_set_tssi_mux (pi,LCNPHY_TSSI_EXT ); +wlc_lcnphy_set_tssi_mux (pi, mode);mod_phy_reg (pi,0x4a4 , (0x1 <<14 ), (0 ) <<14 );mod_phy_reg (pi,0x4a4 , (0x1 <<15 ), (1 ) <<15 );
@@ -2180,9 +2200,10 @@ static void wlc_lcnphy_tssi_setup(struct brcms_phy *pi)mod_phy_reg (pi,0x49a , (0x1ff <<0 ), (0xff ) <<0 );if (LCNREV_IS (pi->pubpi.phy_rev,2 )) { -mod_radio_reg (pi,RADIO_2064_REG028 ,0xf ,0xe ); +mod_radio_reg (pi,RADIO_2064_REG028 ,0xf , tssi_sel);mod_radio_reg (pi,RADIO_2064_REG086 ,0x4 ,0x4 ); }else { +mod_radio_reg (pi,RADIO_2064_REG028 ,0x1e , tssi_sel <<1 );mod_radio_reg (pi,RADIO_2064_REG03A ,0x1 ,1 );mod_radio_reg (pi,RADIO_2064_REG11A ,0x8 ,1 <<3 ); }
@@ -4358,8 +4379,11 @@ wlc_lcnphy_load_tx_gain_table(struct brcms_phy *pi, tab.tbl_len =1 ; tab.tbl_ptr = &val; +/* fixed gm_gain value for iPA */ + gm_gain =15 ;for (j =0 ; j <128 ; j++) { - gm_gain = gain_table[j].gm; +if (pi->sh->boardflags &BFL_FEM ) + gm_gain = gain_table[j].gm; val = (((u32 ) pa_gain <<24 ) | (gain_table[j].pad <<16 ) | (gain_table[j].pga <<8 ) | gm_gain);
@@ -4570,7 +4594,10 @@ static void wlc_radio_2064_init(struct brcms_phy *pi)write_phy_reg (pi,0x4ea ,0x4688 ); -mod_phy_reg (pi,0x4eb , (0x7 <<0 ),2 <<0 ); +if (pi->sh->boardflags &BFL_FEM ) +mod_phy_reg (pi,0x4eb , (0x7 <<0 ),2 <<0 ); +else +mod_phy_reg (pi,0x4eb , (0x7 <<0 ),3 <<0 );mod_phy_reg (pi,0x4eb , (0x7 <<6 ),0 <<6 );
@@ -4581,6 +4608,13 @@ static void wlc_radio_2064_init(struct brcms_phy *pi)wlc_lcnphy_rcal (pi);wlc_lcnphy_rc_cal (pi); + +if (!(pi->sh->boardflags &BFL_FEM )) { +write_radio_reg (pi,RADIO_2064_REG032 ,0x6f ); +write_radio_reg (pi,RADIO_2064_REG033 ,0x19 ); +write_radio_reg (pi,RADIO_2064_REG039 ,0xe ); + } + }static void wlc_lcnphy_radio_init (struct brcms_phy *pi)
@@ -4611,22 +4645,20 @@ static void wlc_lcnphy_tbl_init(struct brcms_phy *pi)wlc_lcnphy_write_table (pi, &tab); } - tab.tbl_id =LCNPHY_TBL_ID_RFSEQ ; - tab.tbl_width =16 ; - tab.tbl_ptr = &val; - tab.tbl_len =1 ; - - val =114 ; - tab.tbl_offset =0 ; -wlc_lcnphy_write_table (pi, &tab); +if (!(pi->sh->boardflags &BFL_FEM )) { + tab.tbl_id =LCNPHY_TBL_ID_RFSEQ ; + tab.tbl_width =16 ; + tab.tbl_ptr = &val; + tab.tbl_len =1 ; - val =130 ; - tab.tbl_offset =1 ; -wlc_lcnphy_write_table (pi, &tab); + val =150 ; + tab.tbl_offset =0 ; +wlc_lcnphy_write_table (pi, &tab); - val =6 ; - tab.tbl_offset =8 ; -wlc_lcnphy_write_table (pi, &tab); + val =220 ; + tab.tbl_offset =1 ; +wlc_lcnphy_write_table (pi, &tab); + }if (CHSPEC_IS2G (pi->radio_chanspec)) {if (pi->sh->boardflags &BFL_FEM )
@@ -5059,8 +5091,7 @@ bool wlc_phy_attach_lcnphy(struct brcms_phy *pi)if (!wlc_phy_txpwr_srom_read_lcnphy (pi))return false; -if ((pi->sh->boardflags &BFL_FEM ) && - (LCNREV_IS (pi->pubpi.phy_rev,1 ))) { +if (LCNREV_IS (pi->pubpi.phy_rev,1 )) {if (pi_lcn->lcnphy_tempsense_option ==3 ) { pi->hwpwrctrl = true; pi->hwpwrctrl_capable = true;
Signature · 1 line
1.7.10.4
Hi
Quoted 11 lines · Arend van Spriel
This series replaces the patch "[PATCH 12/12] brcmsmac: support 4313iPA" with Message-ID: <[email protected]>.
It has been split up into individual patches. Please test this series especially if you had issues with the original commit b6fc28a that was reverted.
Cc Jonas Gorski <[email protected]>Cc David Herrmann <[email protected]>Cc Maximilian Engelhardt <[email protected]>Cc David Costa <[email protected]>
Is this available in a public branch that I can merge? And what should be used as base? 3.11-rc5? linux-next?
Cheers
David
Quoted 25 lines
Arend van Spriel (13):
brcmsmac: cosmetic change inphy_lcn.c
brcmsmac: changepa_gainfor bcm4313 iPA
brcmsmac: useARRAY_SIZEinphytbl_lcn.c
brcmsmac: add switch control table for BCM4313 iPA BT-combo cards
brcmsmac: add debug info message providing phy and radio info
brcmsmac: update transmit gain table for lcn phy
brcmsmac: change lcnphy receive i/q calibration routine
brcmsmac: fix TSSI idle estimation
brcmsmac: avoid callingset_txpwr_by_index()twice
brcmsmac: rework switch control table init including iPA BT-combo
brcmsmac: correct phy registers for TSSI-based power control
brcmsmac: reinitialize TSSI power control upon channel switch
brcmsmac: add support for BCM4313 iPA variantdrivers/net/wireless/brcm80211/brcmsmac/main.c | 4 +- .../net/wireless/brcm80211/brcmsmac/phy/phy_lcn.c | 397 +++++++++++-------- .../wireless/brcm80211/brcmsmac/phy/phytbl_lcn.c | 405 +++++++++++--------- .../wireless/brcm80211/brcmsmac/phy/phytbl_lcn.h | 1 + 4 files changed, 475 insertions(+), 332 deletions(-)--
1.7.10.4
Quoted 10 lines · David Herrmann
Hi
Quoted 7 lines · Arend van Spriel
This series replaces the patch "[PATCH 12/12] brcmsmac: support 4313iPA" with Message-ID: <[email protected]>.
It has been split up into individual patches. Please test this series especially if you had issues with the original commit b6fc28a that was reverted.
Quoted 7 lines
Quoted 4 lines
Cc Jonas Gorski <[email protected]>Cc David Herrmann <[email protected]>Cc Maximilian Engelhardt <[email protected]>Cc David Costa <[email protected]>Is this available in a public branch that I can merge? And what should be used as base? 3.11-rc5? linux-next?
Indeed I should have mentioned. It applies on v3.11-rc5 for sure. Did not try linux-next.
Regards,
Arend
Quoted 29 lines
Cheers
DavidQuoted 25 lines
Arend van Spriel (13):
brcmsmac: cosmetic change inphy_lcn.c
brcmsmac: changepa_gainfor bcm4313 iPA
brcmsmac: useARRAY_SIZEinphytbl_lcn.c
brcmsmac: add switch control table for BCM4313 iPA BT-combo cards
brcmsmac: add debug info message providing phy and radio info
brcmsmac: update transmit gain table for lcn phy
brcmsmac: change lcnphy receive i/q calibration routine
brcmsmac: fix TSSI idle estimation
brcmsmac: avoid callingset_txpwr_by_index()twice
brcmsmac: rework switch control table init including iPA BT-combo
brcmsmac: correct phy registers for TSSI-based power control
brcmsmac: reinitialize TSSI power control upon channel switch
brcmsmac: add support for BCM4313 iPA variantdrivers/net/wireless/brcm80211/brcmsmac/main.c | 4 +- .../net/wireless/brcm80211/brcmsmac/phy/phy_lcn.c | 397 +++++++++++-------- .../wireless/brcm80211/brcmsmac/phy/phytbl_lcn.c | 405 +++++++++++--------- .../wireless/brcm80211/brcmsmac/phy/phytbl_lcn.h | 1 + 4 files changed, 475 insertions(+), 332 deletions(-)--
1.7.10.4
David Herrmann
Tested-byHi
Quoted 20 lines · Arend van Spriel
Quoted 19 lines · David Herrmann
Hi
Quoted 12 lines · Arend van Spriel
This series replaces the patch "[PATCH 12/12] brcmsmac: support 4313iPA" with Message-ID: <[email protected]>.
It has been split up into individual patches. Please test this series especially if you had issues with the original commit b6fc28a that was reverted.
Cc Jonas Gorski <[email protected]>Cc David Herrmann <[email protected]>Cc Maximilian Engelhardt <[email protected]>Cc David Costa <[email protected]>
Quoted 6 lines
Quoted 2 lines
Is this available in a public branch that I can merge? And what should be used as base? 3.11-rc5? linux-next?
Indeed I should have mentioned. It applies on v3.11-rc5 for sure. Did not try linux-next.
All 13 patches applied cleanly on top of 3.11-rc5, everything works fine even after a dozen of reconnects to different networks. No additional delays.
Consider this whole series:
card info: Broadcom Corporation BCM4313 802.11b/g/n (0a5c:219c) (builtin into my old Intel Atom N450 board)
I tested with 802.11g networks. I have only a/g networks here. I don't know whether that matters.
Cheers
David
Quoted 34 lines · David Herrmann
Hi
Quoted 20 lines · Arend van Spriel
Quoted 19 lines · David Herrmann
Hi
Quoted 12 lines · Arend van Spriel
This series replaces the patch "[PATCH 12/12] brcmsmac: support 4313iPA" with Message-ID: <[email protected]>.
It has been split up into individual patches. Please test this series especially if you had issues with the original commit b6fc28a that was reverted.
Cc Jonas Gorski <[email protected]>Cc David Herrmann <[email protected]>Cc Maximilian Engelhardt <[email protected]>Cc David Costa <[email protected]>Quoted 6 lines
Quoted 2 lines
Is this available in a public branch that I can merge? And what should be used as base? 3.11-rc5? linux-next?
Indeed I should have mentioned. It applies on v3.11-rc5 for sure. Did not try linux-next.
All 13 patches applied cleanly on top of 3.11-rc5, everything works fine even after a dozen of reconnects to different networks. No additional delays.
Quoted 7 lines
Consider this whole series:
Tested-by David Herrmann <[email protected]>card info: Broadcom Corporation BCM4313 802.11b/g/n (0a5c:219c) (builtin into my old Intel Atom N450 board)
I tested with 802.11g networks. I have only a/g networks here. I don't know whether that matters.
As this series modifies the phy code, I would say no.
Thanks for verifying this works for you.
Regards,
Arend
Quoted 27 lines · On Tuesday 13 August 2013 22:03:27 Arend van Spriel wrote:
This series replaces the patch "[PATCH 12/12] brcmsmac: support 4313iPA" with Message-ID: <[email protected]>.
It has been split up into individual patches. Please test this series especially if you had issues with the original commit b6fc28a that was reverted.
Cc Jonas Gorski <[email protected]>Cc David Herrmann <[email protected]>Cc Maximilian Engelhardt <[email protected]>Cc David Costa <[email protected]>Arend van Spriel (13):
brcmsmac: cosmetic change inphy_lcn.c
brcmsmac: changepa_gainfor bcm4313 iPA
brcmsmac: useARRAY_SIZEinphytbl_lcn.c
brcmsmac: add switch control table for BCM4313 iPA BT-combo cards
brcmsmac: add debug info message providing phy and radio info
brcmsmac: update transmit gain table for lcn phy
brcmsmac: change lcnphy receive i/q calibration routine
brcmsmac: fix TSSI idle estimation
brcmsmac: avoid callingset_txpwr_by_index()twice
brcmsmac: rework switch control table init including iPA BT-combo
brcmsmac: correct phy registers for TSSI-based power control
brcmsmac: reinitialize TSSI power control upon channel switch
brcmsmac: add support for BCM4313 iPA variant
Quoted 6 lines
drivers/net/wireless/brcm80211/brcmsmac/main.c | 4 +- .../net/wireless/brcm80211/brcmsmac/phy/phy_lcn.c | 397 +++++++++++-------- .../wireless/brcm80211/brcmsmac/phy/phytbl_lcn.c | 405 +++++++++++--------- .../wireless/brcm80211/brcmsmac/phy/phytbl_lcn.h | 1 + 4 files changed, 475 insertions(+), 332 deletions(-)
Hello Arend,
I finally had some time to test your patches.
On my hardware I couldn't find any regressions with these patches. I also verified that the reception problems I had with my card are fixed by these patches.
I did test the patches on top of 3.10.5 as they did apply without any problems.
Greetings,
Maxi
Quoted 37 lines · Maximilian Engelhardt
Quoted 27 lines · On Tuesday 13 August 2013 22:03:27 Arend van Spriel wrote:
This series replaces the patch "[PATCH 12/12] brcmsmac: support 4313iPA" with Message-ID:<[email protected]>.
It has been split up into individual patches. Please test this series especially if you had issues with the original commit b6fc28a that was reverted.
Cc Jonas Gorski<[email protected]>Cc David Herrmann<[email protected]>Cc Maximilian Engelhardt<[email protected]>Cc David Costa<[email protected]>Arend van Spriel (13):
brcmsmac: cosmetic change inphy_lcn.c
brcmsmac: changepa_gainfor bcm4313 iPA
brcmsmac: useARRAY_SIZEinphytbl_lcn.c
brcmsmac: add switch control table for BCM4313 iPA BT-combo cards
brcmsmac: add debug info message providing phy and radio info
brcmsmac: update transmit gain table for lcn phy
brcmsmac: change lcnphy receive i/q calibration routine
brcmsmac: fix TSSI idle estimation
brcmsmac: avoid callingset_txpwr_by_index()twice
brcmsmac: rework switch control table init including iPA BT-combo
brcmsmac: correct phy registers for TSSI-based power control
brcmsmac: reinitialize TSSI power control upon channel switch
brcmsmac: add support for BCM4313 iPA variantQuoted 6 lines
drivers/net/wireless/brcm80211/brcmsmac/main.c | 4 +- .../net/wireless/brcm80211/brcmsmac/phy/phy_lcn.c | 397 +++++++++++-------- .../wireless/brcm80211/brcmsmac/phy/phytbl_lcn.c | 405 +++++++++++--------- .../wireless/brcm80211/brcmsmac/phy/phytbl_lcn.h | 1 + 4 files changed, 475 insertions(+), 332 deletions(-)Hello Arend,
Quoted 8 lines
I finally had some time to test your patches.
On my hardware I couldn't find any regressions with these patches. I also verified that the reception problems I had with my card are fixed by these patches.
I did test the patches on top of 3.10.5 as they did apply without any problems.
Appreciated. I did send the patches for wireless-next already, ie. for v3.12 kernel. Good to know that they apply to 3.10 as is.
Regards,
Arend