aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net
diff options
context:
space:
mode:
authorFranky Lin <frankyl@broadcom.com>2012-04-11 05:52:47 -0400
committerJohn W. Linville <linville@tuxdriver.com>2012-04-13 14:32:53 -0400
commit3338084ab327156e593176bcf9cf7286a192cca1 (patch)
tree0da4c052add4b55ea755977a455060ae281ffe8b /drivers/net
parent8f1ab44d8de5154cf6746d07f0902ea73f059c2b (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.c4
-rw-r--r--drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c5
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;