Search Linux Wireless

Re: [PATCH v2 04/20] ath5k: move noise floor calibration into tasklet

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

 



2010/5/19 Bruno Randolf <br1@xxxxxxxxxxx>:
> Seperate noise floor calibration from other PHY calibration and move it to the
> tasklet. This is the first step to more separation of different calibrations.
>
> Also move out ath5k_hw_request_rfgain_probe(ah) so we have one clean function
> for I/Q calibration on 5111x parts.
>
> Signed-off-by: Bruno Randolf <br1@xxxxxxxxxxx>
> ---
>  drivers/net/wireless/ath/ath5k/ath5k.h |    1 +
>  drivers/net/wireless/ath/ath5k/base.c  |    1 +
>  drivers/net/wireless/ath/ath5k/phy.c   |   33 ++++++++++----------------------
>  3 files changed, 12 insertions(+), 23 deletions(-)
>
> diff --git a/drivers/net/wireless/ath/ath5k/ath5k.h b/drivers/net/wireless/ath/ath5k/ath5k.h
> index 2785946..131e8b3 100644
> --- a/drivers/net/wireless/ath/ath5k/ath5k.h
> +++ b/drivers/net/wireless/ath/ath5k/ath5k.h
> @@ -1270,6 +1270,7 @@ int ath5k_hw_channel(struct ath5k_hw *ah, struct ieee80211_channel *channel);
>  void ath5k_hw_init_nfcal_hist(struct ath5k_hw *ah);
>  int ath5k_hw_phy_calibrate(struct ath5k_hw *ah,
>                           struct ieee80211_channel *channel);
> +void ath5k_hw_update_noise_floor(struct ath5k_hw *ah);
>  /* Spur mitigation */
>  bool ath5k_hw_chan_has_spur_noise(struct ath5k_hw *ah,
>                                  struct ieee80211_channel *channel);
> diff --git a/drivers/net/wireless/ath/ath5k/base.c b/drivers/net/wireless/ath/ath5k/base.c
> index de59a6e..88c7314 100644
> --- a/drivers/net/wireless/ath/ath5k/base.c
> +++ b/drivers/net/wireless/ath/ath5k/base.c
> @@ -2806,6 +2806,7 @@ ath5k_tasklet_calibrate(unsigned long data)
>                        ieee80211_frequency_to_channel(
>                                sc->curchan->center_freq));
>
> +       ath5k_hw_update_noise_floor(ah);
>        /* Wake queues */
>        ieee80211_wake_queues(sc->hw);
>
> diff --git a/drivers/net/wireless/ath/ath5k/phy.c b/drivers/net/wireless/ath/ath5k/phy.c
> index 3ce9afb..0b24081 100644
> --- a/drivers/net/wireless/ath/ath5k/phy.c
> +++ b/drivers/net/wireless/ath/ath5k/phy.c
> @@ -1167,7 +1167,7 @@ static s16 ath5k_hw_get_median_noise_floor(struct ath5k_hw *ah)
>  * The median of the values in the history is then loaded into the
>  * hardware for its own use for RSSI and CCA measurements.
>  */
> -static void ath5k_hw_update_noise_floor(struct ath5k_hw *ah)
> +void ath5k_hw_update_noise_floor(struct ath5k_hw *ah)
>  {
>        struct ath5k_eeprom_info *ee = &ah->ah_capabilities.cap_eeprom;
>        u32 val;
> @@ -1248,7 +1248,6 @@ static void ath5k_hw_update_noise_floor(struct ath5k_hw *ah)
>  /*
>  * Perform a PHY calibration on RF5110
>  * -Fix BPSK/QAM Constellation (I/Q correction)
> - * -Calculate Noise Floor
>  */
>  static int ath5k_hw_rf5110_calibrate(struct ath5k_hw *ah,
>                struct ieee80211_channel *channel)
> @@ -1335,8 +1334,6 @@ static int ath5k_hw_rf5110_calibrate(struct ath5k_hw *ah,
>                return ret;
>        }
>
> -       ath5k_hw_update_noise_floor(ah);
> -
>        /*
>         * Re-enable RX/TX and beacons
>         */
> @@ -1348,10 +1345,10 @@ static int ath5k_hw_rf5110_calibrate(struct ath5k_hw *ah,
>  }
>
>  /*
> - * Perform a PHY calibration on RF5111/5112 and newer chips
> + * Perform I/Q calibration on RF5111/5112 and newer chips
>  */
> -static int ath5k_hw_rf511x_calibrate(struct ath5k_hw *ah,
> -               struct ieee80211_channel *channel)
> +static int
> +ath5k_hw_rf511x_iq_calibrate(struct ath5k_hw *ah)
>  {
>        u32 i_pwr, q_pwr;
>        s32 iq_corr, i_coff, i_coffd, q_coff, q_coffd;
> @@ -1360,10 +1357,9 @@ static int ath5k_hw_rf511x_calibrate(struct ath5k_hw *ah,
>
>        if (!ah->ah_calibration ||
>                ath5k_hw_reg_read(ah, AR5K_PHY_IQ) & AR5K_PHY_IQ_RUN)
> -               goto done;
> +               return 0;
>
>        /* Calibration has finished, get the results and re-run */
> -
>        /* work around empty results which can apparently happen on 5212 */
>        for (i = 0; i <= 10; i++) {
>                iq_corr = ath5k_hw_reg_read(ah, AR5K_PHY_IQRES_CAL_CORR);
> @@ -1384,7 +1380,7 @@ static int ath5k_hw_rf511x_calibrate(struct ath5k_hw *ah,
>
>        /* protect against divide by 0 and loss of sign bits */
>        if (i_coffd == 0 || q_coffd < 2)
> -               goto done;
> +               return -1;
>
>        i_coff = (-iq_corr) / i_coffd;
>        i_coff = clamp(i_coff, -32, 31); /* signed 6 bit */
> @@ -1410,17 +1406,6 @@ static int ath5k_hw_rf511x_calibrate(struct ath5k_hw *ah,
>                        AR5K_PHY_IQ_CAL_NUM_LOG_MAX, 15);
>        AR5K_REG_ENABLE_BITS(ah, AR5K_PHY_IQ, AR5K_PHY_IQ_RUN);
>
> -done:
> -
> -       /* TODO: Separate noise floor calibration from I/Q calibration
> -        * since noise floor calibration interrupts rx path while I/Q
> -        * calibration doesn't. We don't need to run noise floor calibration
> -        * as often as I/Q calibration.*/
> -       ath5k_hw_update_noise_floor(ah);
> -
> -       /* Initiate a gain_F calibration */
> -       ath5k_hw_request_rfgain_probe(ah);
> -
>        return 0;
>  }
>
> @@ -1434,8 +1419,10 @@ int ath5k_hw_phy_calibrate(struct ath5k_hw *ah,
>
>        if (ah->ah_radio == AR5K_RF5110)
>                ret = ath5k_hw_rf5110_calibrate(ah, channel);
> -       else
> -               ret = ath5k_hw_rf511x_calibrate(ah, channel);
> +       else {
> +               ret = ath5k_hw_rf511x_iq_calibrate(ah);
> +               ath5k_hw_request_rfgain_probe(ah);
> +       }
>
>        return ret;
>  }
>

Acked-by: Nick Kossifidis <mickflemm@xxxxxxxxx>



-- 
GPG ID: 0xD21DB2DB
As you read this post global entropy rises. Have Fun ;-)
Nick
--
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 Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Device Mapper]
  Powered by Linux