Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=a5d79d1e4fa58e12a37c91963fc071d811d2cffd
Commit:     a5d79d1e4fa58e12a37c91963fc071d811d2cffd
Parent:     740ac4fb08866d702be90f167665d03759bd27d0
Author:     Larry Finger <[EMAIL PROTECTED]>
AuthorDate: Tue Feb 13 16:56:21 2007 -0600
Committer:  John W. Linville <[EMAIL PROTECTED]>
CommitDate: Wed Feb 14 15:45:05 2007 -0500

    [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<[EMAIL PROTECTED]>
    Signed-off-by: John W. Linville <[EMAIL PROTECTED]>
---
 drivers/net/wireless/bcm43xx/bcm43xx_ilt.c |   15 +++++++++++++++
 drivers/net/wireless/bcm43xx/bcm43xx_ilt.h |    1 +
 drivers/net/wireless/bcm43xx/bcm43xx_phy.c |    8 ++++----
 3 files changed, 20 insertions(+), 4 deletions(-)

diff --git a/drivers/net/wireless/bcm43xx/bcm43xx_ilt.c 
b/drivers/net/wireless/bcm43xx/bcm43xx_ilt.c
index ad8e569..f2b8dba 100644
--- a/drivers/net/wireless/bcm43xx/bcm43xx_ilt.c
+++ b/drivers/net/wireless/bcm43xx/bcm43xx_ilt.c
@@ -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) {
diff --git a/drivers/net/wireless/bcm43xx/bcm43xx_ilt.h 
b/drivers/net/wireless/bcm43xx/bcm43xx_ilt.h
index 464521a..d7eaf5f 100644
--- a/drivers/net/wireless/bcm43xx/bcm43xx_ilt.h
+++ b/drivers/net/wireless/bcm43xx/bcm43xx_ilt.h
@@ -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_ */
diff --git a/drivers/net/wireless/bcm43xx/bcm43xx_phy.c 
b/drivers/net/wireless/bcm43xx/bcm43xx_phy.c
index a08f9d1..3a5c9c2 100644
--- a/drivers/net/wireless/bcm43xx/bcm43xx_phy.c
+++ b/drivers/net/wireless/bcm43xx/bcm43xx_phy.c
@@ -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++)
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to