aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/b43/phy_n.c
diff options
context:
space:
mode:
authorJohn W. Linville <linville@tuxdriver.com>2010-08-25 14:51:42 -0400
committerJohn W. Linville <linville@tuxdriver.com>2010-08-25 14:51:42 -0400
commite569aa78ba01f7f66e016a4d57310fd041524d17 (patch)
treeeaedc03d42ee2bf6200fc07b080a99bad103def3 /drivers/net/wireless/b43/phy_n.c
parent4562487a00445eab96311365ba15c41dc4d043cd (diff)
parent268bae0b6879f238ba57f5f801958d1254e136f7 (diff)
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-next-2.6 into for-davem
Conflicts: drivers/net/wireless/libertas/if_sdio.c
Diffstat (limited to 'drivers/net/wireless/b43/phy_n.c')
-rw-r--r--drivers/net/wireless/b43/phy_n.c60
1 files changed, 55 insertions, 5 deletions
diff --git a/drivers/net/wireless/b43/phy_n.c b/drivers/net/wireless/b43/phy_n.c
index e288c559481..d116229c334 100644
--- a/drivers/net/wireless/b43/phy_n.c
+++ b/drivers/net/wireless/b43/phy_n.c
@@ -893,7 +893,7 @@ static void b43_nphy_adjust_lna_gain_table(struct b43_wldev *dev)
893} 893}
894 894
895/* http://bcm-v4.sipsolutions.net/802.11/PHY/N/WorkaroundsGainCtrl */ 895/* http://bcm-v4.sipsolutions.net/802.11/PHY/N/WorkaroundsGainCtrl */
896static void b43_nphy_gain_crtl_workarounds(struct b43_wldev *dev) 896static void b43_nphy_gain_ctrl_workarounds(struct b43_wldev *dev)
897{ 897{
898 struct b43_phy_n *nphy = dev->phy.n; 898 struct b43_phy_n *nphy = dev->phy.n;
899 u8 i, j; 899 u8 i, j;
@@ -1094,11 +1094,12 @@ static void b43_nphy_workarounds(struct b43_wldev *dev)
1094 b43_nphy_set_rf_sequence(dev, 0, events1, delays1, 7); 1094 b43_nphy_set_rf_sequence(dev, 0, events1, delays1, 7);
1095 b43_nphy_set_rf_sequence(dev, 1, events2, delays2, 7); 1095 b43_nphy_set_rf_sequence(dev, 1, events2, delays2, 7);
1096 1096
1097 b43_nphy_gain_crtl_workarounds(dev); 1097 b43_nphy_gain_ctrl_workarounds(dev);
1098 1098
1099 if (dev->phy.rev < 2) { 1099 if (dev->phy.rev < 2) {
1100 if (b43_phy_read(dev, B43_NPHY_RXCTL) & 0x2) 1100 if (b43_phy_read(dev, B43_NPHY_RXCTL) & 0x2)
1101 ; /*TODO: b43_mhf(dev, 2, 0x0010, 0x0010, 3);*/ 1101 b43_hf_write(dev, b43_hf_read(dev) |
1102 B43_HF_MLADVW);
1102 } else if (dev->phy.rev == 2) { 1103 } else if (dev->phy.rev == 2) {
1103 b43_phy_write(dev, B43_NPHY_CRSCHECK2, 0); 1104 b43_phy_write(dev, B43_NPHY_CRSCHECK2, 0);
1104 b43_phy_write(dev, B43_NPHY_CRSCHECK3, 0); 1105 b43_phy_write(dev, B43_NPHY_CRSCHECK3, 0);
@@ -3073,6 +3074,55 @@ static int b43_nphy_cal_rx_iq(struct b43_wldev *dev,
3073 return b43_nphy_rev2_cal_rx_iq(dev, target, type, debug); 3074 return b43_nphy_rev2_cal_rx_iq(dev, target, type, debug);
3074} 3075}
3075 3076
3077/* http://bcm-v4.sipsolutions.net/802.11/PHY/N/MacPhyClkSet */
3078static void b43_nphy_mac_phy_clock_set(struct b43_wldev *dev, bool on)
3079{
3080 u32 tmslow = ssb_read32(dev->dev, SSB_TMSLOW);
3081 if (on)
3082 tmslow |= SSB_TMSLOW_PHYCLK;
3083 else
3084 tmslow &= ~SSB_TMSLOW_PHYCLK;
3085 ssb_write32(dev->dev, SSB_TMSLOW, tmslow);
3086}
3087
3088/* http://bcm-v4.sipsolutions.net/802.11/PHY/N/RxCoreSetState */
3089static void b43_nphy_set_rx_core_state(struct b43_wldev *dev, u8 mask)
3090{
3091 struct b43_phy *phy = &dev->phy;
3092 struct b43_phy_n *nphy = phy->n;
3093 u16 buf[16];
3094
3095 if (0 /* FIXME clk */)
3096 return;
3097
3098 b43_mac_suspend(dev);
3099
3100 if (nphy->hang_avoid)
3101 b43_nphy_stay_in_carrier_search(dev, true);
3102
3103 b43_phy_maskset(dev, B43_NPHY_RFSEQCA, ~B43_NPHY_RFSEQCA_RXEN,
3104 (mask & 0x3) << B43_NPHY_RFSEQCA_RXEN_SHIFT);
3105
3106 if (mask & 0x3 != 0x3) {
3107 b43_phy_write(dev, B43_NPHY_HPANT_SWTHRES, 1);
3108 if (dev->phy.rev >= 3) {
3109 /* TODO */
3110 }
3111 } else {
3112 b43_phy_write(dev, B43_NPHY_HPANT_SWTHRES, 0x1E);
3113 if (dev->phy.rev >= 3) {
3114 /* TODO */
3115 }
3116 }
3117
3118 b43_nphy_force_rf_sequence(dev, B43_RFSEQ_RESET2RX);
3119
3120 if (nphy->hang_avoid)
3121 b43_nphy_stay_in_carrier_search(dev, false);
3122
3123 b43_mac_enable(dev);
3124}
3125
3076/* 3126/*
3077 * Init N-PHY 3127 * Init N-PHY
3078 * http://bcm-v4.sipsolutions.net/802.11/PHY/Init/N 3128 * http://bcm-v4.sipsolutions.net/802.11/PHY/Init/N
@@ -3173,7 +3223,7 @@ int b43_phy_initn(struct b43_wldev *dev)
3173 b43_phy_write(dev, B43_NPHY_BBCFG, tmp & ~B43_NPHY_BBCFG_RSTCCA); 3223 b43_phy_write(dev, B43_NPHY_BBCFG, tmp & ~B43_NPHY_BBCFG_RSTCCA);
3174 b43_nphy_bmac_clock_fgc(dev, 0); 3224 b43_nphy_bmac_clock_fgc(dev, 0);
3175 3225
3176 /* TODO N PHY MAC PHY Clock Set with argument 1 */ 3226 b43_nphy_mac_phy_clock_set(dev, true);
3177 3227
3178 b43_nphy_pa_override(dev, false); 3228 b43_nphy_pa_override(dev, false);
3179 b43_nphy_force_rf_sequence(dev, B43_RFSEQ_RX2TX); 3229 b43_nphy_force_rf_sequence(dev, B43_RFSEQ_RX2TX);
@@ -3199,7 +3249,7 @@ int b43_phy_initn(struct b43_wldev *dev)
3199 } 3249 }
3200 3250
3201 if (nphy->phyrxchain != 3) 3251 if (nphy->phyrxchain != 3)
3202 ;/* TODO N PHY RX Core Set State with phyrxchain as argument */ 3252 b43_nphy_set_rx_core_state(dev, nphy->phyrxchain);
3203 if (nphy->mphase_cal_phase_id > 0) 3253 if (nphy->mphase_cal_phase_id > 0)
3204 ;/* TODO PHY Periodic Calibration Multi-Phase Restart */ 3254 ;/* TODO PHY Periodic Calibration Multi-Phase Restart */
3205 3255