All of lore.kernel.org
 help / color / mirror / Atom feed
* [ath9k-devel] [PATCH] ath9k: Fix IQ calibration
@ 2014-01-14  7:55 ` Sujith Manoharan
  0 siblings, 0 replies; 6+ messages in thread
From: Sujith Manoharan @ 2014-01-14  7:55 UTC (permalink / raw)
  To: ath9k-devel

From: Sujith Manoharan <c_manoha@qca.qualcomm.com>

This patch fixes a bug in the TX IQ calibration post
processing routine because of which the driver disables
TX IQ correction even though the calibration results
are valid. This fix is applicable for all chips in the
AR9003 family.

Signed-off-by: Sujith Manoharan <c_manoha@qca.qualcomm.com>
---
 drivers/net/wireless/ath/ath9k/ar9003_calib.c | 17 +++++++++++++++--
 1 file changed, 15 insertions(+), 2 deletions(-)

diff --git a/drivers/net/wireless/ath/ath9k/ar9003_calib.c b/drivers/net/wireless/ath/ath9k/ar9003_calib.c
index 8c145cd..4eb35aa 100644
--- a/drivers/net/wireless/ath/ath9k/ar9003_calib.c
+++ b/drivers/net/wireless/ath/ath9k/ar9003_calib.c
@@ -655,8 +655,8 @@ static bool ar9003_hw_calc_iq_corr(struct ath_hw *ah,
 	if (i2_m_q2_a0_d1 > 0x800)
 		i2_m_q2_a0_d1 = -((0xfff - i2_m_q2_a0_d1) + 1);
 
-	if (i2_p_q2_a0_d1 > 0x800)
-		i2_p_q2_a0_d1 = -((0xfff - i2_p_q2_a0_d1) + 1);
+	if (i2_p_q2_a0_d1 > 0x1000)
+		i2_p_q2_a0_d1 = -((0x1fff - i2_p_q2_a0_d1) + 1);
 
 	if (iq_corr_a0_d1 > 0x800)
 		iq_corr_a0_d1 = -((0xfff - iq_corr_a0_d1) + 1);
@@ -700,6 +700,19 @@ static bool ar9003_hw_calc_iq_corr(struct ath_hw *ah,
 		return false;
 	}
 
+	if ((i2_p_q2_a0_d0 < 1024) || (i2_p_q2_a0_d0 > 2047) ||
+            (i2_p_q2_a1_d0 < 0) || (i2_p_q2_a1_d1 < 0) ||
+            (i2_p_q2_a0_d0 <= i2_m_q2_a0_d0) ||
+            (i2_p_q2_a0_d0 <= iq_corr_a0_d0) ||
+            (i2_p_q2_a0_d1 <= i2_m_q2_a0_d1) ||
+            (i2_p_q2_a0_d1 <= iq_corr_a0_d1) ||
+            (i2_p_q2_a1_d0 <= i2_m_q2_a1_d0) ||
+            (i2_p_q2_a1_d0 <= iq_corr_a1_d0) ||
+            (i2_p_q2_a1_d1 <= i2_m_q2_a1_d1) ||
+            (i2_p_q2_a1_d1 <= iq_corr_a1_d1)) {
+		return false;
+	}
+
 	mag_a0_d0 = (i2_m_q2_a0_d0 * res_scale) / i2_p_q2_a0_d0;
 	phs_a0_d0 = (iq_corr_a0_d0 * res_scale) / i2_p_q2_a0_d0;
 
-- 
1.8.5.2

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH] ath9k: Fix IQ calibration
@ 2014-01-14  7:55 ` Sujith Manoharan
  0 siblings, 0 replies; 6+ messages in thread
From: Sujith Manoharan @ 2014-01-14  7:55 UTC (permalink / raw)
  To: John Linville; +Cc: linux-wireless, ath9k-devel

From: Sujith Manoharan <c_manoha@qca.qualcomm.com>

This patch fixes a bug in the TX IQ calibration post
processing routine because of which the driver disables
TX IQ correction even though the calibration results
are valid. This fix is applicable for all chips in the
AR9003 family.

Signed-off-by: Sujith Manoharan <c_manoha@qca.qualcomm.com>
---
 drivers/net/wireless/ath/ath9k/ar9003_calib.c | 17 +++++++++++++++--
 1 file changed, 15 insertions(+), 2 deletions(-)

