]> bbs.cooldavid.org Git - net-next-2.6.git/blobdiff - drivers/net/wireless/rtl818x/rtl8180_dev.c
rtl8180: improve signal reporting for rtl8185 hardware
[net-next-2.6.git] / drivers / net / wireless / rtl818x / rtl8180_dev.c
index 42705028751d5caf7893a933fe9e5fb47b917958..31808f96a3d65849e3ccaafceb02774814673d11 100644 (file)
@@ -103,6 +103,7 @@ static void rtl8180_handle_rx(struct ieee80211_hw *dev)
 {
        struct rtl8180_priv *priv = dev->priv;
        unsigned int count = 32;
+       u8 signal;
 
        while (count--) {
                struct rtl8180_rx_desc *entry = &priv->rx_ring[priv->rx_idx];
@@ -130,10 +131,14 @@ static void rtl8180_handle_rx(struct ieee80211_hw *dev)
                        skb_put(skb, flags & 0xFFF);
 
                        rx_status.antenna = (flags2 >> 15) & 1;
-                       /* TODO: improve signal/rssi reporting */
-                       rx_status.signal = (flags2 >> 8) & 0x7F;
-                       /* XXX: is this correct? */
                        rx_status.rate_idx = (flags >> 20) & 0xF;
+                       /* TODO: improve signal/rssi reporting for !rtl8185 */
+                       signal = (flags2 >> 17) & 0x7F;
+                       if (rx_status.rate_idx > 3)
+                               signal = 90 - clamp_t(u8, signal, 25, 90);
+                       else
+                               signal = 95 - clamp_t(u8, signal, 30, 95);
+                       rx_status.signal = signal;
                        rx_status.freq = dev->conf.channel->center_freq;
                        rx_status.band = dev->conf.channel->band;
                        rx_status.mactime = le64_to_cpu(entry->tsft);