mirror of
https://github.com/torvalds/linux.git
synced 2024-10-31 01:01:52 +00:00
[PATCH] bcm43xx: OFDM fix for rev 1 cards
Nearly all of the writes to the bcm43xx internal lookup tables (ilt) involve 16-bit quantities. Accordingly, the ilt_write routine was coded to pass a u16 value. For one early GPHY chip, 32-bit quantities are needed. For those writes, the value was clipped to 16 bits. This patch adds an ilt_write32 routine that receives a 32-bit quantity and writes it to the appropriate locations. Signed-off-by: Larry Finger<Larry.Finger@lwfinger.net> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
740ac4fb08
commit
a5d79d1e4f
@ -325,6 +325,21 @@ void bcm43xx_ilt_write(struct bcm43xx_private *bcm, u16 offset, u16 val)
|
||||
}
|
||||
}
|
||||
|
||||
void bcm43xx_ilt_write32(struct bcm43xx_private *bcm, u16 offset, u32 val)
|
||||
{
|
||||
if (bcm43xx_current_phy(bcm)->type == BCM43xx_PHYTYPE_A) {
|
||||
bcm43xx_phy_write(bcm, BCM43xx_PHY_ILT_A_CTRL, offset);
|
||||
mmiowb();
|
||||
bcm43xx_phy_write(bcm, BCM43xx_PHY_ILT_A_DATA2, (val & 0xFFFF0000) >> 16);
|
||||
bcm43xx_phy_write(bcm, BCM43xx_PHY_ILT_A_DATA1, val & 0x0000FFFF);
|
||||
} else {
|
||||
bcm43xx_phy_write(bcm, BCM43xx_PHY_ILT_G_CTRL, offset);
|
||||
mmiowb();
|
||||
bcm43xx_phy_write(bcm, BCM43xx_PHY_ILT_G_DATA2, (val & 0xFFFF0000) >> 16);
|
||||
bcm43xx_phy_write(bcm, BCM43xx_PHY_ILT_G_DATA1, val & 0x0000FFFF);
|
||||
}
|
||||
}
|
||||
|
||||
u16 bcm43xx_ilt_read(struct bcm43xx_private *bcm, u16 offset)
|
||||
{
|
||||
if (bcm43xx_current_phy(bcm)->type == BCM43xx_PHYTYPE_A) {
|
||||
|
@ -27,6 +27,7 @@ extern const u16 bcm43xx_ilt_sigmasqr2[BCM43xx_ILT_SIGMASQR_SIZE];
|
||||
|
||||
|
||||
void bcm43xx_ilt_write(struct bcm43xx_private *bcm, u16 offset, u16 val);
|
||||
void bcm43xx_ilt_write32(struct bcm43xx_private *bcm, u16 offset, u32 val);
|
||||
u16 bcm43xx_ilt_read(struct bcm43xx_private *bcm, u16 offset);
|
||||
|
||||
#endif /* BCM43xx_ILT_H_ */
|
||||
|
@ -344,7 +344,7 @@ static void bcm43xx_phy_setupg(struct bcm43xx_private *bcm)
|
||||
for (i = 0; i < BCM43xx_ILT_NOISEG1_SIZE; i++)
|
||||
bcm43xx_ilt_write(bcm, 0x1800 + i, bcm43xx_ilt_noiseg1[i]);
|
||||
for (i = 0; i < BCM43xx_ILT_ROTOR_SIZE; i++)
|
||||
bcm43xx_ilt_write(bcm, 0x2000 + i, bcm43xx_ilt_rotor[i]);
|
||||
bcm43xx_ilt_write32(bcm, 0x2000 + i, bcm43xx_ilt_rotor[i]);
|
||||
} else {
|
||||
/* nrssi values are signed 6-bit values. Not sure why we write 0x7654 here... */
|
||||
bcm43xx_nrssi_hw_write(bcm, 0xBA98, (s16)0x7654);
|
||||
@ -384,7 +384,7 @@ static void bcm43xx_phy_setupg(struct bcm43xx_private *bcm)
|
||||
|
||||
if (phy->rev == 1) {
|
||||
for (i = 0; i < BCM43xx_ILT_RETARD_SIZE; i++)
|
||||
bcm43xx_ilt_write(bcm, 0x2400 + i, bcm43xx_ilt_retard[i]);
|
||||
bcm43xx_ilt_write32(bcm, 0x2400 + i, bcm43xx_ilt_retard[i]);
|
||||
for (i = 0; i < 4; i++) {
|
||||
bcm43xx_ilt_write(bcm, 0x5404 + i, 0x0020);
|
||||
bcm43xx_ilt_write(bcm, 0x5408 + i, 0x0020);
|
||||
@ -507,10 +507,10 @@ static void bcm43xx_phy_setupa(struct bcm43xx_private *bcm)
|
||||
for (i = 0; i < BCM43xx_ILT_NOISEA2_SIZE; i++)
|
||||
bcm43xx_ilt_write(bcm, 0x1800 + i, bcm43xx_ilt_noisea2[i]);
|
||||
for (i = 0; i < BCM43xx_ILT_ROTOR_SIZE; i++)
|
||||
bcm43xx_ilt_write(bcm, 0x2000 + i, bcm43xx_ilt_rotor[i]);
|
||||
bcm43xx_ilt_write32(bcm, 0x2000 + i, bcm43xx_ilt_rotor[i]);
|
||||
bcm43xx_phy_init_noisescaletbl(bcm);
|
||||
for (i = 0; i < BCM43xx_ILT_RETARD_SIZE; i++)
|
||||
bcm43xx_ilt_write(bcm, 0x2400 + i, bcm43xx_ilt_retard[i]);
|
||||
bcm43xx_ilt_write32(bcm, 0x2400 + i, bcm43xx_ilt_retard[i]);
|
||||
break;
|
||||
case 3:
|
||||
for (i = 0; i < 64; i++)
|
||||
|
Loading…
Reference in New Issue
Block a user