aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2010-07-11 06:48:39 -0400
committerJohn W. Linville <linville@tuxdriver.com>2010-07-12 16:05:37 -0400
commit601e0cb165e65dc185b31fe7ebd2c0169ea47306 (patch)
treee587bc1ec2b9b90816c783ad00be1762760aa532 /drivers/net
parente796643eaf0889c346e6b69c5afe777c327b1919 (diff)
ath9k_hw: fix antenna diversity on AR9285
On AR9285, the antenna switch configuration register uses more than just 16 bits. Because of an arbitrary mask applied to the EEPROM value that stores this configuration, diversity was broken in some cases, leading to a significant degradation in signal strength. Fix this by changing the callback to return a 32 bit value and remove the arbitrary mask. Signed-off-by: Felix Fietkau <nbd@openwrt.org> Cc: stable@kernel.org Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net')
-rw-r--r--drivers/net/wireless/ath/ath9k/ar9003_eeprom.c2
-rw-r--r--drivers/net/wireless/ath/ath9k/eeprom.h2
-rw-r--r--drivers/net/wireless/ath/ath9k/eeprom_4k.c4
-rw-r--r--drivers/net/wireless/ath/ath9k/eeprom_9287.c4
-rw-r--r--drivers/net/wireless/ath/ath9k/eeprom_def.c4
5 files changed, 8 insertions, 8 deletions
diff --git a/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c b/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
index 343c9a427acb..ace8d2678b18 100644
--- a/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
+++ b/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
@@ -951,7 +951,7 @@ static u8 ath9k_hw_ar9300_get_num_ant_config(struct ath_hw *ah,
951 return 1; 951 return 1;
952} 952}
953 953
954static u16 ath9k_hw_ar9300_get_eeprom_antenna_cfg(struct ath_hw *ah, 954static u32 ath9k_hw_ar9300_get_eeprom_antenna_cfg(struct ath_hw *ah,
955 struct ath9k_channel *chan) 955 struct ath9k_channel *chan)
956{ 956{
957 return -EINVAL; 957 return -EINVAL;
diff --git a/drivers/net/wireless/ath/ath9k/eeprom.h b/drivers/net/wireless/ath/ath9k/eeprom.h
index bdd8aa054b80..8750c558c221 100644
--- a/drivers/net/wireless/ath/ath9k/eeprom.h
+++ b/drivers/net/wireless/ath/ath9k/eeprom.h
@@ -670,7 +670,7 @@ struct eeprom_ops {
670 int (*get_eeprom_ver)(struct ath_hw *hw); 670 int (*get_eeprom_ver)(struct ath_hw *hw);
671 int (*get_eeprom_rev)(struct ath_hw *hw); 671 int (*get_eeprom_rev)(struct ath_hw *hw);
672 u8 (*get_num_ant_config)(struct ath_hw *hw, enum ieee80211_band band); 672 u8 (*get_num_ant_config)(struct ath_hw *hw, enum ieee80211_band band);
673 u16 (*get_eeprom_antenna_cfg)(struct ath_hw *hw, 673 u32 (*get_eeprom_antenna_cfg)(struct ath_hw *hw,
674 struct ath9k_channel *chan); 674 struct ath9k_channel *chan);
675 void (*set_board_values)(struct ath_hw *hw, struct ath9k_channel *chan); 675 void (*set_board_values)(struct ath_hw *hw, struct ath9k_channel *chan);
676 void (*set_addac)(struct ath_hw *hw, struct ath9k_channel *chan); 676 void (*set_addac)(struct ath_hw *hw, struct ath9k_channel *chan);
diff --git a/drivers/net/wireless/ath/ath9k/eeprom_4k.c b/drivers/net/wireless/ath/ath9k/eeprom_4k.c
index e25a2abbf561..afafc4d4b8fb 100644
--- a/drivers/net/wireless/ath/ath9k/eeprom_4k.c
+++ b/drivers/net/wireless/ath/ath9k/eeprom_4k.c
@@ -1150,13 +1150,13 @@ static void ath9k_hw_4k_set_board_values(struct ath_hw *ah,
1150 } 1150 }
1151} 1151}
1152 1152
1153static u16 ath9k_hw_4k_get_eeprom_antenna_cfg(struct ath_hw *ah, 1153static u32 ath9k_hw_4k_get_eeprom_antenna_cfg(struct ath_hw *ah,
1154 struct ath9k_channel *chan) 1154 struct ath9k_channel *chan)
1155{ 1155{
1156 struct ar5416_eeprom_4k *eep = &ah->eeprom.map4k; 1156 struct ar5416_eeprom_4k *eep = &ah->eeprom.map4k;
1157 struct modal_eep_4k_header *pModal = &eep->modalHeader; 1157 struct modal_eep_4k_header *pModal = &eep->modalHeader;
1158 1158
1159 return pModal->antCtrlCommon & 0xFFFF; 1159 return pModal->antCtrlCommon;
1160} 1160}
1161 1161
1162static u8 ath9k_hw_4k_get_num_ant_config(struct ath_hw *ah, 1162static u8 ath9k_hw_4k_get_num_ant_config(struct ath_hw *ah,
diff --git a/drivers/net/wireless/ath/ath9k/eeprom_9287.c b/drivers/net/wireless/ath/ath9k/eeprom_9287.c
index 39a41053705f..37207dfd1799 100644
--- a/drivers/net/wireless/ath/ath9k/eeprom_9287.c
+++ b/drivers/net/wireless/ath/ath9k/eeprom_9287.c
@@ -1130,13 +1130,13 @@ static u8 ath9k_hw_ar9287_get_num_ant_config(struct ath_hw *ah,
1130 return 1; 1130 return 1;
1131} 1131}
1132 1132
1133static u16 ath9k_hw_ar9287_get_eeprom_antenna_cfg(struct ath_hw *ah, 1133static u32 ath9k_hw_ar9287_get_eeprom_antenna_cfg(struct ath_hw *ah,
1134 struct ath9k_channel *chan) 1134 struct ath9k_channel *chan)
1135{ 1135{
1136 struct ar9287_eeprom *eep = &ah->eeprom.map9287; 1136 struct ar9287_eeprom *eep = &ah->eeprom.map9287;
1137 struct modal_eep_ar9287_header *pModal = &eep->modalHeader; 1137 struct modal_eep_ar9287_header *pModal = &eep->modalHeader;
1138 1138
1139 return pModal->antCtrlCommon & 0xFFFF; 1139 return pModal->antCtrlCommon;
1140} 1140}
1141 1141
1142static u16 ath9k_hw_ar9287_get_spur_channel(struct ath_hw *ah, 1142static u16 ath9k_hw_ar9287_get_spur_channel(struct ath_hw *ah,
diff --git a/drivers/net/wireless/ath/ath9k/eeprom_def.c b/drivers/net/wireless/ath/ath9k/eeprom_def.c
index 77b1433312cc..60480a1122b2 100644
--- a/drivers/net/wireless/ath/ath9k/eeprom_def.c
+++ b/drivers/net/wireless/ath/ath9k/eeprom_def.c
@@ -1438,14 +1438,14 @@ static u8 ath9k_hw_def_get_num_ant_config(struct ath_hw *ah,
1438 return num_ant_config; 1438 return num_ant_config;
1439} 1439}
1440 1440
1441static u16 ath9k_hw_def_get_eeprom_antenna_cfg(struct ath_hw *ah, 1441static u32 ath9k_hw_def_get_eeprom_antenna_cfg(struct ath_hw *ah,
1442 struct ath9k_channel *chan) 1442 struct ath9k_channel *chan)
1443{ 1443{
1444 struct ar5416_eeprom_def *eep = &ah->eeprom.def; 1444 struct ar5416_eeprom_def *eep = &ah->eeprom.def;
1445 struct modal_eep_header *pModal = 1445 struct modal_eep_header *pModal =
1446 &(eep->modalHeader[IS_CHAN_2GHZ(chan)]); 1446 &(eep->modalHeader[IS_CHAN_2GHZ(chan)]);
1447 1447
1448 return pModal->antCtrlCommon & 0xFFFF; 1448 return pModal->antCtrlCommon;
1449} 1449}
1450 1450
1451static u16 ath9k_hw_def_get_spur_channel(struct ath_hw *ah, u16 i, bool is2GHz) 1451static u16 ath9k_hw_def_get_spur_channel(struct ath_hw *ah, u16 i, bool is2GHz)