aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c115
-rw-r--r--drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c168
-rw-r--r--drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.h15
3 files changed, 146 insertions, 152 deletions
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
index e3366ab44c28..a47b252ec799 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
@@ -118,7 +118,7 @@ int brcmf_sdiod_intr_register(struct brcmf_sdio_dev *sdiodev)
118 118
119 ret = request_irq(pdata->oob_irq_nr, brcmf_sdiod_oob_irqhandler, 119 ret = request_irq(pdata->oob_irq_nr, brcmf_sdiod_oob_irqhandler,
120 pdata->oob_irq_flags, "brcmf_oob_intr", 120 pdata->oob_irq_flags, "brcmf_oob_intr",
121 &sdiodev->func[1]->dev); 121 &sdiodev->func1->dev);
122 if (ret != 0) { 122 if (ret != 0) {
123 brcmf_err("request_irq failed %d\n", ret); 123 brcmf_err("request_irq failed %d\n", ret);
124 return ret; 124 return ret;
@@ -132,7 +132,7 @@ int brcmf_sdiod_intr_register(struct brcmf_sdio_dev *sdiodev)
132 } 132 }
133 sdiodev->irq_wake = true; 133 sdiodev->irq_wake = true;
134 134
135 sdio_claim_host(sdiodev->func[1]); 135 sdio_claim_host(sdiodev->func1);
136 136
137 if (sdiodev->bus_if->chip == BRCM_CC_43362_CHIP_ID) { 137 if (sdiodev->bus_if->chip == BRCM_CC_43362_CHIP_ID) {
138 /* assign GPIO to SDIO core */ 138 /* assign GPIO to SDIO core */
@@ -159,13 +159,13 @@ int brcmf_sdiod_intr_register(struct brcmf_sdio_dev *sdiodev)
159 data |= SDIO_CCCR_BRCM_SEPINT_ACT_HI; 159 data |= SDIO_CCCR_BRCM_SEPINT_ACT_HI;
160 brcmf_sdiod_func0_wb(sdiodev, SDIO_CCCR_BRCM_SEPINT, 160 brcmf_sdiod_func0_wb(sdiodev, SDIO_CCCR_BRCM_SEPINT,
161 data, &ret); 161 data, &ret);
162 sdio_release_host(sdiodev->func[1]); 162 sdio_release_host(sdiodev->func1);
163 } else { 163 } else {
164 brcmf_dbg(SDIO, "Entering\n"); 164 brcmf_dbg(SDIO, "Entering\n");
165 sdio_claim_host(sdiodev->func[1]); 165 sdio_claim_host(sdiodev->func1);
166 sdio_claim_irq(sdiodev->func[1], brcmf_sdiod_ib_irqhandler); 166 sdio_claim_irq(sdiodev->func1, brcmf_sdiod_ib_irqhandler);
167 sdio_claim_irq(sdiodev->func[2], brcmf_sdiod_dummy_irqhandler); 167 sdio_claim_irq(sdiodev->func2, brcmf_sdiod_dummy_irqhandler);
168 sdio_release_host(sdiodev->func[1]); 168 sdio_release_host(sdiodev->func1);
169 sdiodev->sd_irq_requested = true; 169 sdiodev->sd_irq_requested = true;
170 } 170 }
171 171
@@ -183,26 +183,26 @@ void brcmf_sdiod_intr_unregister(struct brcmf_sdio_dev *sdiodev)
183 struct brcmfmac_sdio_pd *pdata; 183 struct brcmfmac_sdio_pd *pdata;
184 184
185 pdata = &sdiodev->settings->bus.sdio; 185 pdata = &sdiodev->settings->bus.sdio;
186 sdio_claim_host(sdiodev->func[1]); 186 sdio_claim_host(sdiodev->func1);
187 brcmf_sdiod_func0_wb(sdiodev, SDIO_CCCR_BRCM_SEPINT, 0, NULL); 187 brcmf_sdiod_func0_wb(sdiodev, SDIO_CCCR_BRCM_SEPINT, 0, NULL);
188 brcmf_sdiod_func0_wb(sdiodev, SDIO_CCCR_IENx, 0, NULL); 188 brcmf_sdiod_func0_wb(sdiodev, SDIO_CCCR_IENx, 0, NULL);
189 sdio_release_host(sdiodev->func[1]); 189 sdio_release_host(sdiodev->func1);
190 190
191 sdiodev->oob_irq_requested = false; 191 sdiodev->oob_irq_requested = false;
192 if (sdiodev->irq_wake) { 192 if (sdiodev->irq_wake) {
193 disable_irq_wake(pdata->oob_irq_nr); 193 disable_irq_wake(pdata->oob_irq_nr);
194 sdiodev->irq_wake = false; 194 sdiodev->irq_wake = false;
195 } 195 }
196 free_irq(pdata->oob_irq_nr, &sdiodev->func[1]->dev); 196 free_irq(pdata->oob_irq_nr, &sdiodev->func1->dev);
197 sdiodev->irq_en = false; 197 sdiodev->irq_en = false;
198 sdiodev->oob_irq_requested = false; 198 sdiodev->oob_irq_requested = false;
199 } 199 }
200 200
201 if (sdiodev->sd_irq_requested) { 201 if (sdiodev->sd_irq_requested) {
202 sdio_claim_host(sdiodev->func[1]); 202 sdio_claim_host(sdiodev->func1);
203 sdio_release_irq(sdiodev->func[2]); 203 sdio_release_irq(sdiodev->func2);
204 sdio_release_irq(sdiodev->func[1]); 204 sdio_release_irq(sdiodev->func1);
205 sdio_release_host(sdiodev->func[1]); 205 sdio_release_host(sdiodev->func1);
206 sdiodev->sd_irq_requested = false; 206 sdiodev->sd_irq_requested = false;
207 } 207 }
208} 208}
@@ -264,7 +264,7 @@ u32 brcmf_sdiod_readl(struct brcmf_sdio_dev *sdiodev, u32 addr, int *ret)
264 addr &= SBSDIO_SB_OFT_ADDR_MASK; 264 addr &= SBSDIO_SB_OFT_ADDR_MASK;
265 addr |= SBSDIO_SB_ACCESS_2_4B_FLAG; 265 addr |= SBSDIO_SB_ACCESS_2_4B_FLAG;
266 266
267 data = sdio_readl(sdiodev->func[1], addr, &retval); 267 data = sdio_readl(sdiodev->func1, addr, &retval);
268 268
269out: 269out:
270 if (ret) 270 if (ret)
@@ -285,7 +285,7 @@ void brcmf_sdiod_writel(struct brcmf_sdio_dev *sdiodev, u32 addr,
285 addr &= SBSDIO_SB_OFT_ADDR_MASK; 285 addr &= SBSDIO_SB_OFT_ADDR_MASK;
286 addr |= SBSDIO_SB_ACCESS_2_4B_FLAG; 286 addr |= SBSDIO_SB_ACCESS_2_4B_FLAG;
287 287
288 sdio_writel(sdiodev->func[1], data, addr, &retval); 288 sdio_writel(sdiodev->func1, data, addr, &retval);
289 289
290out: 290out:
291 if (ret) 291 if (ret)
@@ -550,7 +550,7 @@ int brcmf_sdiod_recv_pkt(struct brcmf_sdio_dev *sdiodev, struct sk_buff *pkt)
550 addr &= SBSDIO_SB_OFT_ADDR_MASK; 550 addr &= SBSDIO_SB_OFT_ADDR_MASK;
551 addr |= SBSDIO_SB_ACCESS_2_4B_FLAG; 551 addr |= SBSDIO_SB_ACCESS_2_4B_FLAG;
552 552
553 err = brcmf_sdiod_buff_read(sdiodev, sdiodev->func[2], addr, pkt); 553 err = brcmf_sdiod_buff_read(sdiodev, sdiodev->func2, addr, pkt);
554 554
555done: 555done:
556 return err; 556 return err;
@@ -575,13 +575,13 @@ int brcmf_sdiod_recv_chain(struct brcmf_sdio_dev *sdiodev,
575 addr |= SBSDIO_SB_ACCESS_2_4B_FLAG; 575 addr |= SBSDIO_SB_ACCESS_2_4B_FLAG;
576 576
577 if (pktq->qlen == 1) 577 if (pktq->qlen == 1)
578 err = brcmf_sdiod_buff_read(sdiodev, sdiodev->func[2], addr, 578 err = brcmf_sdiod_buff_read(sdiodev, sdiodev->func2, addr,
579 pktq->next); 579 pktq->next);
580 else if (!sdiodev->sg_support) { 580 else if (!sdiodev->sg_support) {
581 glom_skb = brcmu_pkt_buf_get_skb(totlen); 581 glom_skb = brcmu_pkt_buf_get_skb(totlen);
582 if (!glom_skb) 582 if (!glom_skb)
583 return -ENOMEM; 583 return -ENOMEM;
584 err = brcmf_sdiod_buff_read(sdiodev, sdiodev->func[2], addr, 584 err = brcmf_sdiod_buff_read(sdiodev, sdiodev->func2, addr,
585 glom_skb); 585 glom_skb);
586 if (err) 586 if (err)
587 goto done; 587 goto done;
@@ -591,7 +591,7 @@ int brcmf_sdiod_recv_chain(struct brcmf_sdio_dev *sdiodev,
591 skb_pull(glom_skb, skb->len); 591 skb_pull(glom_skb, skb->len);
592 } 592 }
593 } else 593 } else
594 err = brcmf_sdiod_sglist_rw(sdiodev, sdiodev->func[2], false, 594 err = brcmf_sdiod_sglist_rw(sdiodev, sdiodev->func2, false,
595 addr, pktq); 595 addr, pktq);
596 596
597done: 597done:
@@ -623,7 +623,7 @@ int brcmf_sdiod_send_buf(struct brcmf_sdio_dev *sdiodev, u8 *buf, uint nbytes)
623 addr |= SBSDIO_SB_ACCESS_2_4B_FLAG; 623 addr |= SBSDIO_SB_ACCESS_2_4B_FLAG;
624 624
625 if (!err) 625 if (!err)
626 err = brcmf_sdiod_buff_write(sdiodev, sdiodev->func[2], addr, 626 err = brcmf_sdiod_buff_write(sdiodev, sdiodev->func2, addr,
627 mypkt); 627 mypkt);
628 628
629 brcmu_pkt_buf_free_skb(mypkt); 629 brcmu_pkt_buf_free_skb(mypkt);
@@ -649,13 +649,13 @@ int brcmf_sdiod_send_pkt(struct brcmf_sdio_dev *sdiodev,
649 649
650 if (pktq->qlen == 1 || !sdiodev->sg_support) { 650 if (pktq->qlen == 1 || !sdiodev->sg_support) {
651 skb_queue_walk(pktq, skb) { 651 skb_queue_walk(pktq, skb) {
652 err = brcmf_sdiod_buff_write(sdiodev, sdiodev->func[2], 652 err = brcmf_sdiod_buff_write(sdiodev, sdiodev->func2,
653 addr, skb); 653 addr, skb);
654 if (err) 654 if (err)
655 break; 655 break;
656 } 656 }
657 } else { 657 } else {
658 err = brcmf_sdiod_sglist_rw(sdiodev, sdiodev->func[2], true, 658 err = brcmf_sdiod_sglist_rw(sdiodev, sdiodev->func2, true,
659 addr, pktq); 659 addr, pktq);
660 } 660 }
661 661
@@ -686,7 +686,7 @@ brcmf_sdiod_ramrw(struct brcmf_sdio_dev *sdiodev, bool write, u32 address,
686 else 686 else
687 dsize = size; 687 dsize = size;
688 688
689 sdio_claim_host(sdiodev->func[1]); 689 sdio_claim_host(sdiodev->func1);
690 690
691 /* Do the transfer(s) */ 691 /* Do the transfer(s) */
692 while (size) { 692 while (size) {
@@ -706,10 +706,10 @@ brcmf_sdiod_ramrw(struct brcmf_sdio_dev *sdiodev, bool write, u32 address,
706 706
707 if (write) { 707 if (write) {
708 memcpy(pkt->data, data, dsize); 708 memcpy(pkt->data, data, dsize);
709 err = brcmf_sdiod_buff_write(sdiodev, sdiodev->func[1], 709 err = brcmf_sdiod_buff_write(sdiodev, sdiodev->func1,
710 sdaddr, pkt); 710 sdaddr, pkt);
711 } else { 711 } else {
712 err = brcmf_sdiod_buff_read(sdiodev, sdiodev->func[1], 712 err = brcmf_sdiod_buff_read(sdiodev, sdiodev->func1,
713 sdaddr, pkt); 713 sdaddr, pkt);
714 } 714 }
715 715
@@ -733,7 +733,7 @@ brcmf_sdiod_ramrw(struct brcmf_sdio_dev *sdiodev, bool write, u32 address,
733 733
734 dev_kfree_skb(pkt); 734 dev_kfree_skb(pkt);
735 735
736 sdio_release_host(sdiodev->func[1]); 736 sdio_release_host(sdiodev->func1);
737 737
738 return err; 738 return err;
739} 739}
@@ -757,7 +757,7 @@ void brcmf_sdiod_sgtable_alloc(struct brcmf_sdio_dev *sdiodev)
757 uint nents; 757 uint nents;
758 int err; 758 int err;
759 759
760 func = sdiodev->func[2]; 760 func = sdiodev->func2;
761 host = func->card->host; 761 host = func->card->host;
762 sdiodev->sg_support = host->max_segs > 1; 762 sdiodev->sg_support = host->max_segs > 1;
763 max_blocks = min_t(uint, host->max_blk_count, 511u); 763 max_blocks = min_t(uint, host->max_blk_count, 511u);
@@ -818,17 +818,17 @@ static int brcmf_sdiod_freezer_on(struct brcmf_sdio_dev *sdiodev)
818 brcmf_sdio_trigger_dpc(sdiodev->bus); 818 brcmf_sdio_trigger_dpc(sdiodev->bus);
819 wait_event(sdiodev->freezer->thread_freeze, 819 wait_event(sdiodev->freezer->thread_freeze,
820 atomic_read(expect) == sdiodev->freezer->frozen_count); 820 atomic_read(expect) == sdiodev->freezer->frozen_count);
821 sdio_claim_host(sdiodev->func[1]); 821 sdio_claim_host(sdiodev->func1);
822 res = brcmf_sdio_sleep(sdiodev->bus, true); 822 res = brcmf_sdio_sleep(sdiodev->bus, true);
823 sdio_release_host(sdiodev->func[1]); 823 sdio_release_host(sdiodev->func1);
824 return res; 824 return res;
825} 825}
826 826
827static void brcmf_sdiod_freezer_off(struct brcmf_sdio_dev *sdiodev) 827static void brcmf_sdiod_freezer_off(struct brcmf_sdio_dev *sdiodev)
828{ 828{
829 sdio_claim_host(sdiodev->func[1]); 829 sdio_claim_host(sdiodev->func1);
830 brcmf_sdio_sleep(sdiodev->bus, false); 830 brcmf_sdio_sleep(sdiodev->bus, false);
831 sdio_release_host(sdiodev->func[1]); 831 sdio_release_host(sdiodev->func1);
832 atomic_set(&sdiodev->freezer->freezing, 0); 832 atomic_set(&sdiodev->freezer->freezing, 0);
833 complete_all(&sdiodev->freezer->resumed); 833 complete_all(&sdiodev->freezer->resumed);
834} 834}
@@ -878,19 +878,19 @@ static int brcmf_sdiod_remove(struct brcmf_sdio_dev *sdiodev)
878 brcmf_sdiod_freezer_detach(sdiodev); 878 brcmf_sdiod_freezer_detach(sdiodev);
879 879
880 /* Disable Function 2 */ 880 /* Disable Function 2 */
881 sdio_claim_host(sdiodev->func[2]); 881 sdio_claim_host(sdiodev->func2);
882 sdio_disable_func(sdiodev->func[2]); 882 sdio_disable_func(sdiodev->func2);
883 sdio_release_host(sdiodev->func[2]); 883 sdio_release_host(sdiodev->func2);
884 884
885 /* Disable Function 1 */ 885 /* Disable Function 1 */
886 sdio_claim_host(sdiodev->func[1]); 886 sdio_claim_host(sdiodev->func1);
887 sdio_disable_func(sdiodev->func[1]); 887 sdio_disable_func(sdiodev->func1);
888 sdio_release_host(sdiodev->func[1]); 888 sdio_release_host(sdiodev->func1);
889 889
890 sg_free_table(&sdiodev->sgtable); 890 sg_free_table(&sdiodev->sgtable);
891 sdiodev->sbwad = 0; 891 sdiodev->sbwad = 0;
892 892
893 pm_runtime_allow(sdiodev->func[1]->card->host->parent); 893 pm_runtime_allow(sdiodev->func1->card->host->parent);
894 return 0; 894 return 0;
895} 895}
896 896
@@ -906,29 +906,27 @@ static int brcmf_sdiod_probe(struct brcmf_sdio_dev *sdiodev)
906{ 906{
907 int ret = 0; 907 int ret = 0;
908 908
909 sdiodev->num_funcs = 2; 909 sdio_claim_host(sdiodev->func1);
910 910
911 sdio_claim_host(sdiodev->func[1]); 911 ret = sdio_set_block_size(sdiodev->func1, SDIO_FUNC1_BLOCKSIZE);
912
913 ret = sdio_set_block_size(sdiodev->func[1], SDIO_FUNC1_BLOCKSIZE);
914 if (ret) { 912 if (ret) {
915 brcmf_err("Failed to set F1 blocksize\n"); 913 brcmf_err("Failed to set F1 blocksize\n");
916 sdio_release_host(sdiodev->func[1]); 914 sdio_release_host(sdiodev->func1);
917 goto out; 915 goto out;
918 } 916 }
919 ret = sdio_set_block_size(sdiodev->func[2], SDIO_FUNC2_BLOCKSIZE); 917 ret = sdio_set_block_size(sdiodev->func2, SDIO_FUNC2_BLOCKSIZE);
920 if (ret) { 918 if (ret) {
921 brcmf_err("Failed to set F2 blocksize\n"); 919 brcmf_err("Failed to set F2 blocksize\n");
922 sdio_release_host(sdiodev->func[1]); 920 sdio_release_host(sdiodev->func1);
923 goto out; 921 goto out;
924 } 922 }
925 923
926 /* increase F2 timeout */ 924 /* increase F2 timeout */
927 sdiodev->func[2]->enable_timeout = SDIO_WAIT_F2RDY; 925 sdiodev->func2->enable_timeout = SDIO_WAIT_F2RDY;
928 926
929 /* Enable Function 1 */ 927 /* Enable Function 1 */
930 ret = sdio_enable_func(sdiodev->func[1]); 928 ret = sdio_enable_func(sdiodev->func1);
931 sdio_release_host(sdiodev->func[1]); 929 sdio_release_host(sdiodev->func1);
932 if (ret) { 930 if (ret) {
933 brcmf_err("Failed to enable F1: err=%d\n", ret); 931 brcmf_err("Failed to enable F1: err=%d\n", ret);
934 goto out; 932 goto out;
@@ -944,7 +942,7 @@ static int brcmf_sdiod_probe(struct brcmf_sdio_dev *sdiodev)
944 ret = -ENODEV; 942 ret = -ENODEV;
945 goto out; 943 goto out;
946 } 944 }
947 brcmf_sdiod_host_fixup(sdiodev->func[2]->card->host); 945 brcmf_sdiod_host_fixup(sdiodev->func2->card->host);
948out: 946out:
949 if (ret) 947 if (ret)
950 brcmf_sdiod_remove(sdiodev); 948 brcmf_sdiod_remove(sdiodev);
@@ -1032,16 +1030,15 @@ static int brcmf_ops_sdio_probe(struct sdio_func *func,
1032 /* store refs to functions used. mmc_card does 1030 /* store refs to functions used. mmc_card does
1033 * not hold the F0 function pointer. 1031 * not hold the F0 function pointer.
1034 */ 1032 */
1035 sdiodev->func[0] = NULL; 1033 sdiodev->func1 = func->card->sdio_func[0];
1036 sdiodev->func[1] = func->card->sdio_func[0]; 1034 sdiodev->func2 = func;
1037 sdiodev->func[2] = func;
1038 1035
1039 sdiodev->bus_if = bus_if; 1036 sdiodev->bus_if = bus_if;
1040 bus_if->bus_priv.sdio = sdiodev; 1037 bus_if->bus_priv.sdio = sdiodev;
1041 bus_if->proto_type = BRCMF_PROTO_BCDC; 1038 bus_if->proto_type = BRCMF_PROTO_BCDC;
1042 dev_set_drvdata(&func->dev, bus_if); 1039 dev_set_drvdata(&func->dev, bus_if);
1043 dev_set_drvdata(&sdiodev->func[1]->dev, bus_if); 1040 dev_set_drvdata(&sdiodev->func1->dev, bus_if);
1044 sdiodev->dev = &sdiodev->func[1]->dev; 1041 sdiodev->dev = &sdiodev->func1->dev;
1045 1042
1046 brcmf_sdiod_change_state(sdiodev, BRCMF_SDIOD_DOWN); 1043 brcmf_sdiod_change_state(sdiodev, BRCMF_SDIOD_DOWN);
1047 1044
@@ -1057,7 +1054,7 @@ static int brcmf_ops_sdio_probe(struct sdio_func *func,
1057 1054
1058fail: 1055fail:
1059 dev_set_drvdata(&func->dev, NULL); 1056 dev_set_drvdata(&func->dev, NULL);
1060 dev_set_drvdata(&sdiodev->func[1]->dev, NULL); 1057 dev_set_drvdata(&sdiodev->func1->dev, NULL);
1061 kfree(sdiodev); 1058 kfree(sdiodev);
1062 kfree(bus_if); 1059 kfree(bus_if);
1063 return err; 1060 return err;
@@ -1086,8 +1083,8 @@ static void brcmf_ops_sdio_remove(struct sdio_func *func)
1086 /* only proceed with rest of cleanup if func 1 */ 1083 /* only proceed with rest of cleanup if func 1 */
1087 brcmf_sdiod_remove(sdiodev); 1084 brcmf_sdiod_remove(sdiodev);
1088 1085
1089 dev_set_drvdata(&sdiodev->func[1]->dev, NULL); 1086 dev_set_drvdata(&sdiodev->func1->dev, NULL);
1090 dev_set_drvdata(&sdiodev->func[2]->dev, NULL); 1087 dev_set_drvdata(&sdiodev->func2->dev, NULL);
1091 1088
1092 kfree(bus_if); 1089 kfree(bus_if);
1093 kfree(sdiodev); 1090 kfree(sdiodev);
@@ -1132,7 +1129,7 @@ static int brcmf_ops_sdio_suspend(struct device *dev)
1132 else 1129 else
1133 sdio_flags |= MMC_PM_WAKE_SDIO_IRQ; 1130 sdio_flags |= MMC_PM_WAKE_SDIO_IRQ;
1134 } 1131 }
1135 if (sdio_set_host_pm_flags(sdiodev->func[1], sdio_flags)) 1132 if (sdio_set_host_pm_flags(sdiodev->func1, sdio_flags))
1136 brcmf_err("Failed to set pm_flags %x\n", sdio_flags); 1133 brcmf_err("Failed to set pm_flags %x\n", sdio_flags);
1137 return 0; 1134 return 0;
1138} 1135}
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
index 63bb1abed577..81eb776218bb 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
@@ -979,7 +979,7 @@ static int brcmf_sdio_readshared(struct brcmf_sdio *bus,
979 struct sdpcm_shared_le sh_le; 979 struct sdpcm_shared_le sh_le;
980 __le32 addr_le; 980 __le32 addr_le;
981 981
982 sdio_claim_host(bus->sdiodev->func[1]); 982 sdio_claim_host(bus->sdiodev->func1);
983 brcmf_sdio_bus_sleep(bus, false, false); 983 brcmf_sdio_bus_sleep(bus, false, false);
984 984
985 /* 985 /*
@@ -1013,7 +1013,7 @@ static int brcmf_sdio_readshared(struct brcmf_sdio *bus,
1013 if (rv < 0) 1013 if (rv < 0)
1014 goto fail; 1014 goto fail;
1015 1015
1016 sdio_release_host(bus->sdiodev->func[1]); 1016 sdio_release_host(bus->sdiodev->func1);
1017 1017
1018 /* Endianness */ 1018 /* Endianness */
1019 sh->flags = le32_to_cpu(sh_le.flags); 1019 sh->flags = le32_to_cpu(sh_le.flags);
@@ -1035,7 +1035,7 @@ static int brcmf_sdio_readshared(struct brcmf_sdio *bus,
1035fail: 1035fail:
1036 brcmf_err("unable to obtain sdpcm_shared info: rv=%d (addr=0x%x)\n", 1036 brcmf_err("unable to obtain sdpcm_shared info: rv=%d (addr=0x%x)\n",
1037 rv, addr); 1037 rv, addr);
1038 sdio_release_host(bus->sdiodev->func[1]); 1038 sdio_release_host(bus->sdiodev->func1);
1039 return rv; 1039 return rv;
1040} 1040}
1041 1041
@@ -1157,7 +1157,7 @@ static void brcmf_sdio_rxfail(struct brcmf_sdio *bus, bool abort, bool rtx)
1157 rtx ? ", send NAK" : ""); 1157 rtx ? ", send NAK" : "");
1158 1158
1159 if (abort) 1159 if (abort)
1160 brcmf_sdiod_abort(bus->sdiodev, bus->sdiodev->func[2]); 1160 brcmf_sdiod_abort(bus->sdiodev, bus->sdiodev->func2);
1161 1161
1162 brcmf_sdiod_writeb(bus->sdiodev, SBSDIO_FUNC1_FRAMECTRL, SFC_RF_TERM, 1162 brcmf_sdiod_writeb(bus->sdiodev, SBSDIO_FUNC1_FRAMECTRL, SFC_RF_TERM,
1163 &err); 1163 &err);
@@ -1209,7 +1209,7 @@ static void brcmf_sdio_txfail(struct brcmf_sdio *bus)
1209 brcmf_err("sdio error, abort command and terminate frame\n"); 1209 brcmf_err("sdio error, abort command and terminate frame\n");
1210 bus->sdcnt.tx_sderrs++; 1210 bus->sdcnt.tx_sderrs++;
1211 1211
1212 brcmf_sdiod_abort(sdiodev, sdiodev->func[2]); 1212 brcmf_sdiod_abort(sdiodev, sdiodev->func2);
1213 brcmf_sdiod_writeb(sdiodev, SBSDIO_FUNC1_FRAMECTRL, SFC_WF_TERM, NULL); 1213 brcmf_sdiod_writeb(sdiodev, SBSDIO_FUNC1_FRAMECTRL, SFC_WF_TERM, NULL);
1214 bus->sdcnt.f1regdata++; 1214 bus->sdcnt.f1regdata++;
1215 1215
@@ -1565,10 +1565,10 @@ static u8 brcmf_sdio_rxglom(struct brcmf_sdio *bus, u8 rxseq)
1565 * read directly into the chained packet, or allocate a large 1565 * read directly into the chained packet, or allocate a large
1566 * packet and and copy into the chain. 1566 * packet and and copy into the chain.
1567 */ 1567 */
1568 sdio_claim_host(bus->sdiodev->func[1]); 1568 sdio_claim_host(bus->sdiodev->func1);
1569 errcode = brcmf_sdiod_recv_chain(bus->sdiodev, 1569 errcode = brcmf_sdiod_recv_chain(bus->sdiodev,
1570 &bus->glom, dlen); 1570 &bus->glom, dlen);
1571 sdio_release_host(bus->sdiodev->func[1]); 1571 sdio_release_host(bus->sdiodev->func1);
1572 bus->sdcnt.f2rxdata++; 1572 bus->sdcnt.f2rxdata++;
1573 1573
1574 /* On failure, kill the superframe */ 1574 /* On failure, kill the superframe */
@@ -1576,11 +1576,11 @@ static u8 brcmf_sdio_rxglom(struct brcmf_sdio *bus, u8 rxseq)
1576 brcmf_err("glom read of %d bytes failed: %d\n", 1576 brcmf_err("glom read of %d bytes failed: %d\n",
1577 dlen, errcode); 1577 dlen, errcode);
1578 1578
1579 sdio_claim_host(bus->sdiodev->func[1]); 1579 sdio_claim_host(bus->sdiodev->func1);
1580 brcmf_sdio_rxfail(bus, true, false); 1580 brcmf_sdio_rxfail(bus, true, false);
1581 bus->sdcnt.rxglomfail++; 1581 bus->sdcnt.rxglomfail++;
1582 brcmf_sdio_free_glom(bus); 1582 brcmf_sdio_free_glom(bus);
1583 sdio_release_host(bus->sdiodev->func[1]); 1583 sdio_release_host(bus->sdiodev->func1);
1584 return 0; 1584 return 0;
1585 } 1585 }
1586 1586
@@ -1590,10 +1590,10 @@ static u8 brcmf_sdio_rxglom(struct brcmf_sdio *bus, u8 rxseq)
1590 1590
1591 rd_new.seq_num = rxseq; 1591 rd_new.seq_num = rxseq;
1592 rd_new.len = dlen; 1592 rd_new.len = dlen;
1593 sdio_claim_host(bus->sdiodev->func[1]); 1593 sdio_claim_host(bus->sdiodev->func1);
1594 errcode = brcmf_sdio_hdparse(bus, pfirst->data, &rd_new, 1594 errcode = brcmf_sdio_hdparse(bus, pfirst->data, &rd_new,
1595 BRCMF_SDIO_FT_SUPER); 1595 BRCMF_SDIO_FT_SUPER);
1596 sdio_release_host(bus->sdiodev->func[1]); 1596 sdio_release_host(bus->sdiodev->func1);
1597 bus->cur_read.len = rd_new.len_nxtfrm << 4; 1597 bus->cur_read.len = rd_new.len_nxtfrm << 4;
1598 1598
1599 /* Remove superframe header, remember offset */ 1599 /* Remove superframe header, remember offset */
@@ -1609,10 +1609,10 @@ static u8 brcmf_sdio_rxglom(struct brcmf_sdio *bus, u8 rxseq)
1609 1609
1610 rd_new.len = pnext->len; 1610 rd_new.len = pnext->len;
1611 rd_new.seq_num = rxseq++; 1611 rd_new.seq_num = rxseq++;
1612 sdio_claim_host(bus->sdiodev->func[1]); 1612 sdio_claim_host(bus->sdiodev->func1);
1613 errcode = brcmf_sdio_hdparse(bus, pnext->data, &rd_new, 1613 errcode = brcmf_sdio_hdparse(bus, pnext->data, &rd_new,
1614 BRCMF_SDIO_FT_SUB); 1614 BRCMF_SDIO_FT_SUB);
1615 sdio_release_host(bus->sdiodev->func[1]); 1615 sdio_release_host(bus->sdiodev->func1);
1616 brcmf_dbg_hex_dump(BRCMF_GLOM_ON(), 1616 brcmf_dbg_hex_dump(BRCMF_GLOM_ON(),
1617 pnext->data, 32, "subframe:\n"); 1617 pnext->data, 32, "subframe:\n");
1618 1618
@@ -1621,11 +1621,11 @@ static u8 brcmf_sdio_rxglom(struct brcmf_sdio *bus, u8 rxseq)
1621 1621
1622 if (errcode) { 1622 if (errcode) {
1623 /* Terminate frame on error */ 1623 /* Terminate frame on error */
1624 sdio_claim_host(bus->sdiodev->func[1]); 1624 sdio_claim_host(bus->sdiodev->func1);
1625 brcmf_sdio_rxfail(bus, true, false); 1625 brcmf_sdio_rxfail(bus, true, false);
1626 bus->sdcnt.rxglomfail++; 1626 bus->sdcnt.rxglomfail++;
1627 brcmf_sdio_free_glom(bus); 1627 brcmf_sdio_free_glom(bus);
1628 sdio_release_host(bus->sdiodev->func[1]); 1628 sdio_release_host(bus->sdiodev->func1);
1629 bus->cur_read.len = 0; 1629 bus->cur_read.len = 0;
1630 return 0; 1630 return 0;
1631 } 1631 }
@@ -1833,7 +1833,7 @@ static uint brcmf_sdio_readframes(struct brcmf_sdio *bus, uint maxframes)
1833 1833
1834 rd->len_left = rd->len; 1834 rd->len_left = rd->len;
1835 /* read header first for unknow frame length */ 1835 /* read header first for unknow frame length */
1836 sdio_claim_host(bus->sdiodev->func[1]); 1836 sdio_claim_host(bus->sdiodev->func1);
1837 if (!rd->len) { 1837 if (!rd->len) {
1838 ret = brcmf_sdiod_recv_buf(bus->sdiodev, 1838 ret = brcmf_sdiod_recv_buf(bus->sdiodev,
1839 bus->rxhdr, BRCMF_FIRSTREAD); 1839 bus->rxhdr, BRCMF_FIRSTREAD);
@@ -1843,7 +1843,7 @@ static uint brcmf_sdio_readframes(struct brcmf_sdio *bus, uint maxframes)
1843 ret); 1843 ret);
1844 bus->sdcnt.rx_hdrfail++; 1844 bus->sdcnt.rx_hdrfail++;
1845 brcmf_sdio_rxfail(bus, true, true); 1845 brcmf_sdio_rxfail(bus, true, true);
1846 sdio_release_host(bus->sdiodev->func[1]); 1846 sdio_release_host(bus->sdiodev->func1);
1847 continue; 1847 continue;
1848 } 1848 }
1849 1849
@@ -1853,7 +1853,7 @@ static uint brcmf_sdio_readframes(struct brcmf_sdio *bus, uint maxframes)
1853 1853
1854 if (brcmf_sdio_hdparse(bus, bus->rxhdr, rd, 1854 if (brcmf_sdio_hdparse(bus, bus->rxhdr, rd,
1855 BRCMF_SDIO_FT_NORMAL)) { 1855 BRCMF_SDIO_FT_NORMAL)) {
1856 sdio_release_host(bus->sdiodev->func[1]); 1856 sdio_release_host(bus->sdiodev->func1);
1857 if (!bus->rxpending) 1857 if (!bus->rxpending)
1858 break; 1858 break;
1859 else 1859 else
@@ -1869,7 +1869,7 @@ static uint brcmf_sdio_readframes(struct brcmf_sdio *bus, uint maxframes)
1869 rd->len_nxtfrm = 0; 1869 rd->len_nxtfrm = 0;
1870 /* treat all packet as event if we don't know */ 1870 /* treat all packet as event if we don't know */
1871 rd->channel = SDPCM_EVENT_CHANNEL; 1871 rd->channel = SDPCM_EVENT_CHANNEL;
1872 sdio_release_host(bus->sdiodev->func[1]); 1872 sdio_release_host(bus->sdiodev->func1);
1873 continue; 1873 continue;
1874 } 1874 }
1875 rd->len_left = rd->len > BRCMF_FIRSTREAD ? 1875 rd->len_left = rd->len > BRCMF_FIRSTREAD ?
@@ -1886,7 +1886,7 @@ static uint brcmf_sdio_readframes(struct brcmf_sdio *bus, uint maxframes)
1886 brcmf_err("brcmu_pkt_buf_get_skb failed\n"); 1886 brcmf_err("brcmu_pkt_buf_get_skb failed\n");
1887 brcmf_sdio_rxfail(bus, false, 1887 brcmf_sdio_rxfail(bus, false,
1888 RETRYCHAN(rd->channel)); 1888 RETRYCHAN(rd->channel));
1889 sdio_release_host(bus->sdiodev->func[1]); 1889 sdio_release_host(bus->sdiodev->func1);
1890 continue; 1890 continue;
1891 } 1891 }
1892 skb_pull(pkt, head_read); 1892 skb_pull(pkt, head_read);
@@ -1894,16 +1894,16 @@ static uint brcmf_sdio_readframes(struct brcmf_sdio *bus, uint maxframes)
1894 1894
1895 ret = brcmf_sdiod_recv_pkt(bus->sdiodev, pkt); 1895 ret = brcmf_sdiod_recv_pkt(bus->sdiodev, pkt);
1896 bus->sdcnt.f2rxdata++; 1896 bus->sdcnt.f2rxdata++;
1897 sdio_release_host(bus->sdiodev->func[1]); 1897 sdio_release_host(bus->sdiodev->func1);
1898 1898
1899 if (ret < 0) { 1899 if (ret < 0) {
1900 brcmf_err("read %d bytes from channel %d failed: %d\n", 1900 brcmf_err("read %d bytes from channel %d failed: %d\n",
1901 rd->len, rd->channel, ret); 1901 rd->len, rd->channel, ret);
1902 brcmu_pkt_buf_free_skb(pkt); 1902 brcmu_pkt_buf_free_skb(pkt);
1903 sdio_claim_host(bus->sdiodev->func[1]); 1903 sdio_claim_host(bus->sdiodev->func1);
1904 brcmf_sdio_rxfail(bus, true, 1904 brcmf_sdio_rxfail(bus, true,
1905 RETRYCHAN(rd->channel)); 1905 RETRYCHAN(rd->channel));
1906 sdio_release_host(bus->sdiodev->func[1]); 1906 sdio_release_host(bus->sdiodev->func1);
1907 continue; 1907 continue;
1908 } 1908 }
1909 1909
@@ -1914,7 +1914,7 @@ static uint brcmf_sdio_readframes(struct brcmf_sdio *bus, uint maxframes)
1914 } else { 1914 } else {
1915 memcpy(bus->rxhdr, pkt->data, SDPCM_HDRLEN); 1915 memcpy(bus->rxhdr, pkt->data, SDPCM_HDRLEN);
1916 rd_new.seq_num = rd->seq_num; 1916 rd_new.seq_num = rd->seq_num;
1917 sdio_claim_host(bus->sdiodev->func[1]); 1917 sdio_claim_host(bus->sdiodev->func1);
1918 if (brcmf_sdio_hdparse(bus, bus->rxhdr, &rd_new, 1918 if (brcmf_sdio_hdparse(bus, bus->rxhdr, &rd_new,
1919 BRCMF_SDIO_FT_NORMAL)) { 1919 BRCMF_SDIO_FT_NORMAL)) {
1920 rd->len = 0; 1920 rd->len = 0;
@@ -1927,11 +1927,11 @@ static uint brcmf_sdio_readframes(struct brcmf_sdio *bus, uint maxframes)
1927 roundup(rd_new.len, 16) >> 4); 1927 roundup(rd_new.len, 16) >> 4);
1928 rd->len = 0; 1928 rd->len = 0;
1929 brcmf_sdio_rxfail(bus, true, true); 1929 brcmf_sdio_rxfail(bus, true, true);
1930 sdio_release_host(bus->sdiodev->func[1]); 1930 sdio_release_host(bus->sdiodev->func1);
1931 brcmu_pkt_buf_free_skb(pkt); 1931 brcmu_pkt_buf_free_skb(pkt);
1932 continue; 1932 continue;
1933 } 1933 }
1934 sdio_release_host(bus->sdiodev->func[1]); 1934 sdio_release_host(bus->sdiodev->func1);
1935 rd->len_nxtfrm = rd_new.len_nxtfrm; 1935 rd->len_nxtfrm = rd_new.len_nxtfrm;
1936 rd->channel = rd_new.channel; 1936 rd->channel = rd_new.channel;
1937 rd->dat_offset = rd_new.dat_offset; 1937 rd->dat_offset = rd_new.dat_offset;
@@ -1947,9 +1947,9 @@ static uint brcmf_sdio_readframes(struct brcmf_sdio *bus, uint maxframes)
1947 rd_new.seq_num); 1947 rd_new.seq_num);
1948 /* Force retry w/normal header read */ 1948 /* Force retry w/normal header read */
1949 rd->len = 0; 1949 rd->len = 0;
1950 sdio_claim_host(bus->sdiodev->func[1]); 1950 sdio_claim_host(bus->sdiodev->func1);
1951 brcmf_sdio_rxfail(bus, false, true); 1951 brcmf_sdio_rxfail(bus, false, true);
1952 sdio_release_host(bus->sdiodev->func[1]); 1952 sdio_release_host(bus->sdiodev->func1);
1953 brcmu_pkt_buf_free_skb(pkt); 1953 brcmu_pkt_buf_free_skb(pkt);
1954 continue; 1954 continue;
1955 } 1955 }
@@ -1972,9 +1972,9 @@ static uint brcmf_sdio_readframes(struct brcmf_sdio *bus, uint maxframes)
1972 } else { 1972 } else {
1973 brcmf_err("%s: glom superframe w/o " 1973 brcmf_err("%s: glom superframe w/o "
1974 "descriptor!\n", __func__); 1974 "descriptor!\n", __func__);
1975 sdio_claim_host(bus->sdiodev->func[1]); 1975 sdio_claim_host(bus->sdiodev->func1);
1976 brcmf_sdio_rxfail(bus, false, false); 1976 brcmf_sdio_rxfail(bus, false, false);
1977 sdio_release_host(bus->sdiodev->func[1]); 1977 sdio_release_host(bus->sdiodev->func1);
1978 } 1978 }
1979 /* prepare the descriptor for the next read */ 1979 /* prepare the descriptor for the next read */
1980 rd->len = rd->len_nxtfrm << 4; 1980 rd->len = rd->len_nxtfrm << 4;
@@ -2072,7 +2072,7 @@ static int brcmf_sdio_txpkt_prep_sg(struct brcmf_sdio *bus,
2072 int ntail, ret; 2072 int ntail, ret;
2073 2073
2074 sdiodev = bus->sdiodev; 2074 sdiodev = bus->sdiodev;
2075 blksize = sdiodev->func[2]->cur_blksize; 2075 blksize = sdiodev->func2->cur_blksize;
2076 /* sg entry alignment should be a divisor of block size */ 2076 /* sg entry alignment should be a divisor of block size */
2077 WARN_ON(blksize % bus->sgentry_align); 2077 WARN_ON(blksize % bus->sgentry_align);
2078 2078
@@ -2251,14 +2251,14 @@ static int brcmf_sdio_txpkt(struct brcmf_sdio *bus, struct sk_buff_head *pktq,
2251 if (ret) 2251 if (ret)
2252 goto done; 2252 goto done;
2253 2253
2254 sdio_claim_host(bus->sdiodev->func[1]); 2254 sdio_claim_host(bus->sdiodev->func1);
2255 ret = brcmf_sdiod_send_pkt(bus->sdiodev, pktq); 2255 ret = brcmf_sdiod_send_pkt(bus->sdiodev, pktq);
2256 bus->sdcnt.f2txdata++; 2256 bus->sdcnt.f2txdata++;
2257 2257
2258 if (ret < 0) 2258 if (ret < 0)
2259 brcmf_sdio_txfail(bus); 2259 brcmf_sdio_txfail(bus);
2260 2260
2261 sdio_release_host(bus->sdiodev->func[1]); 2261 sdio_release_host(bus->sdiodev->func1);
2262 2262
2263done: 2263done:
2264 brcmf_sdio_txpkt_postp(bus, pktq); 2264 brcmf_sdio_txpkt_postp(bus, pktq);
@@ -2314,10 +2314,11 @@ static uint brcmf_sdio_sendfromq(struct brcmf_sdio *bus, uint maxframes)
2314 /* In poll mode, need to check for other events */ 2314 /* In poll mode, need to check for other events */
2315 if (!bus->intr) { 2315 if (!bus->intr) {
2316 /* Check device status, signal pending interrupt */ 2316 /* Check device status, signal pending interrupt */
2317 sdio_claim_host(bus->sdiodev->func[1]); 2317 sdio_claim_host(bus->sdiodev->func1);
2318 intstatus = brcmf_sdiod_readl(bus->sdiodev, 2318 intstatus = brcmf_sdiod_readl(bus->sdiodev,
2319 intstat_addr, &ret); 2319 intstat_addr, &ret);
2320 sdio_release_host(bus->sdiodev->func[1]); 2320 sdio_release_host(bus->sdiodev->func1);
2321
2321 bus->sdcnt.f2txdata++; 2322 bus->sdcnt.f2txdata++;
2322 if (ret != 0) 2323 if (ret != 0)
2323 break; 2324 break;
@@ -2417,7 +2418,7 @@ static void brcmf_sdio_bus_stop(struct device *dev)
2417 } 2418 }
2418 2419
2419 if (sdiodev->state != BRCMF_SDIOD_NOMEDIUM) { 2420 if (sdiodev->state != BRCMF_SDIOD_NOMEDIUM) {
2420 sdio_claim_host(sdiodev->func[1]); 2421 sdio_claim_host(sdiodev->func1);
2421 2422
2422 /* Enable clock for device interrupts */ 2423 /* Enable clock for device interrupts */
2423 brcmf_sdio_bus_sleep(bus, false, false); 2424 brcmf_sdio_bus_sleep(bus, false, false);
@@ -2441,13 +2442,13 @@ static void brcmf_sdio_bus_stop(struct device *dev)
2441 2442
2442 /* Turn off the bus (F2), free any pending packets */ 2443 /* Turn off the bus (F2), free any pending packets */
2443 brcmf_dbg(INTR, "disable SDIO interrupts\n"); 2444 brcmf_dbg(INTR, "disable SDIO interrupts\n");
2444 sdio_disable_func(sdiodev->func[2]); 2445 sdio_disable_func(sdiodev->func2);
2445 2446
2446 /* Clear any pending interrupts now that F2 is disabled */ 2447 /* Clear any pending interrupts now that F2 is disabled */
2447 brcmf_sdiod_writel(sdiodev, core->base + SD_REG(intstatus), 2448 brcmf_sdiod_writel(sdiodev, core->base + SD_REG(intstatus),
2448 local_hostintmask, NULL); 2449 local_hostintmask, NULL);
2449 2450
2450 sdio_release_host(sdiodev->func[1]); 2451 sdio_release_host(sdiodev->func1);
2451 } 2452 }
2452 /* Clear the data packet queues */ 2453 /* Clear the data packet queues */
2453 brcmu_pktq_flush(&bus->txq, true, NULL, NULL); 2454 brcmu_pktq_flush(&bus->txq, true, NULL, NULL);
@@ -2522,7 +2523,7 @@ static void brcmf_sdio_dpc(struct brcmf_sdio *bus)
2522 2523
2523 brcmf_dbg(TRACE, "Enter\n"); 2524 brcmf_dbg(TRACE, "Enter\n");
2524 2525
2525 sdio_claim_host(bus->sdiodev->func[1]); 2526 sdio_claim_host(bus->sdiodev->func1);
2526 2527
2527 /* If waiting for HTAVAIL, check status */ 2528 /* If waiting for HTAVAIL, check status */
2528 if (!bus->sr_enabled && bus->clkstate == CLK_PENDING) { 2529 if (!bus->sr_enabled && bus->clkstate == CLK_PENDING) {
@@ -2585,7 +2586,7 @@ static void brcmf_sdio_dpc(struct brcmf_sdio *bus)
2585 intstatus |= brcmf_sdio_hostmail(bus); 2586 intstatus |= brcmf_sdio_hostmail(bus);
2586 } 2587 }
2587 2588
2588 sdio_release_host(bus->sdiodev->func[1]); 2589 sdio_release_host(bus->sdiodev->func1);
2589 2590
2590 /* Generally don't ask for these, can get CRC errors... */ 2591 /* Generally don't ask for these, can get CRC errors... */
2591 if (intstatus & I_WR_OOSYNC) { 2592 if (intstatus & I_WR_OOSYNC) {
@@ -2628,7 +2629,7 @@ static void brcmf_sdio_dpc(struct brcmf_sdio *bus)
2628 2629
2629 if (bus->ctrl_frame_stat && (bus->clkstate == CLK_AVAIL) && 2630 if (bus->ctrl_frame_stat && (bus->clkstate == CLK_AVAIL) &&
2630 data_ok(bus)) { 2631 data_ok(bus)) {
2631 sdio_claim_host(bus->sdiodev->func[1]); 2632 sdio_claim_host(bus->sdiodev->func1);
2632 if (bus->ctrl_frame_stat) { 2633 if (bus->ctrl_frame_stat) {
2633 err = brcmf_sdio_tx_ctrlframe(bus, bus->ctrl_frame_buf, 2634 err = brcmf_sdio_tx_ctrlframe(bus, bus->ctrl_frame_buf,
2634 bus->ctrl_frame_len); 2635 bus->ctrl_frame_len);
@@ -2636,7 +2637,7 @@ static void brcmf_sdio_dpc(struct brcmf_sdio *bus)
2636 wmb(); 2637 wmb();
2637 bus->ctrl_frame_stat = false; 2638 bus->ctrl_frame_stat = false;
2638 } 2639 }
2639 sdio_release_host(bus->sdiodev->func[1]); 2640 sdio_release_host(bus->sdiodev->func1);
2640 brcmf_sdio_wait_event_wakeup(bus); 2641 brcmf_sdio_wait_event_wakeup(bus);
2641 } 2642 }
2642 /* Send queued frames (limit 1 if rx may still be pending) */ 2643 /* Send queued frames (limit 1 if rx may still be pending) */
@@ -2652,14 +2653,14 @@ static void brcmf_sdio_dpc(struct brcmf_sdio *bus)
2652 brcmf_err("failed backplane access over SDIO, halting operation\n"); 2653 brcmf_err("failed backplane access over SDIO, halting operation\n");
2653 atomic_set(&bus->intstatus, 0); 2654 atomic_set(&bus->intstatus, 0);
2654 if (bus->ctrl_frame_stat) { 2655 if (bus->ctrl_frame_stat) {
2655 sdio_claim_host(bus->sdiodev->func[1]); 2656 sdio_claim_host(bus->sdiodev->func1);
2656 if (bus->ctrl_frame_stat) { 2657 if (bus->ctrl_frame_stat) {
2657 bus->ctrl_frame_err = -ENODEV; 2658 bus->ctrl_frame_err = -ENODEV;
2658 wmb(); 2659 wmb();
2659 bus->ctrl_frame_stat = false; 2660 bus->ctrl_frame_stat = false;
2660 brcmf_sdio_wait_event_wakeup(bus); 2661 brcmf_sdio_wait_event_wakeup(bus);
2661 } 2662 }
2662 sdio_release_host(bus->sdiodev->func[1]); 2663 sdio_release_host(bus->sdiodev->func1);
2663 } 2664 }
2664 } else if (atomic_read(&bus->intstatus) || 2665 } else if (atomic_read(&bus->intstatus) ||
2665 atomic_read(&bus->ipend) > 0 || 2666 atomic_read(&bus->ipend) > 0 ||
@@ -2874,13 +2875,13 @@ brcmf_sdio_bus_txctl(struct device *dev, unsigned char *msg, uint msglen)
2874 CTL_DONE_TIMEOUT); 2875 CTL_DONE_TIMEOUT);
2875 ret = 0; 2876 ret = 0;
2876 if (bus->ctrl_frame_stat) { 2877 if (bus->ctrl_frame_stat) {
2877 sdio_claim_host(bus->sdiodev->func[1]); 2878 sdio_claim_host(bus->sdiodev->func1);
2878 if (bus->ctrl_frame_stat) { 2879 if (bus->ctrl_frame_stat) {
2879 brcmf_dbg(SDIO, "ctrl_frame timeout\n"); 2880 brcmf_dbg(SDIO, "ctrl_frame timeout\n");
2880 bus->ctrl_frame_stat = false; 2881 bus->ctrl_frame_stat = false;
2881 ret = -ETIMEDOUT; 2882 ret = -ETIMEDOUT;
2882 } 2883 }
2883 sdio_release_host(bus->sdiodev->func[1]); 2884 sdio_release_host(bus->sdiodev->func1);
2884 } 2885 }
2885 if (!ret) { 2886 if (!ret) {
2886 brcmf_dbg(SDIO, "ctrl_frame complete, err=%d\n", 2887 brcmf_dbg(SDIO, "ctrl_frame complete, err=%d\n",
@@ -3004,7 +3005,7 @@ static int brcmf_sdio_assert_info(struct seq_file *seq, struct brcmf_sdio *bus,
3004 return 0; 3005 return 0;
3005 } 3006 }
3006 3007
3007 sdio_claim_host(bus->sdiodev->func[1]); 3008 sdio_claim_host(bus->sdiodev->func1);
3008 if (sh->assert_file_addr != 0) { 3009 if (sh->assert_file_addr != 0) {
3009 error = brcmf_sdiod_ramrw(bus->sdiodev, false, 3010 error = brcmf_sdiod_ramrw(bus->sdiodev, false,
3010 sh->assert_file_addr, (u8 *)file, 80); 3011 sh->assert_file_addr, (u8 *)file, 80);
@@ -3017,7 +3018,7 @@ static int brcmf_sdio_assert_info(struct seq_file *seq, struct brcmf_sdio *bus,
3017 if (error < 0) 3018 if (error < 0)
3018 return error; 3019 return error;
3019 } 3020 }
3020 sdio_release_host(bus->sdiodev->func[1]); 3021 sdio_release_host(bus->sdiodev->func1);
3021 3022
3022 seq_printf(seq, "dongle assert: %s:%d: assert(%s)\n", 3023 seq_printf(seq, "dongle assert: %s:%d: assert(%s)\n",
3023 file, sh->assert_line, expr); 3024 file, sh->assert_line, expr);
@@ -3291,7 +3292,7 @@ static int brcmf_sdio_download_firmware(struct brcmf_sdio *bus,
3291 int bcmerror; 3292 int bcmerror;
3292 u32 rstvec; 3293 u32 rstvec;
3293 3294
3294 sdio_claim_host(bus->sdiodev->func[1]); 3295 sdio_claim_host(bus->sdiodev->func1);
3295 brcmf_sdio_clkctl(bus, CLK_AVAIL, false); 3296 brcmf_sdio_clkctl(bus, CLK_AVAIL, false);
3296 3297
3297 rstvec = get_unaligned_le32(fw->data); 3298 rstvec = get_unaligned_le32(fw->data);
@@ -3320,7 +3321,7 @@ static int brcmf_sdio_download_firmware(struct brcmf_sdio *bus,
3320 3321
3321err: 3322err:
3322 brcmf_sdio_clkctl(bus, CLK_SDONLY, false); 3323 brcmf_sdio_clkctl(bus, CLK_SDONLY, false);
3323 sdio_release_host(bus->sdiodev->func[1]); 3324 sdio_release_host(bus->sdiodev->func1);
3324 return bcmerror; 3325 return bcmerror;
3325} 3326}
3326 3327
@@ -3435,7 +3436,7 @@ static int brcmf_sdio_bus_preinit(struct device *dev)
3435 if (sdiodev->sg_support) { 3436 if (sdiodev->sg_support) {
3436 bus->txglom = false; 3437 bus->txglom = false;
3437 value = 1; 3438 value = 1;
3438 pad_size = bus->sdiodev->func[2]->cur_blksize << 1; 3439 pad_size = bus->sdiodev->func2->cur_blksize << 1;
3439 err = brcmf_iovar_data_set(bus->sdiodev->dev, "bus:rxglom", 3440 err = brcmf_iovar_data_set(bus->sdiodev->dev, "bus:rxglom",
3440 &value, sizeof(u32)); 3441 &value, sizeof(u32));
3441 if (err < 0) { 3442 if (err < 0) {
@@ -3477,7 +3478,7 @@ static int brcmf_sdio_bus_get_memdump(struct device *dev, void *data,
3477 3478
3478 address = bus->ci->rambase; 3479 address = bus->ci->rambase;
3479 offset = err = 0; 3480 offset = err = 0;
3480 sdio_claim_host(sdiodev->func[1]); 3481 sdio_claim_host(sdiodev->func1);
3481 while (offset < mem_size) { 3482 while (offset < mem_size) {
3482 len = ((offset + MEMBLOCK) < mem_size) ? MEMBLOCK : 3483 len = ((offset + MEMBLOCK) < mem_size) ? MEMBLOCK :
3483 mem_size - offset; 3484 mem_size - offset;
@@ -3493,7 +3494,7 @@ static int brcmf_sdio_bus_get_memdump(struct device *dev, void *data,
3493 } 3494 }
3494 3495
3495done: 3496done:
3496 sdio_release_host(sdiodev->func[1]); 3497 sdio_release_host(sdiodev->func1);
3497 return err; 3498 return err;
3498} 3499}
3499 3500
@@ -3550,11 +3551,10 @@ static void brcmf_sdio_bus_watchdog(struct brcmf_sdio *bus)
3550 if (!bus->dpc_triggered) { 3551 if (!bus->dpc_triggered) {
3551 u8 devpend; 3552 u8 devpend;
3552 3553
3553 sdio_claim_host(bus->sdiodev->func[1]); 3554 sdio_claim_host(bus->sdiodev->func1);
3554 devpend = brcmf_sdiod_func0_rb(bus->sdiodev, 3555 devpend = brcmf_sdiod_func0_rb(bus->sdiodev,
3555 SDIO_CCCR_INTx, 3556 SDIO_CCCR_INTx, NULL);
3556 NULL); 3557 sdio_release_host(bus->sdiodev->func1);
3557 sdio_release_host(bus->sdiodev->func[1]);
3558 intstatus = devpend & (INTR_STATUS_FUNC1 | 3558 intstatus = devpend & (INTR_STATUS_FUNC1 |
3559 INTR_STATUS_FUNC2); 3559 INTR_STATUS_FUNC2);
3560 } 3560 }
@@ -3580,13 +3580,13 @@ static void brcmf_sdio_bus_watchdog(struct brcmf_sdio *bus)
3580 bus->console.count += jiffies_to_msecs(BRCMF_WD_POLL); 3580 bus->console.count += jiffies_to_msecs(BRCMF_WD_POLL);
3581 if (bus->console.count >= bus->console_interval) { 3581 if (bus->console.count >= bus->console_interval) {
3582 bus->console.count -= bus->console_interval; 3582 bus->console.count -= bus->console_interval;
3583 sdio_claim_host(bus->sdiodev->func[1]); 3583 sdio_claim_host(bus->sdiodev->func1);
3584 /* Make sure backplane clock is on */ 3584 /* Make sure backplane clock is on */
3585 brcmf_sdio_bus_sleep(bus, false, false); 3585 brcmf_sdio_bus_sleep(bus, false, false);
3586 if (brcmf_sdio_readconsole(bus) < 0) 3586 if (brcmf_sdio_readconsole(bus) < 0)
3587 /* stop on error */ 3587 /* stop on error */
3588 bus->console_interval = 0; 3588 bus->console_interval = 0;
3589 sdio_release_host(bus->sdiodev->func[1]); 3589 sdio_release_host(bus->sdiodev->func1);
3590 } 3590 }
3591 } 3591 }
3592#endif /* DEBUG */ 3592#endif /* DEBUG */
@@ -3599,11 +3599,11 @@ static void brcmf_sdio_bus_watchdog(struct brcmf_sdio *bus)
3599 bus->idlecount++; 3599 bus->idlecount++;
3600 if (bus->idlecount > bus->idletime) { 3600 if (bus->idlecount > bus->idletime) {
3601 brcmf_dbg(SDIO, "idle\n"); 3601 brcmf_dbg(SDIO, "idle\n");
3602 sdio_claim_host(bus->sdiodev->func[1]); 3602 sdio_claim_host(bus->sdiodev->func1);
3603 brcmf_sdio_wd_timer(bus, false); 3603 brcmf_sdio_wd_timer(bus, false);
3604 bus->idlecount = 0; 3604 bus->idlecount = 0;
3605 brcmf_sdio_bus_sleep(bus, true, false); 3605 brcmf_sdio_bus_sleep(bus, true, false);
3606 sdio_release_host(bus->sdiodev->func[1]); 3606 sdio_release_host(bus->sdiodev->func1);
3607 } 3607 }
3608 } else { 3608 } else {
3609 bus->idlecount = 0; 3609 bus->idlecount = 0;
@@ -3773,8 +3773,8 @@ static u32 brcmf_sdio_buscore_read32(void *ctx, u32 addr)
3773 val = brcmf_sdiod_readl(sdiodev, addr, NULL); 3773 val = brcmf_sdiod_readl(sdiodev, addr, NULL);
3774 3774
3775 if (addr == CORE_CC_REG(SI_ENUM_BASE, chipid) && 3775 if (addr == CORE_CC_REG(SI_ENUM_BASE, chipid) &&
3776 (sdiodev->func[1]->device == SDIO_DEVICE_ID_BROADCOM_4339 || 3776 (sdiodev->func1->device == SDIO_DEVICE_ID_BROADCOM_4339 ||
3777 sdiodev->func[1]->device == SDIO_DEVICE_ID_BROADCOM_4335_4339)) { 3777 sdiodev->func1->device == SDIO_DEVICE_ID_BROADCOM_4335_4339)) {
3778 rev = (val & CID_REV_MASK) >> CID_REV_SHIFT; 3778 rev = (val & CID_REV_MASK) >> CID_REV_SHIFT;
3779 if (rev >= 2) { 3779 if (rev >= 2) {
3780 val &= ~CID_ID_MASK; 3780 val &= ~CID_ID_MASK;
@@ -3810,7 +3810,7 @@ brcmf_sdio_probe_attach(struct brcmf_sdio *bus)
3810 u32 drivestrength; 3810 u32 drivestrength;
3811 3811
3812 sdiodev = bus->sdiodev; 3812 sdiodev = bus->sdiodev;
3813 sdio_claim_host(sdiodev->func[1]); 3813 sdio_claim_host(sdiodev->func1);
3814 3814
3815 pr_debug("F1 signature read @0x18000000=0x%4x\n", 3815 pr_debug("F1 signature read @0x18000000=0x%4x\n",
3816 brcmf_sdiod_readl(sdiodev, SI_ENUM_BASE, NULL)); 3816 brcmf_sdiod_readl(sdiodev, SI_ENUM_BASE, NULL));
@@ -3877,8 +3877,8 @@ brcmf_sdio_probe_attach(struct brcmf_sdio *bus)
3877 /* wowl can be supported when KEEP_POWER is true and (WAKE_SDIO_IRQ 3877 /* wowl can be supported when KEEP_POWER is true and (WAKE_SDIO_IRQ
3878 * is true or when platform data OOB irq is true). 3878 * is true or when platform data OOB irq is true).
3879 */ 3879 */
3880 if ((sdio_get_host_pm_caps(sdiodev->func[1]) & MMC_PM_KEEP_POWER) && 3880 if ((sdio_get_host_pm_caps(sdiodev->func1) & MMC_PM_KEEP_POWER) &&
3881 ((sdio_get_host_pm_caps(sdiodev->func[1]) & MMC_PM_WAKE_SDIO_IRQ) || 3881 ((sdio_get_host_pm_caps(sdiodev->func1) & MMC_PM_WAKE_SDIO_IRQ) ||
3882 (sdiodev->settings->bus.sdio.oob_irq_supported))) 3882 (sdiodev->settings->bus.sdio.oob_irq_supported)))
3883 sdiodev->bus_if->wowl_supported = true; 3883 sdiodev->bus_if->wowl_supported = true;
3884#endif 3884#endif
@@ -3917,7 +3917,7 @@ brcmf_sdio_probe_attach(struct brcmf_sdio *bus)
3917 if (err) 3917 if (err)
3918 goto fail; 3918 goto fail;
3919 3919
3920 sdio_release_host(sdiodev->func[1]); 3920 sdio_release_host(sdiodev->func1);
3921 3921
3922 brcmu_pktq_init(&bus->txq, (PRIOMASK + 1), TXQLEN); 3922 brcmu_pktq_init(&bus->txq, (PRIOMASK + 1), TXQLEN);
3923 3923
@@ -3938,7 +3938,7 @@ brcmf_sdio_probe_attach(struct brcmf_sdio *bus)
3938 return true; 3938 return true;
3939 3939
3940fail: 3940fail:
3941 sdio_release_host(sdiodev->func[1]); 3941 sdio_release_host(sdiodev->func1);
3942 return false; 3942 return false;
3943} 3943}
3944 3944
@@ -4044,7 +4044,7 @@ static void brcmf_sdio_firmware_callback(struct device *dev, int err,
4044 bus->sdcnt.tickcnt = 0; 4044 bus->sdcnt.tickcnt = 0;
4045 brcmf_sdio_wd_timer(bus, true); 4045 brcmf_sdio_wd_timer(bus, true);
4046 4046
4047 sdio_claim_host(sdiodev->func[1]); 4047 sdio_claim_host(sdiodev->func1);
4048 4048
4049 /* Make sure backplane clock is on, needed to generate F2 interrupt */ 4049 /* Make sure backplane clock is on, needed to generate F2 interrupt */
4050 brcmf_sdio_clkctl(bus, CLK_AVAIL, false); 4050 brcmf_sdio_clkctl(bus, CLK_AVAIL, false);
@@ -4066,7 +4066,7 @@ static void brcmf_sdio_firmware_callback(struct device *dev, int err,
4066 brcmf_sdiod_writel(sdiod, core->base + SD_REG(tosbmailboxdata), 4066 brcmf_sdiod_writel(sdiod, core->base + SD_REG(tosbmailboxdata),
4067 SDPCM_PROT_VERSION << SMB_DATA_VERSION_SHIFT, NULL); 4067 SDPCM_PROT_VERSION << SMB_DATA_VERSION_SHIFT, NULL);
4068 4068
4069 err = sdio_enable_func(sdiodev->func[2]); 4069 err = sdio_enable_func(sdiodev->func2);
4070 4070
4071 brcmf_dbg(INFO, "enable F2: err=%d\n", err); 4071 brcmf_dbg(INFO, "enable F2: err=%d\n", err);
4072 4072
@@ -4081,7 +4081,7 @@ static void brcmf_sdio_firmware_callback(struct device *dev, int err,
4081 brcmf_sdiod_writeb(sdiodev, SBSDIO_WATERMARK, 8, &err); 4081 brcmf_sdiod_writeb(sdiodev, SBSDIO_WATERMARK, 8, &err);
4082 } else { 4082 } else {
4083 /* Disable F2 again */ 4083 /* Disable F2 again */
4084 sdio_disable_func(sdiodev->func[2]); 4084 sdio_disable_func(sdiodev->func2);
4085 goto release; 4085 goto release;
4086 } 4086 }
4087 4087
@@ -4106,7 +4106,7 @@ static void brcmf_sdio_firmware_callback(struct device *dev, int err,
4106 if (err != 0) 4106 if (err != 0)
4107 brcmf_sdio_clkctl(bus, CLK_NONE, false); 4107 brcmf_sdio_clkctl(bus, CLK_NONE, false);
4108 4108
4109 sdio_release_host(sdiodev->func[1]); 4109 sdio_release_host(sdiodev->func1);
4110 4110
4111 err = brcmf_bus_started(dev); 4111 err = brcmf_bus_started(dev);
4112 if (err != 0) { 4112 if (err != 0) {
@@ -4116,10 +4116,10 @@ static void brcmf_sdio_firmware_callback(struct device *dev, int err,
4116 return; 4116 return;
4117 4117
4118release: 4118release:
4119 sdio_release_host(sdiodev->func[1]); 4119 sdio_release_host(sdiodev->func1);
4120fail: 4120fail:
4121 brcmf_dbg(TRACE, "failed: dev=%s, err=%d\n", dev_name(dev), err); 4121 brcmf_dbg(TRACE, "failed: dev=%s, err=%d\n", dev_name(dev), err);
4122 device_release_driver(&sdiodev->func[2]->dev); 4122 device_release_driver(&sdiodev->func2->dev);
4123 device_release_driver(dev); 4123 device_release_driver(dev);
4124} 4124}
4125 4125
@@ -4146,7 +4146,7 @@ struct brcmf_sdio *brcmf_sdio_probe(struct brcmf_sdio_dev *sdiodev)
4146 4146
4147 /* single-threaded workqueue */ 4147 /* single-threaded workqueue */
4148 wq = alloc_ordered_workqueue("brcmf_wq/%s", WQ_MEM_RECLAIM, 4148 wq = alloc_ordered_workqueue("brcmf_wq/%s", WQ_MEM_RECLAIM,
4149 dev_name(&sdiodev->func[1]->dev)); 4149 dev_name(&sdiodev->func1->dev));
4150 if (!wq) { 4150 if (!wq) {
4151 brcmf_err("insufficient memory to create txworkqueue\n"); 4151 brcmf_err("insufficient memory to create txworkqueue\n");
4152 goto fail; 4152 goto fail;
@@ -4172,7 +4172,7 @@ struct brcmf_sdio *brcmf_sdio_probe(struct brcmf_sdio_dev *sdiodev)
4172 init_completion(&bus->watchdog_wait); 4172 init_completion(&bus->watchdog_wait);
4173 bus->watchdog_tsk = kthread_run(brcmf_sdio_watchdog_thread, 4173 bus->watchdog_tsk = kthread_run(brcmf_sdio_watchdog_thread,
4174 bus, "brcmf_wdog/%s", 4174 bus, "brcmf_wdog/%s",
4175 dev_name(&sdiodev->func[1]->dev)); 4175 dev_name(&sdiodev->func1->dev));
4176 if (IS_ERR(bus->watchdog_tsk)) { 4176 if (IS_ERR(bus->watchdog_tsk)) {
4177 pr_warn("brcmf_watchdog thread failed to start\n"); 4177 pr_warn("brcmf_watchdog thread failed to start\n");
4178 bus->watchdog_tsk = NULL; 4178 bus->watchdog_tsk = NULL;
@@ -4198,7 +4198,7 @@ struct brcmf_sdio *brcmf_sdio_probe(struct brcmf_sdio_dev *sdiodev)
4198 } 4198 }
4199 4199
4200 /* Query the F2 block size, set roundup accordingly */ 4200 /* Query the F2 block size, set roundup accordingly */
4201 bus->blocksize = bus->sdiodev->func[2]->cur_blksize; 4201 bus->blocksize = bus->sdiodev->func2->cur_blksize;
4202 bus->roundup = min(max_roundup, bus->blocksize); 4202 bus->roundup = min(max_roundup, bus->blocksize);
4203 4203
4204 /* Allocate buffers */ 4204 /* Allocate buffers */
@@ -4214,17 +4214,17 @@ struct brcmf_sdio *brcmf_sdio_probe(struct brcmf_sdio_dev *sdiodev)
4214 } 4214 }
4215 } 4215 }
4216 4216
4217 sdio_claim_host(bus->sdiodev->func[1]); 4217 sdio_claim_host(bus->sdiodev->func1);
4218 4218
4219 /* Disable F2 to clear any intermediate frame state on the dongle */ 4219 /* Disable F2 to clear any intermediate frame state on the dongle */
4220 sdio_disable_func(bus->sdiodev->func[2]); 4220 sdio_disable_func(bus->sdiodev->func2);
4221 4221
4222 bus->rxflow = false; 4222 bus->rxflow = false;
4223 4223
4224 /* Done with backplane-dependent accesses, can drop clock... */ 4224 /* Done with backplane-dependent accesses, can drop clock... */
4225 brcmf_sdiod_writeb(bus->sdiodev, SBSDIO_FUNC1_CHIPCLKCSR, 0, NULL); 4225 brcmf_sdiod_writeb(bus->sdiodev, SBSDIO_FUNC1_CHIPCLKCSR, 0, NULL);
4226 4226
4227 sdio_release_host(bus->sdiodev->func[1]); 4227 sdio_release_host(bus->sdiodev->func1);
4228 4228
4229 /* ...and initialize clock/power states */ 4229 /* ...and initialize clock/power states */
4230 bus->clkstate = CLK_SDONLY; 4230 bus->clkstate = CLK_SDONLY;
@@ -4276,7 +4276,7 @@ void brcmf_sdio_remove(struct brcmf_sdio *bus)
4276 4276
4277 if (bus->ci) { 4277 if (bus->ci) {
4278 if (bus->sdiodev->state != BRCMF_SDIOD_NOMEDIUM) { 4278 if (bus->sdiodev->state != BRCMF_SDIOD_NOMEDIUM) {
4279 sdio_claim_host(bus->sdiodev->func[1]); 4279 sdio_claim_host(bus->sdiodev->func1);
4280 brcmf_sdio_wd_timer(bus, false); 4280 brcmf_sdio_wd_timer(bus, false);
4281 brcmf_sdio_clkctl(bus, CLK_AVAIL, false); 4281 brcmf_sdio_clkctl(bus, CLK_AVAIL, false);
4282 /* Leave the device in state where it is 4282 /* Leave the device in state where it is
@@ -4286,7 +4286,7 @@ void brcmf_sdio_remove(struct brcmf_sdio *bus)
4286 msleep(20); 4286 msleep(20);
4287 brcmf_chip_set_passive(bus->ci); 4287 brcmf_chip_set_passive(bus->ci);
4288 brcmf_sdio_clkctl(bus, CLK_NONE, false); 4288 brcmf_sdio_clkctl(bus, CLK_NONE, false);
4289 sdio_release_host(bus->sdiodev->func[1]); 4289 sdio_release_host(bus->sdiodev->func1);
4290 } 4290 }
4291 brcmf_chip_detach(bus->ci); 4291 brcmf_chip_detach(bus->ci);
4292 } 4292 }
@@ -4333,9 +4333,9 @@ int brcmf_sdio_sleep(struct brcmf_sdio *bus, bool sleep)
4333{ 4333{
4334 int ret; 4334 int ret;
4335 4335
4336 sdio_claim_host(bus->sdiodev->func[1]); 4336 sdio_claim_host(bus->sdiodev->func1);
4337 ret = brcmf_sdio_bus_sleep(bus, sleep, false); 4337 ret = brcmf_sdio_bus_sleep(bus, sleep, false);
4338 sdio_release_host(bus->sdiodev->func[1]); 4338 sdio_release_host(bus->sdiodev->func1);
4339 4339
4340 return ret; 4340 return ret;
4341} 4341}
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.h b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.h
index 04661ecbf395..7faed831f07d 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.h
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.h
@@ -21,9 +21,6 @@
21#include <linux/firmware.h> 21#include <linux/firmware.h>
22#include "firmware.h" 22#include "firmware.h"
23 23
24/* Maximum number of I/O funcs */
25#define NUM_SDIO_FUNCS 3
26
27#define SDIOD_FBR_SIZE 0x100 24#define SDIOD_FBR_SIZE 0x100
28 25
29/* io_en */ 26/* io_en */
@@ -173,8 +170,8 @@ struct brcmf_sdio;
173struct brcmf_sdiod_freezer; 170struct brcmf_sdiod_freezer;
174 171
175struct brcmf_sdio_dev { 172struct brcmf_sdio_dev {
176 struct sdio_func *func[NUM_SDIO_FUNCS]; 173 struct sdio_func *func1;
177 u8 num_funcs; /* Supported funcs on client */ 174 struct sdio_func *func2;
178 u32 sbwad; /* Save backplane window address */ 175 u32 sbwad; /* Save backplane window address */
179 struct brcmf_core *cc_core; /* chipcommon core info struct */ 176 struct brcmf_core *cc_core; /* chipcommon core info struct */
180 struct brcmf_sdio *bus; 177 struct brcmf_sdio *bus;
@@ -295,17 +292,17 @@ void brcmf_sdiod_intr_unregister(struct brcmf_sdio_dev *sdiodev);
295/* SDIO device register access interface */ 292/* SDIO device register access interface */
296/* Accessors for SDIO Function 0 */ 293/* Accessors for SDIO Function 0 */
297#define brcmf_sdiod_func0_rb(sdiodev, addr, r) \ 294#define brcmf_sdiod_func0_rb(sdiodev, addr, r) \
298 sdio_f0_readb((sdiodev)->func[1], (addr), (r)) 295 sdio_f0_readb((sdiodev)->func1, (addr), (r))
299 296
300#define brcmf_sdiod_func0_wb(sdiodev, addr, v, ret) \ 297#define brcmf_sdiod_func0_wb(sdiodev, addr, v, ret) \
301 sdio_f0_writeb((sdiodev)->func[1], (v), (addr), (ret)) 298 sdio_f0_writeb((sdiodev)->func1, (v), (addr), (ret))
302 299
303/* Accessors for SDIO Function 1 */ 300/* Accessors for SDIO Function 1 */
304#define brcmf_sdiod_readb(sdiodev, addr, r) \ 301#define brcmf_sdiod_readb(sdiodev, addr, r) \
305 sdio_readb((sdiodev)->func[1], (addr), (r)) 302 sdio_readb((sdiodev)->func1, (addr), (r))
306 303
307#define brcmf_sdiod_writeb(sdiodev, addr, v, ret) \ 304#define brcmf_sdiod_writeb(sdiodev, addr, v, ret) \
308 sdio_writeb((sdiodev)->func[1], (v), (addr), (ret)) 305 sdio_writeb((sdiodev)->func1, (v), (addr), (ret))
309 306
310u32 brcmf_sdiod_readl(struct brcmf_sdio_dev *sdiodev, u32 addr, int *ret); 307u32 brcmf_sdiod_readl(struct brcmf_sdio_dev *sdiodev, u32 addr, int *ret);
311void brcmf_sdiod_writel(struct brcmf_sdio_dev *sdiodev, u32 addr, u32 data, 308void brcmf_sdiod_writel(struct brcmf_sdio_dev *sdiodev, u32 addr, u32 data,