1 From: Jaap Jan Meijer <jjmeijer88@gmail.com>
2 Date: Thu, 12 May 2016 18:25:08 +0200
3 Subject: [PATCH] brcmfmac: add fallback for devices that do not report
6 If brcmf_cfg80211_get_station fails to determine the RSSI from the
7 per-chain values get the value individually as a fallback.
9 Fixes: 1f0dc59a6de9 ("brcmfmac: rework .get_station() callback")
10 Signed-off-by: Jaap Jan Meijer <jjmeijer88@gmail.com>
11 Acked-by: Arend van Spriel <arend.vanspriel@broadcom.com>
12 Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
15 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
16 +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
17 @@ -2480,12 +2480,14 @@ brcmf_cfg80211_get_station(struct wiphy
18 const u8 *mac, struct station_info *sinfo)
20 struct brcmf_if *ifp = netdev_priv(ndev);
21 + struct brcmf_scb_val_le scb_val;
23 struct brcmf_sta_info_le sta_info_le;
31 brcmf_dbg(TRACE, "Enter, MAC %pM\n", mac);
32 @@ -2569,6 +2571,20 @@ brcmf_cfg80211_get_station(struct wiphy
33 sinfo->filled |= BIT(NL80211_STA_INFO_SIGNAL);
34 total_rssi /= count_rssi;
35 sinfo->signal = total_rssi;
36 + } else if (test_bit(BRCMF_VIF_STATUS_CONNECTED,
37 + &ifp->vif->sme_state)) {
38 + memset(&scb_val, 0, sizeof(scb_val));
39 + err = brcmf_fil_cmd_data_get(ifp, BRCMF_C_GET_RSSI,
40 + &scb_val, sizeof(scb_val));
42 + brcmf_err("Could not get rssi (%d)\n", err);
45 + rssi = le32_to_cpu(scb_val.val);
46 + sinfo->filled |= BIT(NL80211_STA_INFO_SIGNAL);
47 + sinfo->signal = rssi;
48 + brcmf_dbg(CONN, "RSSI %d dBm\n", rssi);