diff options
author | John W. Linville <linville@tuxdriver.com> | 2010-07-19 16:35:20 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2010-07-20 16:53:09 -0400 |
commit | 8b74964c73ca9eed7078388d871cc7fae973cb63 (patch) | |
tree | 0fe432bb9425d9418b7169a9763633d79d14b94f /drivers | |
parent | b603742f49c3ec922522602e18ac22e8f6835132 (diff) |
rtl8180: improve signal reporting for rtl8185 hardware
The existing code seemed to be somewhat based on the datasheet, but
varied substantially from the vendor-provided driver. This mirrors the
handling of the rtl8185 case from that driver, but still neglects the
specifics for the rtl8180 hardware. Those details are a bit muddled...
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/net/wireless/rtl818x/rtl8180_dev.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/drivers/net/wireless/rtl818x/rtl8180_dev.c b/drivers/net/wireless/rtl818x/rtl8180_dev.c index 42705028751d..31808f96a3d6 100644 --- a/drivers/net/wireless/rtl818x/rtl8180_dev.c +++ b/drivers/net/wireless/rtl818x/rtl8180_dev.c | |||
@@ -103,6 +103,7 @@ static void rtl8180_handle_rx(struct ieee80211_hw *dev) | |||
103 | { | 103 | { |
104 | struct rtl8180_priv *priv = dev->priv; | 104 | struct rtl8180_priv *priv = dev->priv; |
105 | unsigned int count = 32; | 105 | unsigned int count = 32; |
106 | u8 signal; | ||
106 | 107 | ||
107 | while (count--) { | 108 | while (count--) { |
108 | struct rtl8180_rx_desc *entry = &priv->rx_ring[priv->rx_idx]; | 109 | struct rtl8180_rx_desc *entry = &priv->rx_ring[priv->rx_idx]; |
@@ -130,10 +131,14 @@ static void rtl8180_handle_rx(struct ieee80211_hw *dev) | |||
130 | skb_put(skb, flags & 0xFFF); | 131 | skb_put(skb, flags & 0xFFF); |
131 | 132 | ||
132 | rx_status.antenna = (flags2 >> 15) & 1; | 133 | rx_status.antenna = (flags2 >> 15) & 1; |
133 | /* TODO: improve signal/rssi reporting */ | ||
134 | rx_status.signal = (flags2 >> 8) & 0x7F; | ||
135 | /* XXX: is this correct? */ | ||
136 | rx_status.rate_idx = (flags >> 20) & 0xF; | 134 | rx_status.rate_idx = (flags >> 20) & 0xF; |
135 | /* TODO: improve signal/rssi reporting for !rtl8185 */ | ||
136 | signal = (flags2 >> 17) & 0x7F; | ||
137 | if (rx_status.rate_idx > 3) | ||
138 | signal = 90 - clamp_t(u8, signal, 25, 90); | ||
139 | else | ||
140 | signal = 95 - clamp_t(u8, signal, 30, 95); | ||
141 | rx_status.signal = signal; | ||
137 | rx_status.freq = dev->conf.channel->center_freq; | 142 | rx_status.freq = dev->conf.channel->center_freq; |
138 | rx_status.band = dev->conf.channel->band; | 143 | rx_status.band = dev->conf.channel->band; |
139 | rx_status.mactime = le64_to_cpu(entry->tsft); | 144 | rx_status.mactime = le64_to_cpu(entry->tsft); |