diff options
Diffstat (limited to 'package/kernel/mac80211/patches/350-0001-brcmfmac-add-fallback-for-devices-that-do-not-report.patch')
-rw-r--r-- | package/kernel/mac80211/patches/350-0001-brcmfmac-add-fallback-for-devices-that-do-not-report.patch | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/package/kernel/mac80211/patches/350-0001-brcmfmac-add-fallback-for-devices-that-do-not-report.patch b/package/kernel/mac80211/patches/350-0001-brcmfmac-add-fallback-for-devices-that-do-not-report.patch new file mode 100644 index 0000000000..7b299d54d2 --- /dev/null +++ b/package/kernel/mac80211/patches/350-0001-brcmfmac-add-fallback-for-devices-that-do-not-report.patch @@ -0,0 +1,52 @@ +From: Jaap Jan Meijer <jjmeijer88@gmail.com> +Date: Thu, 12 May 2016 18:25:08 +0200 +Subject: [PATCH] brcmfmac: add fallback for devices that do not report + per-chain values + +If brcmf_cfg80211_get_station fails to determine the RSSI from the +per-chain values get the value individually as a fallback. + +Fixes: 1f0dc59a6de9 ("brcmfmac: rework .get_station() callback") +Signed-off-by: Jaap Jan Meijer <jjmeijer88@gmail.com> +Acked-by: Arend van Spriel <arend.vanspriel@broadcom.com> +Signed-off-by: Kalle Valo <kvalo@codeaurora.org> +--- + +--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c +@@ -2480,12 +2480,14 @@ brcmf_cfg80211_get_station(struct wiphy + const u8 *mac, struct station_info *sinfo) + { + struct brcmf_if *ifp = netdev_priv(ndev); ++ struct brcmf_scb_val_le scb_val; + s32 err = 0; + struct brcmf_sta_info_le sta_info_le; + u32 sta_flags; + u32 is_tdls_peer; + s32 total_rssi; + s32 count_rssi; ++ int rssi; + u32 i; + + brcmf_dbg(TRACE, "Enter, MAC %pM\n", mac); +@@ -2569,6 +2571,20 @@ brcmf_cfg80211_get_station(struct wiphy + sinfo->filled |= BIT(NL80211_STA_INFO_SIGNAL); + total_rssi /= count_rssi; + sinfo->signal = total_rssi; ++ } else if (test_bit(BRCMF_VIF_STATUS_CONNECTED, ++ &ifp->vif->sme_state)) { ++ memset(&scb_val, 0, sizeof(scb_val)); ++ err = brcmf_fil_cmd_data_get(ifp, BRCMF_C_GET_RSSI, ++ &scb_val, sizeof(scb_val)); ++ if (err) { ++ brcmf_err("Could not get rssi (%d)\n", err); ++ goto done; ++ } else { ++ rssi = le32_to_cpu(scb_val.val); ++ sinfo->filled |= BIT(NL80211_STA_INFO_SIGNAL); ++ sinfo->signal = rssi; ++ brcmf_dbg(CONN, "RSSI %d dBm\n", rssi); ++ } + } + } + done: |