2010/3/9 Bruno Randolf <b...@einfach.org>:
> we read the IQ correction values (i_cal and q_cal) for G mode from a wrong
> location (the same shifts as for A mode is applied which is incorrect). use
> correct locations, matching the docs and HAL sources.
>
> also we should write IQ correction only when we have that information in the
> EEPROM, starting from version 4. also write it in the same way as we do in the
> periodic recalibration (enable last), just to be sure.
>
> Signed-off-by: Bruno Randolf <b...@einfach.org>
> ---
>  drivers/net/wireless/ath/ath5k/eeprom.c |    4 ++--
>  drivers/net/wireless/ath/ath5k/reset.c  |   15 +++++++++------
>  2 files changed, 11 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/net/wireless/ath/ath5k/eeprom.c 
> b/drivers/net/wireless/ath/ath5k/eeprom.c
> index 6a3f4da..10b5226 100644
> --- a/drivers/net/wireless/ath/ath5k/eeprom.c
> +++ b/drivers/net/wireless/ath/ath5k/eeprom.c
> @@ -429,8 +429,8 @@ static int ath5k_eeprom_read_modes(struct ath5k_hw *ah, 
> u32 *offset,
>                        ee->ee_margin_tx_rx[mode] = (val >> 8) & 0x3f;
>
>                AR5K_EEPROM_READ(o++, val);
> -               ee->ee_i_cal[mode] = (val >> 8) & 0x3f;
> -               ee->ee_q_cal[mode] = (val >> 3) & 0x1f;
> +               ee->ee_i_cal[mode] = (val >> 5) & 0x3f;
> +               ee->ee_q_cal[mode] = val & 0x1f;
>
>                if (ah->ah_ee_version >= AR5K_EEPROM_VERSION_4_2) {
>                        AR5K_EEPROM_READ(o++, val);
> diff --git a/drivers/net/wireless/ath/ath5k/reset.c 
> b/drivers/net/wireless/ath/ath5k/reset.c
> index 6d9a1e8..e9e69dc 100644
> --- a/drivers/net/wireless/ath/ath5k/reset.c
> +++ b/drivers/net/wireless/ath/ath5k/reset.c
> @@ -851,12 +851,15 @@ static void ath5k_hw_commit_eeprom_settings(struct 
> ath5k_hw *ah,
>                                AR5K_PHY_OFDM_SELFCORR_CYPWR_THR1,
>                                AR5K_INIT_CYCRSSI_THR1);
>
> -       /* I/Q correction
> -        * TODO: Per channel i/q infos ? */
> -       AR5K_REG_ENABLE_BITS(ah, AR5K_PHY_IQ,
> -               AR5K_PHY_IQ_CORR_ENABLE |
> -               (ee->ee_i_cal[ee_mode] << AR5K_PHY_IQ_CORR_Q_I_COFF_S) |
> -               ee->ee_q_cal[ee_mode]);
> +       /* I/Q correction (set enable bit last to match HAL sources) */
> +       /* TODO: Per channel i/q infos ? */
> +       if (ah->ah_ee_version >= AR5K_EEPROM_VERSION_4_0) {
> +               AR5K_REG_WRITE_BITS(ah, AR5K_PHY_IQ, 
> AR5K_PHY_IQ_CORR_Q_I_COFF,
> +                           ee->ee_i_cal[ee_mode]);
> +               AR5K_REG_WRITE_BITS(ah, AR5K_PHY_IQ, 
> AR5K_PHY_IQ_CORR_Q_Q_COFF,
> +                           ee->ee_q_cal[ee_mode]);
> +               AR5K_REG_ENABLE_BITS(ah, AR5K_PHY_IQ, 
> AR5K_PHY_IQ_CORR_ENABLE);
> +       }
>
>        /* Heavy clipping -disable for now */
>        if (ah->ah_ee_version >= AR5K_EEPROM_VERSION_5_1)
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
> the body of a message to majord...@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>

Acked-by: Nick Kossifidis <mickfl...@gmail.com>

-- 
GPG ID: 0xD21DB2DB
As you read this post global entropy rises. Have Fun ;-)
Nick
_______________________________________________
ath5k-devel mailing list
ath5k-devel@lists.ath5k.org
https://lists.ath5k.org/mailman/listinfo/ath5k-devel

Reply via email to