| From 841051602e3fa18ea468fe5a177aa92b6eb44b56 Mon Sep 17 00:00:00 2001 |
| From: Matteo Croce <technoboy85@gmail.com> |
| Date: Fri, 3 Dec 2010 02:25:08 +0100 |
| Subject: ath9k: fix bug in tx power |
| |
| From: Matteo Croce <technoboy85@gmail.com> |
| |
| commit 841051602e3fa18ea468fe5a177aa92b6eb44b56 upstream. |
| |
| The ath9k driver subtracts 3 dBm to the txpower as with two radios the |
| signal power is doubled. |
| The resulting value is assigned in an u16 which overflows and makes |
| the card work at full power. |
| |
| Signed-off-by: Matteo Croce <matteo@openwrt.org> |
| Signed-off-by: John W. Linville <linville@tuxdriver.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| |
| --- |
| drivers/net/wireless/ath/ath9k/eeprom_def.c | 12 ++++++++---- |
| 1 file changed, 8 insertions(+), 4 deletions(-) |
| |
| --- a/drivers/net/wireless/ath/ath9k/eeprom_def.c |
| +++ b/drivers/net/wireless/ath/ath9k/eeprom_def.c |
| @@ -1062,15 +1062,19 @@ static void ath9k_hw_set_def_power_per_r |
| case 1: |
| break; |
| case 2: |
| - scaledPower -= REDUCE_SCALED_POWER_BY_TWO_CHAIN; |
| + if (scaledPower > REDUCE_SCALED_POWER_BY_TWO_CHAIN) |
| + scaledPower -= REDUCE_SCALED_POWER_BY_TWO_CHAIN; |
| + else |
| + scaledPower = 0; |
| break; |
| case 3: |
| - scaledPower -= REDUCE_SCALED_POWER_BY_THREE_CHAIN; |
| + if (scaledPower > REDUCE_SCALED_POWER_BY_THREE_CHAIN) |
| + scaledPower -= REDUCE_SCALED_POWER_BY_THREE_CHAIN; |
| + else |
| + scaledPower = 0; |
| break; |
| } |
| |
| - scaledPower = max((u16)0, scaledPower); |
| - |
| if (IS_CHAN_2GHZ(chan)) { |
| numCtlModes = ARRAY_SIZE(ctlModesFor11g) - |
| SUB_NUM_CTL_MODES_AT_2G_40; |