diff options
author | Felix Fietkau <nbd@openwrt.org> | 2011-07-11 21:02:04 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2011-07-13 14:49:40 -0400 |
commit | 6340211c5f4775a52c98052fb5661565f79249fd (patch) | |
tree | 200d247fd75a5212330cf46785ca8a1678577563 /drivers/net/wireless/ath | |
parent | f00643888ca435ce6934482243733cc140281d10 (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.h | 2 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath5k/debug.c | 3 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath5k/reset.c | 11 |
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 | ||