aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorArend van Spriel <arend@broadcom.com>2013-04-03 06:40:48 -0400
committerJohn W. Linville <linville@tuxdriver.com>2013-04-03 15:07:08 -0400
commit47829f4fc4825ad3a50389a682a6ea954664ba79 (patch)
tree78d1df7bc78e8145b32ebff14b461745fd558aba /drivers
parentd9337414e87259fae13693796f7ad897b1b7f8e1 (diff)
brcmfmac: only allocate firmware-signalling resources if required
Bail out of brcmf_fws_init() when no firmware-signalling is asked for. Need to take this into account in brcmf_fws_deinit() as well. Reviewed-by: Pieter-Paul Giesberts <pieterpg@broadcom.com> Reviewed-by: Piotr Haber <phaber@broadcom.com> Signed-off-by: Arend van Spriel <arend@broadcom.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c3
-rw-r--r--drivers/net/wireless/brcm80211/brcmfmac/fwsignal.c14
2 files changed, 10 insertions, 7 deletions
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c b/drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c
index d37620e93e61..c82f3e0b66f9 100644
--- a/drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c
+++ b/drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c
@@ -982,8 +982,7 @@ void brcmf_detach(struct device *dev)
982 if (drvr->prot) 982 if (drvr->prot)
983 brcmf_proto_detach(drvr); 983 brcmf_proto_detach(drvr);
984 984
985 if (drvr->fws) 985 brcmf_fws_deinit(drvr);
986 brcmf_fws_deinit(drvr);
987 986
988 brcmf_debugfs_detach(drvr); 987 brcmf_debugfs_detach(drvr);
989 bus_if->drvr = NULL; 988 bus_if->drvr = NULL;
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/fwsignal.c b/drivers/net/wireless/brcm80211/brcmfmac/fwsignal.c
index 8b09973309c9..430baa249465 100644
--- a/drivers/net/wireless/brcm80211/brcmfmac/fwsignal.c
+++ b/drivers/net/wireless/brcm80211/brcmfmac/fwsignal.c
@@ -1224,11 +1224,12 @@ int brcmf_fws_init(struct brcmf_pub *drvr)
1224 u32 tlv = 0; 1224 u32 tlv = 0;
1225 int rc; 1225 int rc;
1226 1226
1227 /* enable rssi signals */ 1227 if (!drvr->fw_signals)
1228 if (drvr->fw_signals) 1228 return 0;
1229 tlv = BRCMF_FWS_FLAGS_RSSI_SIGNALS | 1229
1230 BRCMF_FWS_FLAGS_XONXOFF_SIGNALS | 1230 tlv = BRCMF_FWS_FLAGS_RSSI_SIGNALS |
1231 BRCMF_FWS_FLAGS_CREDIT_STATUS_SIGNALS; 1231 BRCMF_FWS_FLAGS_XONXOFF_SIGNALS |
1232 BRCMF_FWS_FLAGS_CREDIT_STATUS_SIGNALS;
1232 1233
1233 spin_lock_init(&drvr->fws_spinlock); 1234 spin_lock_init(&drvr->fws_spinlock);
1234 1235
@@ -1277,6 +1278,9 @@ void brcmf_fws_deinit(struct brcmf_pub *drvr)
1277 struct brcmf_fws_info *fws = drvr->fws; 1278 struct brcmf_fws_info *fws = drvr->fws;
1278 ulong flags; 1279 ulong flags;
1279 1280
1281 if (!fws)
1282 return;
1283
1280 /* cleanup */ 1284 /* cleanup */
1281 brcmf_fws_lock(drvr, flags); 1285 brcmf_fws_lock(drvr, flags);
1282 brcmf_fws_cleanup(fws, -1); 1286 brcmf_fws_cleanup(fws, -1);