diff options
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 | ||
269 | out: | 269 | out: |
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 | ||
290 | out: | 290 | out: |
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 | ||
555 | done: | 555 | done: |
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 | ||
597 | done: | 597 | done: |
@@ -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 | ||
827 | static void brcmf_sdiod_freezer_off(struct brcmf_sdio_dev *sdiodev) | 827 | static 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); |
948 | out: | 946 | out: |
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 | ||
1058 | fail: | 1055 | fail: |
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, | |||
1035 | fail: | 1035 | fail: |
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 | ||
2263 | done: | 2263 | done: |
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 | ||
3321 | err: | 3322 | err: |
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 | ||
3495 | done: | 3496 | done: |
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 | ||
3940 | fail: | 3940 | fail: |
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 | ||
4118 | release: | 4118 | release: |
4119 | sdio_release_host(sdiodev->func[1]); | 4119 | sdio_release_host(sdiodev->func1); |
4120 | fail: | 4120 | fail: |
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; | |||
173 | struct brcmf_sdiod_freezer; | 170 | struct brcmf_sdiod_freezer; |
174 | 171 | ||
175 | struct brcmf_sdio_dev { | 172 | struct 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 | ||
310 | u32 brcmf_sdiod_readl(struct brcmf_sdio_dev *sdiodev, u32 addr, int *ret); | 307 | u32 brcmf_sdiod_readl(struct brcmf_sdio_dev *sdiodev, u32 addr, int *ret); |
311 | void brcmf_sdiod_writel(struct brcmf_sdio_dev *sdiodev, u32 addr, u32 data, | 308 | void brcmf_sdiod_writel(struct brcmf_sdio_dev *sdiodev, u32 addr, u32 data, |