Skip to contentSkip to conversation

b43: LP-PHY: Fix analog core switching

PATCH In review Gábor Stefanik 3 participants 3 messages Sep 14, 2009 Networking drivers (wireless)

lore
Share & tools
lore
#0 lore raw

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
index 80da9c7..b0e127a 100644
@@ -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,
#1 lore raw
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.

---

drivers/net/wireless/b43/phy_lp.c +0 -0
index 80da9c7..b0e127a 100644

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_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

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

#2 lore raw
In reply to Gábor Stefanik
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.

---

drivers/net/wireless/b43/phy_lp.c +0 -0
index 80da9c7..b0e127a 100644
@@ -2160,6 +2160,16 @@ static int lpphy_b2063_tune(struct b43_w
 	return 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.