The code in the mac80211 version of radio_init2050 differs from the specs
in two places.
Signed-off-by: Larry Finger <[email protected]>
---
Index: wireless-mb/drivers/net/wireless/mac80211/bcm43xx/bcm43xx_phy.c
===================================================================
--- wireless-mb.orig/drivers/net/wireless/mac80211/bcm43xx/bcm43xx_phy.c
+++ wireless-mb/drivers/net/wireless/mac80211/bcm43xx/bcm43xx_phy.c
@@ -3444,9 +3444,9 @@ static u16 radio2050_rfover_val(struct b
if (phy_register == BCM43xx_PHY_RFOVER) {
return 0x9B3;
} else if (phy_register == BCM43xx_PHY_RFOVERVAL) {
- extlna |= (i << 8);
if (extlna)
extlna |= 0x8000;
+ extlna |= (i << 8);
switch (lpd) {
case LPD(0, 1, 1):
return 0x8F92;
@@ -3724,9 +3724,10 @@ u16 bcm43xx_radio_init2050(struct bcm43x
bcm43xx_phy_stackrestore(stack, BCM43xx_PHY_ANALOGOVERVAL);
bcm43xx_phy_stackrestore(stack, BCM43xx_PHY_CRS0);
bcm43xx_phy_stackrestore(stack, BCM43xx_PHY_CLASSCTL);
- bcm43xx_write16(dev, BCM43xx_MMIO_PHY_RADIO,
- bcm43xx_read16(dev, BCM43xx_MMIO_PHY_RADIO)
- & 0x7FFF);
+ if (has_loopback_gain(phy)) {
+ bcm43xx_phy_stackrestore(stack, BCM43xx_PHY_LO_MASK);
+ bcm43xx_phy_stackrestore(stack, BCM43xx_PHY_LO_CTL);
+ }
}
if (i > 15)
ret = radio78;
On Wednesday 21 March 2007 16:29, Larry Finger wrote:
> Michael Buesch wrote:
> > On Tuesday 20 March 2007 21:49, Larry Finger wrote:
> >> The code in the mac80211 version of radio_init2050 differs from the specs
> >> in two places.
> >>
> >> Signed-off-by: Larry Finger <[email protected]>
> >> ---
> >>
> >> Index: wireless-mb/drivers/net/wireless/mac80211/bcm43xx/bcm43xx_phy.c
> >> ===================================================================
> >> --- wireless-mb.orig/drivers/net/wireless/mac80211/bcm43xx/bcm43xx_phy.c
> >> +++ wireless-mb/drivers/net/wireless/mac80211/bcm43xx/bcm43xx_phy.c
> >> @@ -3444,9 +3444,9 @@ static u16 radio2050_rfover_val(struct b
> >> if (phy_register == BCM43xx_PHY_RFOVER) {
> >> return 0x9B3;
> >> } else if (phy_register == BCM43xx_PHY_RFOVERVAL) {
> >> - extlna |= (i << 8);
> >> if (extlna)
> >> extlna |= 0x8000;
> >> + extlna |= (i << 8);
> >
> > What's the difference?
>
> The nonzero test for extlna should be made on the table value, not the table value or'd with i << 8.
Eh, wait.
The spec is not clear (at least to me) on this point:
# OR the loop position value left shifted by 8 with the External LNA Control Value
# If the External LNA Value isn't 0
1. OR the value with 0x8000
# OR this value with the table values below which are marked with Yes
>From my understanding current code is correct.
But I see that one could interpret the spec in your way as well.
Joseph?
--
Greetings Michael.
On Tuesday 20 March 2007 21:49, Larry Finger wrote:
> The code in the mac80211 version of radio_init2050 differs from the specs
> in two places.
>
> Signed-off-by: Larry Finger <[email protected]>
> ---
>
> Index: wireless-mb/drivers/net/wireless/mac80211/bcm43xx/bcm43xx_phy.c
> ===================================================================
> --- wireless-mb.orig/drivers/net/wireless/mac80211/bcm43xx/bcm43xx_phy.c
> +++ wireless-mb/drivers/net/wireless/mac80211/bcm43xx/bcm43xx_phy.c
> @@ -3444,9 +3444,9 @@ static u16 radio2050_rfover_val(struct b
> if (phy_register == BCM43xx_PHY_RFOVER) {
> return 0x9B3;
> } else if (phy_register == BCM43xx_PHY_RFOVERVAL) {
> - extlna |= (i << 8);
> if (extlna)
> extlna |= 0x8000;
> + extlna |= (i << 8);
What's the difference?
> switch (lpd) {
> case LPD(0, 1, 1):
> return 0x8F92;
> @@ -3724,9 +3724,10 @@ u16 bcm43xx_radio_init2050(struct bcm43x
> bcm43xx_phy_stackrestore(stack, BCM43xx_PHY_ANALOGOVERVAL);
> bcm43xx_phy_stackrestore(stack, BCM43xx_PHY_CRS0);
> bcm43xx_phy_stackrestore(stack, BCM43xx_PHY_CLASSCTL);
> - bcm43xx_write16(dev, BCM43xx_MMIO_PHY_RADIO,
> - bcm43xx_read16(dev, BCM43xx_MMIO_PHY_RADIO)
> - & 0x7FFF);
> + if (has_loopback_gain(phy)) {
> + bcm43xx_phy_stackrestore(stack, BCM43xx_PHY_LO_MASK);
> + bcm43xx_phy_stackrestore(stack, BCM43xx_PHY_LO_CTL);
> + }
Makes sense. Thanks.
> }
> if (i > 15)
> ret = radio78;
>
>
--
Greetings Michael.
On Wednesday 21 March 2007 16:29, Larry Finger wrote:
> Michael Buesch wrote:
> > On Tuesday 20 March 2007 21:49, Larry Finger wrote:
> >> The code in the mac80211 version of radio_init2050 differs from the specs
> >> in two places.
> >>
> >> Signed-off-by: Larry Finger <[email protected]>
> >> ---
> >>
> >> Index: wireless-mb/drivers/net/wireless/mac80211/bcm43xx/bcm43xx_phy.c
> >> ===================================================================
> >> --- wireless-mb.orig/drivers/net/wireless/mac80211/bcm43xx/bcm43xx_phy.c
> >> +++ wireless-mb/drivers/net/wireless/mac80211/bcm43xx/bcm43xx_phy.c
> >> @@ -3444,9 +3444,9 @@ static u16 radio2050_rfover_val(struct b
> >> if (phy_register == BCM43xx_PHY_RFOVER) {
> >> return 0x9B3;
> >> } else if (phy_register == BCM43xx_PHY_RFOVERVAL) {
> >> - extlna |= (i << 8);
> >> if (extlna)
> >> extlna |= 0x8000;
> >> + extlna |= (i << 8);
> >
> > What's the difference?
>
> The nonzero test for extlna should be made on the table value, not the table value or'd with i << 8.
Oh, I see. Some brain screwage on my side :)
--
Greetings Michael.
Michael Buesch wrote:
> On Tuesday 20 March 2007 21:49, Larry Finger wrote:
>> The code in the mac80211 version of radio_init2050 differs from the specs
>> in two places.
>>
>> Signed-off-by: Larry Finger <[email protected]>
>> ---
>>
>> Index: wireless-mb/drivers/net/wireless/mac80211/bcm43xx/bcm43xx_phy.c
>> ===================================================================
>> --- wireless-mb.orig/drivers/net/wireless/mac80211/bcm43xx/bcm43xx_phy.c
>> +++ wireless-mb/drivers/net/wireless/mac80211/bcm43xx/bcm43xx_phy.c
>> @@ -3444,9 +3444,9 @@ static u16 radio2050_rfover_val(struct b
>> if (phy_register == BCM43xx_PHY_RFOVER) {
>> return 0x9B3;
>> } else if (phy_register == BCM43xx_PHY_RFOVERVAL) {
>> - extlna |= (i << 8);
>> if (extlna)
>> extlna |= 0x8000;
>> + extlna |= (i << 8);
>
> What's the difference?
The nonzero test for extlna should be made on the table value, not the table value or'd with i << 8.
Larry
>>From my understanding current code is correct.
> But I see that one could interpret the spec in your way as well.
> Joseph?
If the External LNA value, as read from the table, is non-zero, OR
that value with 0x8000 (which I think is the "enable the External
LNA flag).
I've updated the specs to reflect this.
-Joe