2009-11-19 22:09:28

by Lukáš Turek

[permalink] [raw]
Subject: [PATCH] ath5k: Fix I/Q calibration

The sign of correction coefficients was lost in the calculations, which
caused high packetloss in 802.11a mode after the results were applied.
Fixed by removing unneccesary and broken AND with a bit mask.

Signed-off-by: Lukas Turek <[email protected]>
---
drivers/net/wireless/ath/ath5k/phy.c | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/net/wireless/ath/ath5k/phy.c b/drivers/net/wireless/ath/ath5k/phy.c
index 8959907..6af0a73 100644
--- a/drivers/net/wireless/ath/ath5k/phy.c
+++ b/drivers/net/wireless/ath/ath5k/phy.c
@@ -1399,7 +1399,7 @@ static int ath5k_hw_rf511x_calibrate(struct ath5k_hw *ah,
if (i_coffd == 0 || q_coffd == 0)
goto done;

- i_coff = ((-iq_corr) / i_coffd) & 0x3f;
+ i_coff = ((-iq_corr) / i_coffd);

/* Boundary check */
if (i_coff > 31)
@@ -1407,7 +1407,7 @@ static int ath5k_hw_rf511x_calibrate(struct ath5k_hw *ah,
if (i_coff < -32)
i_coff = -32;

- q_coff = (((s32)i_pwr / q_coffd) - 128) & 0x1f;
+ q_coff = (((s32)i_pwr / q_coffd) - 128);

/* Boundary check */
if (q_coff > 15)
--
1.6.4.4

--
Lukas Turek


Attachments:
(No filename) (1.07 kB)
signature.asc (836.00 B)
This is a digitally signed message part.
Download all attachments

2009-11-21 09:01:14

by Nick Kossifidis

[permalink] [raw]
Subject: Re: [PATCH] ath5k: Fix I/Q calibration

2009/11/20 Lukáš Turek <[email protected]>:
> The sign of correction coefficients was lost in the calculations, which
> caused high packetloss in 802.11a mode after the results were applied.
> Fixed by removing unneccesary and broken AND with a bit mask.
>
> Signed-off-by: Lukas Turek <[email protected]>
> ---
>  drivers/net/wireless/ath/ath5k/phy.c |    4 ++--
>  1 files changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/net/wireless/ath/ath5k/phy.c b/drivers/net/wireless/ath/ath5k/phy.c
> index 8959907..6af0a73 100644
> --- a/drivers/net/wireless/ath/ath5k/phy.c
> +++ b/drivers/net/wireless/ath/ath5k/phy.c
> @@ -1399,7 +1399,7 @@ static int ath5k_hw_rf511x_calibrate(struct ath5k_hw *ah,
>        if (i_coffd == 0 || q_coffd == 0)
>                goto done;
>
> -       i_coff = ((-iq_corr) / i_coffd) & 0x3f;
> +       i_coff = ((-iq_corr) / i_coffd);
>
>        /* Boundary check */
>        if (i_coff > 31)
> @@ -1407,7 +1407,7 @@ static int ath5k_hw_rf511x_calibrate(struct ath5k_hw *ah,
>        if (i_coff < -32)
>                i_coff = -32;
>
> -       q_coff = (((s32)i_pwr / q_coffd) - 128) & 0x1f;
> +       q_coff = (((s32)i_pwr / q_coffd) - 128);
>
>        /* Boundary check */
>        if (q_coff > 15)
> --
> 1.6.4.4


Acked-by: Nick Kossifidis <[email protected]>


--
GPG ID: 0xD21DB2DB
As you read this post global entropy rises. Have Fun ;-)
Nick