[PATCH] zd1211rw: Extend RF layer
authorDaniel Drake <dsd@gentoo.org>
Thu, 24 May 2007 00:06:41 +0000 (01:06 +0100)
committerJeff Garzik <jeff@garzik.org>
Mon, 9 Jul 2007 02:16:37 +0000 (22:16 -0400)
These changes are needed for UW2453 RF support:

Add pointer which RF drivers can use to store private RF data
Add exit hook so that RF drivers can free private data
Allow RF's to disable the generic TX power integration handling code

Signed-off-by: Daniel Drake <dsd@gentoo.org>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/zd1211rw/zd_chip.c
drivers/net/wireless/zd1211rw/zd_rf.c
drivers/net/wireless/zd1211rw/zd_rf.h

index 95b4a2a26707b2f85cf6755d07092975450aa2a8..4a2ceb93aaad3e369755aa6ee34915abedf68d47 100644 (file)
@@ -1253,6 +1253,9 @@ static int update_channel_integration_and_calibration(struct zd_chip *chip,
 {
        int r;
 
+       if (!zd_rf_should_update_pwr_int(&chip->rf))
+               return 0;
+
        r = update_pwr_int(chip, channel);
        if (r)
                return r;
index 549c23bcd6ccce78b752060892f0326d6b54b57d..c4981ad2f9ea5caa9a00d464853d92cb97a7e3a7 100644 (file)
@@ -52,10 +52,16 @@ const char *zd_rf_name(u8 type)
 void zd_rf_init(struct zd_rf *rf)
 {
        memset(rf, 0, sizeof(*rf));
+
+       /* default to update channel integration, as almost all RF's do want
+        * this */
+       rf->update_channel_int = 1;
 }
 
 void zd_rf_clear(struct zd_rf *rf)
 {
+       if (rf->clear)
+               rf->clear(rf);
        ZD_MEMCLEAR(rf, sizeof(*rf));
 }
 
index aa9cc105ce60daf199c062952cddbfb83eeb6f48..c204f9ae71281ff91f3101be5c4b6e03e69f15c0 100644 (file)
@@ -48,12 +48,20 @@ struct zd_rf {
 
        u8 channel;
 
+       /* whether channel integration and calibration should be updated
+        * defaults to 1 (yes) */
+       u8 update_channel_int:1;
+
+       /* private RF driver data */
+       void *priv;
+
        /* RF-specific functions */
        int (*init_hw)(struct zd_rf *rf);
        int (*set_channel)(struct zd_rf *rf, u8 channel);
        int (*switch_radio_on)(struct zd_rf *rf);
        int (*switch_radio_off)(struct zd_rf *rf);
        int (*patch_6m_band_edge)(struct zd_rf *rf, u8 channel);
+       void (*clear)(struct zd_rf *rf);
 };
 
 const char *zd_rf_name(u8 type);
@@ -71,6 +79,11 @@ int zd_switch_radio_off(struct zd_rf *rf);
 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);
 
+static inline int zd_rf_should_update_pwr_int(struct zd_rf *rf)
+{
+       return rf->update_channel_int;
+}
+
 /* Functions for individual RF chips */
 
 int zd_rf_init_rf2959(struct zd_rf *rf);