aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGabor Juhos <juhosg@openwrt.org>2011-06-21 05:23:23 -0400
committerJohn W. Linville <linville@tuxdriver.com>2011-06-22 16:09:49 -0400
commit3762561aa8afb0bd9fb60d3d847961f9945f8143 (patch)
tree0968f5136282712d6ace7b952619282ccdf1c88a
parent03689301da71fa80957a166e211431bb6e2904e3 (diff)
ath9k: add MAC revision detection for AR9330
The AR9330 1.0 and 1.1 are using the same revision, thus it is not possible to distinguish the two chips. The platform setup code can distinguish the chips based on the SoC revision. Add a callback function to ath9k_platform_data in order to allow getting the revision number from the platform code. Signed-off-by: Gabor Juhos <juhosg@openwrt.org> Signed-off-by: John W. Linville <linville@tuxdriver.com>
-rw-r--r--drivers/net/wireless/ath/ath9k/hw.c9
-rw-r--r--drivers/net/wireless/ath/ath9k/hw.h1
-rw-r--r--drivers/net/wireless/ath/ath9k/init.c1
-rw-r--r--include/linux/ath9k_platform.h1
4 files changed, 12 insertions, 0 deletions
diff --git a/drivers/net/wireless/ath/ath9k/hw.c b/drivers/net/wireless/ath/ath9k/hw.c
index a3881b64f766..9840e0051084 100644
--- a/drivers/net/wireless/ath/ath9k/hw.c
+++ b/drivers/net/wireless/ath/ath9k/hw.c
@@ -251,6 +251,15 @@ static void ath9k_hw_read_revisions(struct ath_hw *ah)
251 case AR5416_AR9100_DEVID: 251 case AR5416_AR9100_DEVID:
252 ah->hw_version.macVersion = AR_SREV_VERSION_9100; 252 ah->hw_version.macVersion = AR_SREV_VERSION_9100;
253 break; 253 break;
254 case AR9300_DEVID_AR9330:
255 ah->hw_version.macVersion = AR_SREV_VERSION_9330;
256 if (ah->get_mac_revision) {
257 ah->hw_version.macRev = ah->get_mac_revision();
258 } else {
259 val = REG_READ(ah, AR_SREV);
260 ah->hw_version.macRev = MS(val, AR_SREV_REVISION2);
261 }
262 return;
254 case AR9300_DEVID_AR9340: 263 case AR9300_DEVID_AR9340:
255 ah->hw_version.macVersion = AR_SREV_VERSION_9340; 264 ah->hw_version.macVersion = AR_SREV_VERSION_9340;
256 val = REG_READ(ah, AR_SREV); 265 val = REG_READ(ah, AR_SREV);
diff --git a/drivers/net/wireless/ath/ath9k/hw.h b/drivers/net/wireless/ath/ath9k/hw.h
index 14c5857a020c..0749fa8c3a58 100644
--- a/drivers/net/wireless/ath/ath9k/hw.h
+++ b/drivers/net/wireless/ath/ath9k/hw.h
@@ -862,6 +862,7 @@ struct ath_hw {
862 u32 ent_mode; 862 u32 ent_mode;
863 863
864 bool is_clk_25mhz; 864 bool is_clk_25mhz;
865 int (*get_mac_revision)(void);
865}; 866};
866 867
867struct ath_bus_ops { 868struct ath_bus_ops {
diff --git a/drivers/net/wireless/ath/ath9k/init.c b/drivers/net/wireless/ath/ath9k/init.c
index d4b166cfdf60..661211291773 100644
--- a/drivers/net/wireless/ath/ath9k/init.c
+++ b/drivers/net/wireless/ath/ath9k/init.c
@@ -574,6 +574,7 @@ static int ath9k_init_softc(u16 devid, struct ath_softc *sc, u16 subsysid,
574 sc->sc_ah->gpio_val = pdata->gpio_val; 574 sc->sc_ah->gpio_val = pdata->gpio_val;
575 sc->sc_ah->led_pin = pdata->led_pin; 575 sc->sc_ah->led_pin = pdata->led_pin;
576 ah->is_clk_25mhz = pdata->is_clk_25mhz; 576 ah->is_clk_25mhz = pdata->is_clk_25mhz;
577 ah->get_mac_revision = pdata->get_mac_revision;
577 } 578 }
578 579
579 common = ath9k_hw_common(ah); 580 common = ath9k_hw_common(ah);
diff --git a/include/linux/ath9k_platform.h b/include/linux/ath9k_platform.h
index 60a7c49dcb49..c207607acada 100644
--- a/include/linux/ath9k_platform.h
+++ b/include/linux/ath9k_platform.h
@@ -30,6 +30,7 @@ struct ath9k_platform_data {
30 u32 gpio_val; 30 u32 gpio_val;
31 31
32 bool is_clk_25mhz; 32 bool is_clk_25mhz;
33 int (*get_mac_revision)(void);
33}; 34};
34 35
35#endif /* _LINUX_ATH9K_PLATFORM_H */ 36#endif /* _LINUX_ATH9K_PLATFORM_H */