b43: LP-PHY: Fix analog core switching
PATCH 1/1 b43: LP-PHY: Fix analog core switching
The generic analog switch routine is not correct for LP-PHY according to the latest specs. Implement the proper analog core switch routine.
---
drivers/net/wireless/b43/phy_lp.c +0 -0
@@ -2160,6 +2160,16 @@ static int lpphy_b2063_tune(struct b43_w
return 0; }
+static void b43_lpphy_op_switch_analog(struct b43_wldev *dev, bool on) +{
+ if (on) {
+ b43_phy_set(dev, B43_LPPHY_AFE_CTL_OVRVAL, 0x7);
+ b43_phy_set(dev, B43_LPPHY_AFE_CTL_OVR, 0x7);
+ } else {
+ b43_phy_mask(dev, B43_LPPHY_AFE_CTL_OVR, 0xFFF8);
+ }
+}
+
static int b43_lpphy_op_switch_channel(struct b43_wldev *dev,
unsigned int new_channel)
{
@@ -2239,7 +2249,7 @@ const struct b43_phy_operations b43_phyo
.radio_read = b43_lpphy_op_radio_read, .radio_write = b43_lpphy_op_radio_write, .software_rfkill = b43_lpphy_op_software_rfkill, - .switch_analog = b43_phyop_switch_analog_generic, + .switch_analog = b43_lpphy_op_switch_analog, .switch_channel = b43_lpphy_op_switch_channel, .get_default_chan = b43_lpphy_op_get_default_chan, .set_rx_antenna = b43_lpphy_op_set_rx_antenna,
Quoted 10 lines · Gábor Stefanik
The generic analog switch routine is not correct for LP-PHY according to the latest specs. Implement the proper analog core switch routine.
Signed-off-by Gábor Stefanik <[email protected]>---
drivers/net/wireless/b43/phy_lp.c +0
-0
drivers/net/wireless/b43/phy_lp.c static int lpphy_b2063_tune(struct b43_w · line 2164
Quoted 5 lines
drivers/net/wireless/b43/phy_lp.c +2
-0@@ -2160,6 +2160,16 @@ static int lpphy_b2063_tune(struct b43_wreturn 0 ; } +static void b43_lpphy_op_switch_analog (struct b43_wldev *dev,bool on) +{
The spec says:
Else if this in an LP PHY
a. If argument "on" is zero
1. OR PHY Register 0x43C with 7
2. OR PHY Register 0x43B with 7
drivers/net/wireless/b43/phy_lp.c static int lpphy_b2063_tune(struct b43_w · line 2165
Quoted 1 line
drivers/net/wireless/b43/phy_lp.c +1
-0+if (on) {
This stuff is executed when on is true (ie. anything else than zero)
Quoted 24 lines
drivers/net/wireless/b43/phy_lp.c +8
-1+b43_phy_set (dev,B43_LPPHY_AFE_CTL_OVRVAL ,0x7 ); +b43_phy_set (dev,B43_LPPHY_AFE_CTL_OVR ,0x7 ); + }else { +b43_phy_mask (dev,B43_LPPHY_AFE_CTL_OVR ,0xFFF8 ); + } +} +static int b43_lpphy_op_switch_channel (struct b43_wldev *dev,unsigned int new_channel) {@@ -2239,7 +2249,7 @@ const struct b43_phy_operations b43_phyo .radio_read = b43_lpphy_op_radio_read, .radio_write = b43_lpphy_op_radio_write, .software_rfkill = b43_lpphy_op_software_rfkill, - .switch_analog = b43_phyop_switch_analog_generic, + .switch_analog = b43_lpphy_op_switch_analog, .switch_channel = b43_lpphy_op_switch_channel, .get_default_chan = b43_lpphy_op_get_default_chan, .set_rx_antenna = b43_lpphy_op_set_rx_antenna,_______________________________________________
Bcm43xx-dev mailing list
[email protected]
https://lists.berlios.de/mailman/listinfo/bcm43xx-dev
Quoted 12 lines · On Monday 14 September 2009 21:10:04 Gábor Stefanik wrote:
The generic analog switch routine is not correct for LP-PHY according to the latest specs. Implement the proper analog core switch routine.
Signed-off-by Gábor Stefanik <[email protected]>---
drivers/net/wireless/b43/phy_lp.c +0
-0@@ -2160,6 +2160,16 @@ static int lpphy_b2063_tune(struct b43_wreturn 0 ; }
drivers/net/wireless/b43/phy_lp.c static int lpphy_b2063_tune(struct b43_w · line 2171
Quoted 10 lines
drivers/net/wireless/b43/phy_lp.c +9
-0+static void b43_lpphy_op_switch_analog (struct b43_wldev *dev,bool on) +{ +if (on) { +b43_phy_set (dev,B43_LPPHY_AFE_CTL_OVRVAL ,0x7 ); +b43_phy_set (dev,B43_LPPHY_AFE_CTL_OVR ,0x7 ); + }else { +b43_phy_mask (dev,B43_LPPHY_AFE_CTL_OVR ,0xFFF8 ); + } +}
You have the if branches swapped. (Don't add a ! in front of the on. Swap the branches).
Signature · 1 line
Greetings, Michael.