Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=aaf83d4fc4a596929306c894d341e17fbdfba758
Commit:     aaf83d4fc4a596929306c894d341e17fbdfba758
Parent:     4481d6093e62e168ab06e9bbb4e67a9bebb8c7f7
Author:     Daniel Drake <[EMAIL PROTECTED]>
AuthorDate: Thu May 24 01:07:15 2007 +0100
Committer:  Jeff Garzik <[EMAIL PROTECTED]>
CommitDate: Sun Jul 8 22:16:37 2007 -0400

    [PATCH] zd1211rw: Make CCK gain patching conditional on RF type
    
    The vendor driver code suggests that CR47 patching happens on every channel
    change for every RF (depending on bit 8 in POD).
    
    Due to a bug in their driver (upper bits of RF_Mode get zeroed out, then
    are examined for 1s when setting some other flags), this isn't actually
    what happens, and their generic CCK patching routine never takes effect.
    
    Some of their RF configurations do include explicit (duplicated) code
    for CR47 patching though. This patch makes zd1211rw match that
    behaviour.
    
    Signed-off-by: Daniel Drake <[EMAIL PROTECTED]>
    Signed-off-by: John W. Linville <[EMAIL PROTECTED]>
---
 drivers/net/wireless/zd1211rw/zd_chip.c       |    2 +-
 drivers/net/wireless/zd1211rw/zd_rf.h         |   14 ++++++++++++++
 drivers/net/wireless/zd1211rw/zd_rf_al2230.c  |    1 +
 drivers/net/wireless/zd1211rw/zd_rf_al7230b.c |    1 +
 4 files changed, 17 insertions(+), 1 deletions(-)

diff --git a/drivers/net/wireless/zd1211rw/zd_chip.c 
b/drivers/net/wireless/zd1211rw/zd_chip.c
index 4a2ceb9..5b624bf 100644
--- a/drivers/net/wireless/zd1211rw/zd_chip.c
+++ b/drivers/net/wireless/zd1211rw/zd_chip.c
@@ -1286,7 +1286,7 @@ static int patch_cck_gain(struct zd_chip *chip)
        int r;
        u32 value;
 
-       if (!chip->patch_cck_gain)
+       if (!chip->patch_cck_gain || !zd_rf_should_patch_cck_gain(&chip->rf))
                return 0;
 
        ZD_ASSERT(mutex_is_locked(&chip->mutex));
diff --git a/drivers/net/wireless/zd1211rw/zd_rf.h 
b/drivers/net/wireless/zd1211rw/zd_rf.h
index 6dced2a..c6dfd82 100644
--- a/drivers/net/wireless/zd1211rw/zd_rf.h
+++ b/drivers/net/wireless/zd1211rw/zd_rf.h
@@ -52,6 +52,12 @@ struct zd_rf {
         * defaults to 1 (yes) */
        u8 update_channel_int:1;
 
+       /* whether CR47 should be patched from the EEPROM, if the appropriate
+        * flag is set in the POD. The vendor driver suggests that this should
+        * be done for all RF's, but a bug in their code prevents but their
+        * HW_OverWritePhyRegFromE2P() routine from ever taking effect. */
+       u8 patch_cck_gain:1;
+
        /* private RF driver data */
        void *priv;
 
@@ -84,6 +90,14 @@ static inline int zd_rf_should_update_pwr_int(struct zd_rf 
*rf)
        return rf->update_channel_int;
 }
 
+static inline int zd_rf_should_patch_cck_gain(struct zd_rf *rf)
+{
+       return rf->patch_cck_gain;
+}
+
+int zd_rf_patch_6m_band_edge(struct zd_rf *rf, u8 channel);
+int zd_rf_generic_patch_6m(struct zd_rf *rf, u8 channel);
+
 /* Functions for individual RF chips */
 
 int zd_rf_init_rf2959(struct zd_rf *rf);
diff --git a/drivers/net/wireless/zd1211rw/zd_rf_al2230.c 
b/drivers/net/wireless/zd1211rw/zd_rf_al2230.c
index 511392a..e7a4ecf 100644
--- a/drivers/net/wireless/zd1211rw/zd_rf_al2230.c
+++ b/drivers/net/wireless/zd1211rw/zd_rf_al2230.c
@@ -432,5 +432,6 @@ int zd_rf_init_al2230(struct zd_rf *rf)
                rf->switch_radio_on = zd1211_al2230_switch_radio_on;
        }
        rf->patch_6m_band_edge = zd_rf_generic_patch_6m;
+       rf->patch_cck_gain = 1;
        return 0;
 }
diff --git a/drivers/net/wireless/zd1211rw/zd_rf_al7230b.c 
b/drivers/net/wireless/zd1211rw/zd_rf_al7230b.c
index 5e5e9dd..f4e8b6a 100644
--- a/drivers/net/wireless/zd1211rw/zd_rf_al7230b.c
+++ b/drivers/net/wireless/zd1211rw/zd_rf_al7230b.c
@@ -483,6 +483,7 @@ int zd_rf_init_al7230b(struct zd_rf *rf)
                rf->switch_radio_on = zd1211_al7230b_switch_radio_on;
                rf->set_channel = zd1211_al7230b_set_channel;
                rf->patch_6m_band_edge = zd_rf_generic_patch_6m;
+               rf->patch_cck_gain = 1;
        }
 
        rf->switch_radio_off = al7230b_switch_radio_off;
-
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