Search Linux Wireless

Re: [PATCH 1/2] ath9k: add an extra boolean parameter to ath9k_hw_apply_txpower

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



2012.04.17. 20:42 keltezéssel, John W. Linville írta:
> Are these intended as fixes for 3.4?

Yes. Sorry, I forgot to mention that.

-Gabor

> 
> On Sun, Apr 15, 2012 at 08:38:05PM +0200, Gabor Juhos wrote:
>> In order to unifying regulatory limit handling
>> commit ca2c68cc7bc80fc4504fb420df04cce99c9ee6ec
>> (ath9k_hw: clean up tx power handling) introduced
>> a new helper function 'ath9k_hw_apply_txpower',
>> and the direct calls of 'ah->eep_ops->set_txpower'
>> has been replaced by a call of the helper function.
>>
>> This caused a change in the behaviour of the
>> 'ath9k_hw_set_txpowerlimit' function. The purpose
>> of that function is to calculate and store the
>> rate txpower table and the regulatory limit without
>> touching the hardware registers. Before the commit,
>> the 'test' parameter of the function was passed to
>> the 'ah->eep_ops->set_txpower'. Now the calling of
>> the 'set_txpower' function happens indirectly through
>> 'ath9k_hw_apply_txpower', so the 'test' argument of
>> the 'set_txpower' is always 'false'.
>>
>> This patch restores the original behaviour of
>> 'ath9k_hw_set_txpowerlimit' by adding a new
>> argument to 'ath9k_hw_apply_txpower.'
>>
>> Signed-off-by: Gabor Juhos <juhosg@xxxxxxxxxxx>
>> Acked-by: Felix Fietkau <nbd@xxxxxxxxxxx>
>> ---
>>  drivers/net/wireless/ath/ath9k/ar5008_phy.c   |    2 +-
>>  drivers/net/wireless/ath/ath9k/ar9003_paprd.c |    2 +-
>>  drivers/net/wireless/ath/ath9k/ar9003_phy.c   |    2 +-
>>  drivers/net/wireless/ath/ath9k/hw.c           |    9 +++++----
>>  drivers/net/wireless/ath/ath9k/hw.h           |    3 ++-
>>  5 files changed, 10 insertions(+), 8 deletions(-)
>>
>> diff --git a/drivers/net/wireless/ath/ath9k/ar5008_phy.c b/drivers/net/wireless/ath/ath9k/ar5008_phy.c
>> index de30cb3..8753e38 100644
>> --- a/drivers/net/wireless/ath/ath9k/ar5008_phy.c
>> +++ b/drivers/net/wireless/ath/ath9k/ar5008_phy.c
>> @@ -868,7 +868,7 @@ static int ar5008_hw_process_ini(struct ath_hw *ah,
>>  	ar5008_hw_set_channel_regs(ah, chan);
>>  	ar5008_hw_init_chain_masks(ah);
>>  	ath9k_olc_init(ah);
>> -	ath9k_hw_apply_txpower(ah, chan);
>> +	ath9k_hw_apply_txpower(ah, chan, false);
>>  
>>  	/* Write analog registers */
>>  	if (!ath9k_hw_set_rf_regs(ah, chan, freqIndex)) {
>> diff --git a/drivers/net/wireless/ath/ath9k/ar9003_paprd.c b/drivers/net/wireless/ath/ath9k/ar9003_paprd.c
>> index 59647a3..3d400e8 100644
>> --- a/drivers/net/wireless/ath/ath9k/ar9003_paprd.c
>> +++ b/drivers/net/wireless/ath/ath9k/ar9003_paprd.c
>> @@ -54,7 +54,7 @@ void ar9003_paprd_enable(struct ath_hw *ah, bool val)
>>  
>>  	if (val) {
>>  		ah->paprd_table_write_done = true;
>> -		ath9k_hw_apply_txpower(ah, chan);
>> +		ath9k_hw_apply_txpower(ah, chan, false);
>>  	}
>>  
>>  	REG_RMW_FIELD(ah, AR_PHY_PAPRD_CTRL0_B0,
>> diff --git a/drivers/net/wireless/ath/ath9k/ar9003_phy.c b/drivers/net/wireless/ath/ath9k/ar9003_phy.c
>> index 4c9bc9f..5d2b584 100644
>> --- a/drivers/net/wireless/ath/ath9k/ar9003_phy.c
>> +++ b/drivers/net/wireless/ath/ath9k/ar9003_phy.c
>> @@ -690,7 +690,7 @@ static int ar9003_hw_process_ini(struct ath_hw *ah,
>>  	ar9003_hw_override_ini(ah);
>>  	ar9003_hw_set_channel_regs(ah, chan);
>>  	ar9003_hw_set_chain_masks(ah, ah->rxchainmask, ah->txchainmask);
>> -	ath9k_hw_apply_txpower(ah, chan);
>> +	ath9k_hw_apply_txpower(ah, chan, false);
>>  
>>  	if (AR_SREV_9462(ah)) {
>>  		if (REG_READ_FIELD(ah, AR_PHY_TX_IQCAL_CONTROL_0,
>> diff --git a/drivers/net/wireless/ath/ath9k/hw.c b/drivers/net/wireless/ath/ath9k/hw.c
>> index 6fa8128..480e8f8 100644
>> --- a/drivers/net/wireless/ath/ath9k/hw.c
>> +++ b/drivers/net/wireless/ath/ath9k/hw.c
>> @@ -1453,7 +1453,7 @@ static bool ath9k_hw_channel_change(struct ath_hw *ah,
>>  		return false;
>>  	}
>>  	ath9k_hw_set_clockrate(ah);
>> -	ath9k_hw_apply_txpower(ah, chan);
>> +	ath9k_hw_apply_txpower(ah, chan, false);
>>  	ath9k_hw_rfbus_done(ah);
>>  
>>  	if (IS_CHAN_OFDM(chan) || IS_CHAN_HT(chan))
>> @@ -2724,7 +2724,8 @@ static int get_antenna_gain(struct ath_hw *ah, struct ath9k_channel *chan)
>>  	return ah->eep_ops->get_eeprom(ah, gain_param);
>>  }
>>  
>> -void ath9k_hw_apply_txpower(struct ath_hw *ah, struct ath9k_channel *chan)
>> +void ath9k_hw_apply_txpower(struct ath_hw *ah, struct ath9k_channel *chan,
>> +			    bool test)
>>  {
>>  	struct ath_regulatory *reg = ath9k_hw_regulatory(ah);
>>  	struct ieee80211_channel *channel;
>> @@ -2745,7 +2746,7 @@ void ath9k_hw_apply_txpower(struct ath_hw *ah, struct ath9k_channel *chan)
>>  
>>  	ah->eep_ops->set_txpower(ah, chan,
>>  				 ath9k_regd_get_ctl(reg, chan),
>> -				 ant_reduction, new_pwr, false);
>> +				 ant_reduction, new_pwr, test);
>>  }
>>  
>>  void ath9k_hw_set_txpowerlimit(struct ath_hw *ah, u32 limit, bool test)
>> @@ -2758,7 +2759,7 @@ void ath9k_hw_set_txpowerlimit(struct ath_hw *ah, u32 limit, bool test)
>>  	if (test)
>>  		channel->max_power = MAX_RATE_POWER / 2;
>>  
>> -	ath9k_hw_apply_txpower(ah, chan);
>> +	ath9k_hw_apply_txpower(ah, chan, test);
>>  
>>  	if (test)
>>  		channel->max_power = DIV_ROUND_UP(reg->max_power_level, 2);
>> diff --git a/drivers/net/wireless/ath/ath9k/hw.h b/drivers/net/wireless/ath/ath9k/hw.h
>> index 1d4b983..99b57bd 100644
>> --- a/drivers/net/wireless/ath/ath9k/hw.h
>> +++ b/drivers/net/wireless/ath/ath9k/hw.h
>> @@ -976,7 +976,8 @@ void ath9k_hw_name(struct ath_hw *ah, char *hw_name, size_t len);
>>  /* PHY */
>>  void ath9k_hw_get_delta_slope_vals(struct ath_hw *ah, u32 coef_scaled,
>>  				   u32 *coef_mantissa, u32 *coef_exponent);
>> -void ath9k_hw_apply_txpower(struct ath_hw *ah, struct ath9k_channel *chan);
>> +void ath9k_hw_apply_txpower(struct ath_hw *ah, struct ath9k_channel *chan,
>> +			    bool test);
>>  
>>  /*
>>   * Code Specific to AR5008, AR9001 or AR9002,
>> -- 
>> 1.7.2.1
>>
>>
> 

--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Wireless Personal Area Network]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite Hiking]     [MIPS Linux]     [ARM Linux]     [Linux RAID]

  Powered by Linux