diff --git a/drivers/net/wireless/ath/ath9k/ar9003_calib.c b/drivers/net/wireless/ath/ath9k/ar9003_calib.c
index 8c145cd..4eb35aa 100644
--- a/drivers/net/wireless/ath/ath9k/ar9003_calib.c
+++ b/drivers/net/wireless/ath/ath9k/ar9003_calib.c
@@ -655,8 +655,8 @@ static bool ar9003_hw_calc_iq_corr(struct ath_hw *ah,
 	if (i2_m_q2_a0_d1 > 0x800)
 		i2_m_q2_a0_d1 = -((0xfff - i2_m_q2_a0_d1) + 1);
 
-	if (i2_p_q2_a0_d1 > 0x800)
-		i2_p_q2_a0_d1 = -((0xfff - i2_p_q2_a0_d1) + 1);
+	if (i2_p_q2_a0_d1 > 0x1000)
+		i2_p_q2_a0_d1 = -((0x1fff - i2_p_q2_a0_d1) + 1);
 
 	if (iq_corr_a0_d1 > 0x800)
 		iq_corr_a0_d1 = -((0xfff - iq_corr_a0_d1) + 1);
@@ -700,6 +700,19 @@ static bool ar9003_hw_calc_iq_corr(struct ath_hw *ah,
 		return false;
 	}
 
+	if ((i2_p_q2_a0_d0 < 1024) || (i2_p_q2_a0_d0 > 2047) ||
+            (i2_p_q2_a1_d0 < 0) || (i2_p_q2_a1_d1 < 0) ||
+            (i2_p_q2_a0_d0 <= i2_m_q2_a0_d0) ||
+            (i2_p_q2_a0_d0 <= iq_corr_a0_d0) ||
+            (i2_p_q2_a0_d1 <= i2_m_q2_a0_d1) ||
+            (i2_p_q2_a0_d1 <= iq_corr_a0_d1) ||
+            (i2_p_q2_a1_d0 <= i2_m_q2_a1_d0) ||
+            (i2_p_q2_a1_d0 <= iq_corr_a1_d0) ||
+            (i2_p_q2_a1_d1 <= i2_m_q2_a1_d1) ||
+            (i2_p_q2_a1_d1 <= iq_corr_a1_d1)) {
+		return false;
+	}
+
 	mag_a0_d0 = (i2_m_q2_a0_d0 * res_scale) / i2_p_q2_a0_d0;
 	phs_a0_d0 = (iq_corr_a0_d0 * res_scale) / i2_p_q2_a0_d0;
 
-- 
1.8.5.2


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [ath9k-devel] [PATCH] ath9k: Fix IQ calibration
  2014-01-14  7:55 ` Sujith Manoharan
@ 2014-01-20  6:02   ` Alex Hacker
  -1 siblings, 0 replies; 6+ messages in thread
From: Alex Hacker @ 2014-01-20  6:02 UTC (permalink / raw)
  To: ath9k-devel

Hello,

On Tue, Jan 14, 2014 at 01:25:17PM +0530, Sujith Manoharan wrote:
> +	if (i2_p_q2_a0_d1 > 0x1000)
> +		i2_p_q2_a0_d1 = -((0x1fff - i2_p_q2_a0_d1) + 1);

While the 'i2_p_q2_a0_d1 = (iq_res[2] & 0xfff)' the condition
'i2_p_q2_a0_d1 > 0x1000' is always false.

Regards,
Alex.

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [ath9k-devel] [PATCH] ath9k: Fix IQ calibration
@ 2014-01-20  6:02   ` Alex Hacker
  0 siblings, 0 replies; 6+ messages in thread
From: Alex Hacker @ 2014-01-20  6:02 UTC (permalink / raw)
  To: Sujith Manoharan; +Cc: John Linville, ath9k-devel, linux-wireless

Hello,

On Tue, Jan 14, 2014 at 01:25:17PM +0530, Sujith Manoharan wrote:
> +	if (i2_p_q2_a0_d1 > 0x1000)
> +		i2_p_q2_a0_d1 = -((0x1fff - i2_p_q2_a0_d1) + 1);

While the 'i2_p_q2_a0_d1 = (iq_res[2] & 0xfff)' the condition
'i2_p_q2_a0_d1 > 0x1000' is always false.

Regards,
Alex.

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [ath9k-devel] [PATCH] ath9k: Fix IQ calibration
  2014-01-20  6:02   ` Alex Hacker
@ 2014-01-20  6:44     ` Sujith Manoharan
  -1 siblings, 0 replies; 6+ messages in thread
From: Sujith Manoharan @ 2014-01-20  6:44 UTC (permalink / raw)
  To: ath9k-devel

Alex Hacker wrote:
> While the 'i2_p_q2_a0_d1 = (iq_res[2] & 0xfff)' the condition
> 'i2_p_q2_a0_d1 > 0x1000' is always false.

You are correct. I'll check with the systems engineers if something else
is missing. Thanks !

Sujith

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [ath9k-devel] [PATCH] ath9k: Fix IQ calibration
@ 2014-01-20  6:44     ` Sujith Manoharan
  0 siblings, 0 replies; 6+ messages in thread
From: Sujith Manoharan @ 2014-01-20  6:44 UTC (permalink / raw)
  To: Alex Hacker; +Cc: John Linville, ath9k-devel, linux-wireless

Alex Hacker wrote:
> While the 'i2_p_q2_a0_d1 = (iq_res[2] & 0xfff)' the condition
> 'i2_p_q2_a0_d1 > 0x1000' is always false.

You are correct. I'll check with the systems engineers if something else
is missing. Thanks !

Sujith

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2014-01-20  6:49 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-01-14  7:55 [ath9k-devel] [PATCH] ath9k: Fix IQ calibration Sujith Manoharan
2014-01-14  7:55 ` Sujith Manoharan
2014-01-20  6:02 ` [ath9k-devel] " Alex Hacker
2014-01-20  6:02   ` Alex Hacker
2014-01-20  6:44   ` Sujith Manoharan
2014-01-20  6:44     ` Sujith Manoharan

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.