diff options
author | Arend van Spriel <arend@broadcom.com> | 2013-04-03 06:40:48 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2013-04-03 15:07:08 -0400 |
commit | 47829f4fc4825ad3a50389a682a6ea954664ba79 (patch) | |
tree | 78d1df7bc78e8145b32ebff14b461745fd558aba /drivers | |
parent | d9337414e87259fae13693796f7ad897b1b7f8e1 (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.c | 3 | ||||
-rw-r--r-- | drivers/net/wireless/brcm80211/brcmfmac/fwsignal.c | 14 |
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); |