[PATCH] b43: LP-PHY: Fix analog core switching

2009-09-14 Thread 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 netrolller...@gmail.com
---
diff --git a/drivers/net/wireless/b43/phy_lp.c 
b/drivers/net/wireless/b43/phy_lp.c
index 80da9c7..b0e127a 100644
--- a/drivers/net/wireless/b43/phy_lp.c
+++ b/drivers/net/wireless/b43/phy_lp.c
@@ -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,

___
Bcm43xx-dev mailing list
Bcm43xx-dev@lists.berlios.de
https://lists.berlios.de/mailman/listinfo/bcm43xx-dev


Re: [PATCH] b43: LP-PHY: Fix analog core switching

2009-09-14 Thread Thomas Ilnseher
On Mo, 2009-09-14 at 21:10 +0200, 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 netrolller...@gmail.com
 ---
 diff --git a/drivers/net/wireless/b43/phy_lp.c 
 b/drivers/net/wireless/b43/phy_lp.c
 index 80da9c7..b0e127a 100644
 --- a/drivers/net/wireless/b43/phy_lp.c
 +++ b/drivers/net/wireless/b43/phy_lp.c
 @@ -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)
 +{
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 

 + if (on) {
This stuff is executed when on is true (ie. anything else than zero)
 + 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
 Bcm43xx-dev@lists.berlios.de
 https://lists.berlios.de/mailman/listinfo/bcm43xx-dev

___
Bcm43xx-dev mailing list
Bcm43xx-dev@lists.berlios.de
https://lists.berlios.de/mailman/listinfo/bcm43xx-dev


Re: [PATCH] b43: LP-PHY: Fix analog core switching

2009-09-14 Thread Michael Buesch
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 netrolller...@gmail.com
 ---
 diff --git a/drivers/net/wireless/b43/phy_lp.c 
 b/drivers/net/wireless/b43/phy_lp.c
 index 80da9c7..b0e127a 100644
 --- a/drivers/net/wireless/b43/phy_lp.c
 +++ b/drivers/net/wireless/b43/phy_lp.c
 @@ -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);
 + }
 +}

You have the if branches swapped. (Don't add a ! in front of the on. Swap the 
branches).

-- 
Greetings, Michael.
___
Bcm43xx-dev mailing list
Bcm43xx-dev@lists.berlios.de
https://lists.berlios.de/mailman/listinfo/bcm43xx-dev