aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/ath
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2011-07-11 21:02:04 -0400
committerJohn W. Linville <linville@tuxdriver.com>2011-07-13 14:49:40 -0400
commit6340211c5f4775a52c98052fb5661565f79249fd (patch)
tree200d247fd75a5212330cf46785ca8a1678577563 /drivers/net/wireless/ath
parentf00643888ca435ce6934482243733cc140281d10 (diff)
ath5k: disable 32KHz sleep clock operation by default
While 32 KHz sleep clock might provide some power saving benefits, it is also a major source of stability issues, on OpenWrt it produced some reproducible data bus errors on register accesses on several different MIPS platforms. All the Atheros drivers that I can find do not enable this feature, so it makes sense to leave it disabled in ath5k as well. Signed-off-by: Felix Fietkau <nbd@openwrt.org> Acked-by: Nick Kossifidis <mickflemm@gmail.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/ath')
-rw-r--r--drivers/net/wireless/ath/ath5k/ath5k.h2
-rw-r--r--drivers/net/wireless/ath/ath5k/debug.c3
-rw-r--r--drivers/net/wireless/ath/ath5k/reset.c11
3 files changed, 13 insertions, 3 deletions
diff --git a/drivers/net/wireless/ath/ath5k/ath5k.h b/drivers/net/wireless/ath/ath5k/ath5k.h
index 50d758036126..8ff17941bb28 100644
--- a/drivers/net/wireless/ath/ath5k/ath5k.h
+++ b/drivers/net/wireless/ath/ath5k/ath5k.h
@@ -1067,6 +1067,8 @@ struct ath5k_hw {
1067 u8 ah_retry_long; 1067 u8 ah_retry_long;
1068 u8 ah_retry_short; 1068 u8 ah_retry_short;
1069 1069
1070 u32 ah_use_32khz_clock;
1071
1070 u8 ah_coverage_class; 1072 u8 ah_coverage_class;
1071 bool ah_ack_bitrate_high; 1073 bool ah_ack_bitrate_high;
1072 u8 ah_bwmode; 1074 u8 ah_bwmode;
diff --git a/drivers/net/wireless/ath/ath5k/debug.c b/drivers/net/wireless/ath/ath5k/debug.c
index ae1112bfa1c1..4edca7072d53 100644
--- a/drivers/net/wireless/ath/ath5k/debug.c
+++ b/drivers/net/wireless/ath/ath5k/debug.c
@@ -922,6 +922,9 @@ ath5k_debug_init_device(struct ath5k_softc *sc)
922 922
923 debugfs_create_file("queue", S_IWUSR | S_IRUSR, phydir, sc, 923 debugfs_create_file("queue", S_IWUSR | S_IRUSR, phydir, sc,
924 &fops_queue); 924 &fops_queue);
925
926 debugfs_create_bool("32khz_clock", S_IWUSR | S_IRUSR, phydir,
927 &sc->ah->ah_use_32khz_clock);
925} 928}
926 929
927/* functions used in other places */ 930/* functions used in other places */
diff --git a/drivers/net/wireless/ath/ath5k/reset.c b/drivers/net/wireless/ath/ath5k/reset.c
index 0e89fc9a75a7..9f9c2ad3ca66 100644
--- a/drivers/net/wireless/ath/ath5k/reset.c
+++ b/drivers/net/wireless/ath/ath5k/reset.c
@@ -1287,11 +1287,16 @@ int ath5k_hw_reset(struct ath5k_hw *ah, enum nl80211_iftype op_mode,
1287 ath5k_hw_dma_init(ah); 1287 ath5k_hw_dma_init(ah);
1288 1288
1289 1289
1290 /* Enable 32KHz clock function for AR5212+ chips 1290 /*
1291 * Enable 32KHz clock function for AR5212+ chips
1291 * Set clocks to 32KHz operation and use an 1292 * Set clocks to 32KHz operation and use an
1292 * external 32KHz crystal when sleeping if one 1293 * external 32KHz crystal when sleeping if one
1293 * exists */ 1294 * exists.
1294 if (ah->ah_version == AR5K_AR5212 && 1295 * Disabled by default because it is also disabled in
1296 * other drivers and it is known to cause stability
1297 * issues on some devices
1298 */
1299 if (ah->ah_use_32khz_clock && ah->ah_version == AR5K_AR5212 &&
1295 op_mode != NL80211_IFTYPE_AP) 1300 op_mode != NL80211_IFTYPE_AP)
1296 ath5k_hw_set_sleep_clock(ah, true); 1301 ath5k_hw_set_sleep_clock(ah, true);
1297 1302