mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-10 21:07:02 +09:00
wifi: brcmfmac: support CQM RSSI notification with older firmware
[ Upstream commitec52d77d07] Using the BCM4339 firmware from linux-firmware (version "BCM4339/2 wl0: Sep 5 2019 11:05:52 version 6.37.39.113 (r722271 CY)" from cypress/cyfmac4339-sdio.bin) the RSSI respose is only 4 bytes, which results in an error being logged. It seems that older devices send only the RSSI field and neither SNR nor noise is included. Handle this by accepting a 4 byte message and reading only the RSSI from it. Fixes:7dd56ea45a("brcmfmac: add support for CQM RSSI notifications") Signed-off-by: John Keeping <john@metanate.com> Signed-off-by: Kalle Valo <kvalo@kernel.org> Link: https://lore.kernel.org/r/20230124104248.2917465-1-john@metanate.com Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
9354826c02
commit
0022a3936e
@@ -6210,18 +6210,20 @@ static s32 brcmf_notify_rssi(struct brcmf_if *ifp,
|
|||||||
{
|
{
|
||||||
struct brcmf_cfg80211_vif *vif = ifp->vif;
|
struct brcmf_cfg80211_vif *vif = ifp->vif;
|
||||||
struct brcmf_rssi_be *info = data;
|
struct brcmf_rssi_be *info = data;
|
||||||
s32 rssi, snr, noise;
|
s32 rssi, snr = 0, noise = 0;
|
||||||
s32 low, high, last;
|
s32 low, high, last;
|
||||||
|
|
||||||
if (e->datalen < sizeof(*info)) {
|
if (e->datalen >= sizeof(*info)) {
|
||||||
|
rssi = be32_to_cpu(info->rssi);
|
||||||
|
snr = be32_to_cpu(info->snr);
|
||||||
|
noise = be32_to_cpu(info->noise);
|
||||||
|
} else if (e->datalen >= sizeof(rssi)) {
|
||||||
|
rssi = be32_to_cpu(*(__be32 *)data);
|
||||||
|
} else {
|
||||||
brcmf_err("insufficient RSSI event data\n");
|
brcmf_err("insufficient RSSI event data\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
rssi = be32_to_cpu(info->rssi);
|
|
||||||
snr = be32_to_cpu(info->snr);
|
|
||||||
noise = be32_to_cpu(info->noise);
|
|
||||||
|
|
||||||
low = vif->cqm_rssi_low;
|
low = vif->cqm_rssi_low;
|
||||||
high = vif->cqm_rssi_high;
|
high = vif->cqm_rssi_high;
|
||||||
last = vif->cqm_rssi_last;
|
last = vif->cqm_rssi_last;
|
||||||
|
|||||||
Reference in New Issue
Block a user