diff options
author | Franky Lin <frankyl@broadcom.com> | 2012-04-11 05:52:47 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2012-04-13 14:32:53 -0400 |
commit | 3338084ab327156e593176bcf9cf7286a192cca1 (patch) | |
tree | 0da4c052add4b55ea755977a455060ae281ffe8b /drivers/net | |
parent | 8f1ab44d8de5154cf6746d07f0902ea73f059c2b (diff) |
brcm80211: fmac: postpone dongle RF enabling.
BRCMF_C_UP is the command that asks the firmware to enable RF of
dongle. Some firmware initialization steps must be performed during
RF is down. Postpone BRCMF_C_UP firing until brcmf_netdev_open get
called to ensure firmware have enough time to finish
initialization.
Reviewed-by: Pieter-Paul Giesberts <pieterpg@broadcom.com>
Reviewed-by: Arend van Spriel <arend@broadcom.com>
Signed-off-by: Franky Lin <frankyl@broadcom.com>
Signed-off-by: Arend van Spriel <arend@broadcom.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net')
-rw-r--r-- | drivers/net/wireless/brcm80211/brcmfmac/dhd_common.c | 4 | ||||
-rw-r--r-- | drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c | 5 |
2 files changed, 5 insertions, 4 deletions
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/dhd_common.c b/drivers/net/wireless/brcm80211/brcmfmac/dhd_common.c index 4187435220f..236cb9fa460 100644 --- a/drivers/net/wireless/brcm80211/brcmfmac/dhd_common.c +++ b/drivers/net/wireless/brcm80211/brcmfmac/dhd_common.c | |||
@@ -799,7 +799,6 @@ int brcmf_c_preinit_dcmds(struct brcmf_pub *drvr) | |||
799 | { | 799 | { |
800 | char iovbuf[BRCMF_EVENTING_MASK_LEN + 12]; /* Room for | 800 | char iovbuf[BRCMF_EVENTING_MASK_LEN + 12]; /* Room for |
801 | "event_msgs" + '\0' + bitvec */ | 801 | "event_msgs" + '\0' + bitvec */ |
802 | uint up = 0; | ||
803 | char buf[128], *ptr; | 802 | char buf[128], *ptr; |
804 | u32 dongle_align = drvr->bus_if->align; | 803 | u32 dongle_align = drvr->bus_if->align; |
805 | u32 glom = 0; | 804 | u32 glom = 0; |
@@ -853,9 +852,6 @@ int brcmf_c_preinit_dcmds(struct brcmf_pub *drvr) | |||
853 | brcmf_proto_cdc_set_dcmd(drvr, 0, BRCMF_C_SET_VAR, iovbuf, | 852 | brcmf_proto_cdc_set_dcmd(drvr, 0, BRCMF_C_SET_VAR, iovbuf, |
854 | sizeof(iovbuf)); | 853 | sizeof(iovbuf)); |
855 | 854 | ||
856 | /* Force STA UP */ | ||
857 | brcmf_proto_cdc_set_dcmd(drvr, 0, BRCMF_C_UP, (char *)&up, sizeof(up)); | ||
858 | |||
859 | /* Setup event_msgs */ | 855 | /* Setup event_msgs */ |
860 | brcmf_c_mkiovar("event_msgs", drvr->eventmask, BRCMF_EVENTING_MASK_LEN, | 856 | brcmf_c_mkiovar("event_msgs", drvr->eventmask, BRCMF_EVENTING_MASK_LEN, |
861 | iovbuf, sizeof(iovbuf)); | 857 | iovbuf, sizeof(iovbuf)); |
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c b/drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c index 00b62708f22..8933f9b31a9 100644 --- a/drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c +++ b/drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c | |||
@@ -799,6 +799,7 @@ static int brcmf_netdev_open(struct net_device *ndev) | |||
799 | struct brcmf_bus *bus_if = drvr->bus_if; | 799 | struct brcmf_bus *bus_if = drvr->bus_if; |
800 | u32 toe_ol; | 800 | u32 toe_ol; |
801 | s32 ret = 0; | 801 | s32 ret = 0; |
802 | uint up = 0; | ||
802 | 803 | ||
803 | brcmf_dbg(TRACE, "ifidx %d\n", ifp->idx); | 804 | brcmf_dbg(TRACE, "ifidx %d\n", ifp->idx); |
804 | 805 | ||
@@ -822,6 +823,10 @@ static int brcmf_netdev_open(struct net_device *ndev) | |||
822 | drvr->iflist[ifp->idx]->ndev->features &= | 823 | drvr->iflist[ifp->idx]->ndev->features &= |
823 | ~NETIF_F_IP_CSUM; | 824 | ~NETIF_F_IP_CSUM; |
824 | } | 825 | } |
826 | |||
827 | /* make sure RF is ready for work */ | ||
828 | brcmf_proto_cdc_set_dcmd(drvr, 0, BRCMF_C_UP, (char *)&up, sizeof(up)); | ||
829 | |||
825 | /* Allow transmit calls */ | 830 | /* Allow transmit calls */ |
826 | netif_start_queue(ndev); | 831 | netif_start_queue(ndev); |
827 | drvr->bus_if->drvr_up = true; | 832 | drvr->bus_if->drvr_up = true; |