John W. Linville 3ad4b3e
From 7fc417556473f15efac269523c17eb92103c6484 Mon Sep 17 00:00:00 2001
John W. Linville 3ad4b3e
From: Luigi Tarenga <luigi.tarenga@gmail.com>
John W. Linville 3ad4b3e
Date: Tue, 31 Jan 2012 18:51:23 +0100
John W. Linville 3ad4b3e
Subject: [PATCH] rt2800lib: fix wrong -128dBm when signal is stronger than
John W. Linville 3ad4b3e
 -12dBm
John W. Linville 3ad4b3e
John W. Linville 3ad4b3e
This patch correct the type of variables containing the rssi
John W. Linville 3ad4b3e
values read from the rxwi.
John W. Linville 3ad4b3e
John W. Linville 3ad4b3e
In function rt2800_agc_to_rssi() 3 variables (rssi0, rssi1, rss2)
John W. Linville 3ad4b3e
defined as int was assigned a 16bit signed values as unsigned.
John W. Linville 3ad4b3e
From a test with a hi-gain antenna I verified that the rxwi
John W. Linville 3ad4b3e
contains signed rssi values in the  range -13/+81 (inclusive)
John W. Linville 3ad4b3e
with 0 as an error condition. In case of negative values a
John W. Linville 3ad4b3e
condition is triggered and the function return -128dBm while
John W. Linville 3ad4b3e
the signal is at its maximum. This patch correct the cast so
John W. Linville 3ad4b3e
negative values are not treated as very high positive values
John W. Linville 3ad4b3e
(ex. -13 does not become 243).
John W. Linville 3ad4b3e
John W. Linville 3ad4b3e
Signed-off-by: Luigi Tarenga <luigi.tarenga@gmail.com>
John W. Linville 3ad4b3e
Reviewed-by: Stanislaw Gruszka <sgruszka@redhat.com>
John W. Linville 3ad4b3e
Signed-off-by: John W. Linville <linville@tuxdriver.com>
John W. Linville 3ad4b3e
---
John W. Linville 3ad4b3e
 drivers/net/wireless/rt2x00/rt2800lib.c |    8 ++++----
John W. Linville 3ad4b3e
 1 files changed, 4 insertions(+), 4 deletions(-)
John W. Linville 3ad4b3e
John W. Linville 3ad4b3e
diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c b/drivers/net/wireless/rt2x00/rt2800lib.c
John W. Linville 3ad4b3e
index 22a1a8f..7bef66d 100644
John W. Linville 3ad4b3e
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
John W. Linville 3ad4b3e
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
John W. Linville 3ad4b3e
@@ -514,9 +514,9 @@ EXPORT_SYMBOL_GPL(rt2800_write_tx_data);
John W. Linville 3ad4b3e
 
John W. Linville 3ad4b3e
 static int rt2800_agc_to_rssi(struct rt2x00_dev *rt2x00dev, u32 rxwi_w2)
John W. Linville 3ad4b3e
 {
John W. Linville 3ad4b3e
-	int rssi0 = rt2x00_get_field32(rxwi_w2, RXWI_W2_RSSI0);
John W. Linville 3ad4b3e
-	int rssi1 = rt2x00_get_field32(rxwi_w2, RXWI_W2_RSSI1);
John W. Linville 3ad4b3e
-	int rssi2 = rt2x00_get_field32(rxwi_w2, RXWI_W2_RSSI2);
John W. Linville 3ad4b3e
+	s8 rssi0 = rt2x00_get_field32(rxwi_w2, RXWI_W2_RSSI0);
John W. Linville 3ad4b3e
+	s8 rssi1 = rt2x00_get_field32(rxwi_w2, RXWI_W2_RSSI1);
John W. Linville 3ad4b3e
+	s8 rssi2 = rt2x00_get_field32(rxwi_w2, RXWI_W2_RSSI2);
John W. Linville 3ad4b3e
 	u16 eeprom;
John W. Linville 3ad4b3e
 	u8 offset0;
John W. Linville 3ad4b3e
 	u8 offset1;
John W. Linville 3ad4b3e
@@ -552,7 +552,7 @@ static int rt2800_agc_to_rssi(struct rt2x00_dev *rt2x00dev, u32 rxwi_w2)
John W. Linville 3ad4b3e
 	 * which gives less energy...
John W. Linville 3ad4b3e
 	 */
John W. Linville 3ad4b3e
 	rssi0 = max(rssi0, rssi1);
John W. Linville 3ad4b3e
-	return max(rssi0, rssi2);
John W. Linville 3ad4b3e
+	return (int)max(rssi0, rssi2);
John W. Linville 3ad4b3e
 }
John W. Linville 3ad4b3e
 
John W. Linville 3ad4b3e
 void rt2800_process_rxwi(struct queue_entry *entry,
John W. Linville 3ad4b3e
-- 
John W. Linville 3ad4b3e
1.7.4.4
John W. Linville 3ad4b3e