In looking at the support code for Type 2057 radios in brcmsmac, I noticed the
following routine:
static void wlc_phy_radio_init_2057(struct brcms_phy *pi)
{
struct radio_20xx_regs *regs_2057_ptr = NULL;
if (NREV_IS(pi->pubpi.phy_rev, 7)) {
regs_2057_ptr = regs_2057_rev4;
} else if (NREV_IS(pi->pubpi.phy_rev, 8)
|| NREV_IS(pi->pubpi.phy_rev, 9)) {
switch (pi->pubpi.radiorev) {
case 5:
if (pi->pubpi.radiover == 0x0)
regs_2057_ptr = regs_2057_rev5;
else if (pi->pubpi.radiover == 0x1)
regs_2057_ptr = regs_2057_rev5v1;
else
break;
case 7:
regs_2057_ptr = regs_2057_rev7;
break;
case 8:
regs_2057_ptr = regs_2057_rev8;
break;
default:
break;
}
}
wlc_phy_init_radio_regs_allbands(pi, regs_2057_ptr);
}
I do not think that the code for phy revisions 8 or 9, and radio revision 5 is
correct. When the radio version is 0, or 1, the case statement will fall through
to the radio revision 7 case, thereby negating the logic that sets regs_2057_ptr
for case 5.
I think the following patch will fix it:
Index: wireless-testing-new/drivers/net/wireless/brcm80211/brcmsmac/phy/phy_n.c
===================================================================
--- wireless-testing-new.orig/drivers/net/wireless/brcm80211/brcmsmac/phy/phy_n.c
+++ wireless-testing-new/drivers/net/wireless/brcm80211/brcmsmac/phy/phy_n.c
@@ -19996,8 +19996,8 @@ static void wlc_phy_radio_init_2057(stru
regs_2057_ptr = regs_2057_rev5;
else if (pi->pubpi.radiover == 0x1)
regs_2057_ptr = regs_2057_rev5v1;
- else
- break;
+
+ break;
case 7:
Larry
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html