Lines Matching refs:sdiodev

77 	struct brcmf_sdio_dev *sdiodev = bus_if->bus_priv.sdio;  in brcmf_sdiod_oob_irqhandler()  local
84 if (sdiodev->irq_en) { in brcmf_sdiod_oob_irqhandler()
86 sdiodev->irq_en = false; in brcmf_sdiod_oob_irqhandler()
89 brcmf_sdio_isr(sdiodev->bus); in brcmf_sdiod_oob_irqhandler()
97 struct brcmf_sdio_dev *sdiodev = bus_if->bus_priv.sdio; in brcmf_sdiod_ib_irqhandler() local
101 brcmf_sdio_isr(sdiodev->bus); in brcmf_sdiod_ib_irqhandler()
109 int brcmf_sdiod_intr_register(struct brcmf_sdio_dev *sdiodev) in brcmf_sdiod_intr_register() argument
116 if ((sdiodev->pdata) && (sdiodev->pdata->oob_irq_supported)) { in brcmf_sdiod_intr_register()
118 sdiodev->pdata->oob_irq_nr); in brcmf_sdiod_intr_register()
119 ret = request_irq(sdiodev->pdata->oob_irq_nr, in brcmf_sdiod_intr_register()
121 sdiodev->pdata->oob_irq_flags, in brcmf_sdiod_intr_register()
123 &sdiodev->func[1]->dev); in brcmf_sdiod_intr_register()
128 sdiodev->oob_irq_requested = true; in brcmf_sdiod_intr_register()
129 spin_lock_init(&sdiodev->irq_en_lock); in brcmf_sdiod_intr_register()
130 spin_lock_irqsave(&sdiodev->irq_en_lock, flags); in brcmf_sdiod_intr_register()
131 sdiodev->irq_en = true; in brcmf_sdiod_intr_register()
132 spin_unlock_irqrestore(&sdiodev->irq_en_lock, flags); in brcmf_sdiod_intr_register()
134 ret = enable_irq_wake(sdiodev->pdata->oob_irq_nr); in brcmf_sdiod_intr_register()
139 sdiodev->irq_wake = true; in brcmf_sdiod_intr_register()
141 sdio_claim_host(sdiodev->func[1]); in brcmf_sdiod_intr_register()
143 if (sdiodev->bus_if->chip == BRCM_CC_43362_CHIP_ID) { in brcmf_sdiod_intr_register()
146 gpiocontrol = brcmf_sdiod_regrl(sdiodev, addr, &ret); in brcmf_sdiod_intr_register()
148 brcmf_sdiod_regwl(sdiodev, addr, gpiocontrol, &ret); in brcmf_sdiod_intr_register()
150 brcmf_sdiod_regwb(sdiodev, SBSDIO_GPIO_SELECT, 0xf, in brcmf_sdiod_intr_register()
152 brcmf_sdiod_regwb(sdiodev, SBSDIO_GPIO_OUT, 0, &ret); in brcmf_sdiod_intr_register()
153 brcmf_sdiod_regwb(sdiodev, SBSDIO_GPIO_EN, 0x2, &ret); in brcmf_sdiod_intr_register()
157 data = brcmf_sdiod_regrb(sdiodev, SDIO_CCCR_IENx, &ret); in brcmf_sdiod_intr_register()
159 brcmf_sdiod_regwb(sdiodev, SDIO_CCCR_IENx, data, &ret); in brcmf_sdiod_intr_register()
163 if (sdiodev->pdata->oob_irq_flags & IRQF_TRIGGER_HIGH) in brcmf_sdiod_intr_register()
165 brcmf_sdiod_regwb(sdiodev, SDIO_CCCR_BRCM_SEPINT, data, &ret); in brcmf_sdiod_intr_register()
167 sdio_release_host(sdiodev->func[1]); in brcmf_sdiod_intr_register()
170 sdio_claim_host(sdiodev->func[1]); in brcmf_sdiod_intr_register()
171 sdio_claim_irq(sdiodev->func[1], brcmf_sdiod_ib_irqhandler); in brcmf_sdiod_intr_register()
172 sdio_claim_irq(sdiodev->func[2], brcmf_sdiod_dummy_irqhandler); in brcmf_sdiod_intr_register()
173 sdio_release_host(sdiodev->func[1]); in brcmf_sdiod_intr_register()
179 int brcmf_sdiod_intr_unregister(struct brcmf_sdio_dev *sdiodev) in brcmf_sdiod_intr_unregister() argument
183 if ((sdiodev->pdata) && (sdiodev->pdata->oob_irq_supported)) { in brcmf_sdiod_intr_unregister()
184 sdio_claim_host(sdiodev->func[1]); in brcmf_sdiod_intr_unregister()
185 brcmf_sdiod_regwb(sdiodev, SDIO_CCCR_BRCM_SEPINT, 0, NULL); in brcmf_sdiod_intr_unregister()
186 brcmf_sdiod_regwb(sdiodev, SDIO_CCCR_IENx, 0, NULL); in brcmf_sdiod_intr_unregister()
187 sdio_release_host(sdiodev->func[1]); in brcmf_sdiod_intr_unregister()
189 if (sdiodev->oob_irq_requested) { in brcmf_sdiod_intr_unregister()
190 sdiodev->oob_irq_requested = false; in brcmf_sdiod_intr_unregister()
191 if (sdiodev->irq_wake) { in brcmf_sdiod_intr_unregister()
192 disable_irq_wake(sdiodev->pdata->oob_irq_nr); in brcmf_sdiod_intr_unregister()
193 sdiodev->irq_wake = false; in brcmf_sdiod_intr_unregister()
195 free_irq(sdiodev->pdata->oob_irq_nr, in brcmf_sdiod_intr_unregister()
196 &sdiodev->func[1]->dev); in brcmf_sdiod_intr_unregister()
197 sdiodev->irq_en = false; in brcmf_sdiod_intr_unregister()
200 sdio_claim_host(sdiodev->func[1]); in brcmf_sdiod_intr_unregister()
201 sdio_release_irq(sdiodev->func[2]); in brcmf_sdiod_intr_unregister()
202 sdio_release_irq(sdiodev->func[1]); in brcmf_sdiod_intr_unregister()
203 sdio_release_host(sdiodev->func[1]); in brcmf_sdiod_intr_unregister()
209 void brcmf_sdiod_change_state(struct brcmf_sdio_dev *sdiodev, in brcmf_sdiod_change_state() argument
212 if (sdiodev->state == BRCMF_SDIOD_NOMEDIUM || in brcmf_sdiod_change_state()
213 state == sdiodev->state) in brcmf_sdiod_change_state()
216 brcmf_dbg(TRACE, "%d -> %d\n", sdiodev->state, state); in brcmf_sdiod_change_state()
217 switch (sdiodev->state) { in brcmf_sdiod_change_state()
220 brcmf_bus_change_state(sdiodev->bus_if, BRCMF_BUS_DOWN); in brcmf_sdiod_change_state()
225 brcmf_bus_change_state(sdiodev->bus_if, BRCMF_BUS_UP); in brcmf_sdiod_change_state()
230 sdiodev->state = state; in brcmf_sdiod_change_state()
252 static int brcmf_sdiod_request_data(struct brcmf_sdio_dev *sdiodev, u8 fn, in brcmf_sdiod_request_data() argument
264 func = sdiodev->func[fn]; in brcmf_sdiod_request_data()
305 static int brcmf_sdiod_regrw_helper(struct brcmf_sdio_dev *sdiodev, u32 addr, in brcmf_sdiod_regrw_helper() argument
312 if (sdiodev->state == BRCMF_SDIOD_NOMEDIUM) in brcmf_sdiod_regrw_helper()
332 ret = brcmf_sdiod_request_data(sdiodev, func, addr, regsz, in brcmf_sdiod_regrw_helper()
338 brcmf_sdiod_change_state(sdiodev, BRCMF_SDIOD_NOMEDIUM); in brcmf_sdiod_regrw_helper()
356 brcmf_sdiod_set_sbaddr_window(struct brcmf_sdio_dev *sdiodev, u32 address) in brcmf_sdiod_set_sbaddr_window() argument
361 if (sdiodev->state == BRCMF_SDIOD_NOMEDIUM) in brcmf_sdiod_set_sbaddr_window()
369 err = brcmf_sdiod_regrw_helper(sdiodev, in brcmf_sdiod_set_sbaddr_window()
383 brcmf_sdiod_addrprep(struct brcmf_sdio_dev *sdiodev, uint width, u32 *addr) in brcmf_sdiod_addrprep() argument
388 if (bar0 != sdiodev->sbwad) { in brcmf_sdiod_addrprep()
389 err = brcmf_sdiod_set_sbaddr_window(sdiodev, bar0); in brcmf_sdiod_addrprep()
393 sdiodev->sbwad = bar0; in brcmf_sdiod_addrprep()
404 u8 brcmf_sdiod_regrb(struct brcmf_sdio_dev *sdiodev, u32 addr, int *ret) in brcmf_sdiod_regrb() argument
410 retval = brcmf_sdiod_regrw_helper(sdiodev, addr, sizeof(data), &data, in brcmf_sdiod_regrb()
420 u32 brcmf_sdiod_regrl(struct brcmf_sdio_dev *sdiodev, u32 addr, int *ret) in brcmf_sdiod_regrl() argument
426 retval = brcmf_sdiod_addrprep(sdiodev, sizeof(data), &addr); in brcmf_sdiod_regrl()
429 retval = brcmf_sdiod_regrw_helper(sdiodev, addr, sizeof(data), &data, in brcmf_sdiod_regrl()
440 void brcmf_sdiod_regwb(struct brcmf_sdio_dev *sdiodev, u32 addr, in brcmf_sdiod_regwb() argument
446 retval = brcmf_sdiod_regrw_helper(sdiodev, addr, sizeof(data), &data, in brcmf_sdiod_regwb()
452 void brcmf_sdiod_regwl(struct brcmf_sdio_dev *sdiodev, u32 addr, in brcmf_sdiod_regwl() argument
458 retval = brcmf_sdiod_addrprep(sdiodev, sizeof(data), &addr); in brcmf_sdiod_regwl()
461 retval = brcmf_sdiod_regrw_helper(sdiodev, addr, sizeof(data), &data, in brcmf_sdiod_regwl()
469 static int brcmf_sdiod_buffrw(struct brcmf_sdio_dev *sdiodev, uint fn, in brcmf_sdiod_buffrw() argument
480 err = sdio_memcpy_toio(sdiodev->func[fn], addr, in brcmf_sdiod_buffrw()
483 err = sdio_memcpy_fromio(sdiodev->func[fn], ((u8 *)(pkt->data)), in brcmf_sdiod_buffrw()
487 err = sdio_readsb(sdiodev->func[fn], ((u8 *)(pkt->data)), addr, in brcmf_sdiod_buffrw()
490 brcmf_sdiod_change_state(sdiodev, BRCMF_SDIOD_NOMEDIUM); in brcmf_sdiod_buffrw()
506 static int brcmf_sdiod_sglist_rw(struct brcmf_sdio_dev *sdiodev, uint fn, in brcmf_sdiod_sglist_rw() argument
528 if (sdiodev->pdata && sdiodev->pdata->broken_sg_support && !write) { in brcmf_sdiod_sglist_rw()
532 req_sz = ALIGN(req_sz, sdiodev->func[fn]->cur_blksize); in brcmf_sdiod_sglist_rw()
551 func_blk_sz = sdiodev->func[fn]->cur_blksize; in brcmf_sdiod_sglist_rw()
552 max_req_sz = sdiodev->max_request_size; in brcmf_sdiod_sglist_rw()
553 max_seg_cnt = min_t(unsigned short, sdiodev->max_segment_count, in brcmf_sdiod_sglist_rw()
563 mmc_dat.sg = sdiodev->sgtable.sgl; in brcmf_sdiod_sglist_rw()
579 sgl = sdiodev->sgtable.sgl; in brcmf_sdiod_sglist_rw()
584 if (sg_data_sz > sdiodev->max_segment_size) in brcmf_sdiod_sglist_rw()
585 sg_data_sz = sdiodev->max_segment_size; in brcmf_sdiod_sglist_rw()
620 mmc_set_data_timeout(&mmc_dat, sdiodev->func[fn]->card); in brcmf_sdiod_sglist_rw()
621 mmc_wait_for_req(sdiodev->func[fn]->card->host, &mmc_req); in brcmf_sdiod_sglist_rw()
625 brcmf_sdiod_change_state(sdiodev, BRCMF_SDIOD_NOMEDIUM); in brcmf_sdiod_sglist_rw()
635 if (sdiodev->pdata && sdiodev->pdata->broken_sg_support && !write) { in brcmf_sdiod_sglist_rw()
660 sg_init_table(sdiodev->sgtable.sgl, sdiodev->sgtable.orig_nents); in brcmf_sdiod_sglist_rw()
667 int brcmf_sdiod_recv_buf(struct brcmf_sdio_dev *sdiodev, u8 *buf, uint nbytes) in brcmf_sdiod_recv_buf() argument
679 err = brcmf_sdiod_recv_pkt(sdiodev, mypkt); in brcmf_sdiod_recv_buf()
687 int brcmf_sdiod_recv_pkt(struct brcmf_sdio_dev *sdiodev, struct sk_buff *pkt) in brcmf_sdiod_recv_pkt() argument
689 u32 addr = sdiodev->sbwad; in brcmf_sdiod_recv_pkt()
694 err = brcmf_sdiod_addrprep(sdiodev, 4, &addr); in brcmf_sdiod_recv_pkt()
698 err = brcmf_sdiod_buffrw(sdiodev, SDIO_FUNC_2, false, addr, pkt); in brcmf_sdiod_recv_pkt()
704 int brcmf_sdiod_recv_chain(struct brcmf_sdio_dev *sdiodev, in brcmf_sdiod_recv_chain() argument
709 u32 addr = sdiodev->sbwad; in brcmf_sdiod_recv_chain()
715 err = brcmf_sdiod_addrprep(sdiodev, 4, &addr); in brcmf_sdiod_recv_chain()
720 err = brcmf_sdiod_buffrw(sdiodev, SDIO_FUNC_2, false, addr, in brcmf_sdiod_recv_chain()
722 else if (!sdiodev->sg_support) { in brcmf_sdiod_recv_chain()
726 err = brcmf_sdiod_buffrw(sdiodev, SDIO_FUNC_2, false, addr, in brcmf_sdiod_recv_chain()
736 err = brcmf_sdiod_sglist_rw(sdiodev, SDIO_FUNC_2, false, addr, in brcmf_sdiod_recv_chain()
743 int brcmf_sdiod_send_buf(struct brcmf_sdio_dev *sdiodev, u8 *buf, uint nbytes) in brcmf_sdiod_send_buf() argument
746 u32 addr = sdiodev->sbwad; in brcmf_sdiod_send_buf()
758 err = brcmf_sdiod_addrprep(sdiodev, 4, &addr); in brcmf_sdiod_send_buf()
761 err = brcmf_sdiod_buffrw(sdiodev, SDIO_FUNC_2, true, addr, in brcmf_sdiod_send_buf()
769 int brcmf_sdiod_send_pkt(struct brcmf_sdio_dev *sdiodev, in brcmf_sdiod_send_pkt() argument
773 u32 addr = sdiodev->sbwad; in brcmf_sdiod_send_pkt()
778 err = brcmf_sdiod_addrprep(sdiodev, 4, &addr); in brcmf_sdiod_send_pkt()
782 if (pktq->qlen == 1 || !sdiodev->sg_support) in brcmf_sdiod_send_pkt()
784 err = brcmf_sdiod_buffrw(sdiodev, SDIO_FUNC_2, true, in brcmf_sdiod_send_pkt()
790 err = brcmf_sdiod_sglist_rw(sdiodev, SDIO_FUNC_2, true, addr, in brcmf_sdiod_send_pkt()
797 brcmf_sdiod_ramrw(struct brcmf_sdio_dev *sdiodev, bool write, u32 address, in brcmf_sdiod_ramrw() argument
820 sdio_claim_host(sdiodev->func[1]); in brcmf_sdiod_ramrw()
825 bcmerror = brcmf_sdiod_set_sbaddr_window(sdiodev, address); in brcmf_sdiod_ramrw()
839 bcmerror = brcmf_sdiod_buffrw(sdiodev, SDIO_FUNC_1, write, in brcmf_sdiod_ramrw()
862 if (brcmf_sdiod_set_sbaddr_window(sdiodev, sdiodev->sbwad)) in brcmf_sdiod_ramrw()
864 sdiodev->sbwad); in brcmf_sdiod_ramrw()
866 sdio_release_host(sdiodev->func[1]); in brcmf_sdiod_ramrw()
871 int brcmf_sdiod_abort(struct brcmf_sdio_dev *sdiodev, uint fn) in brcmf_sdiod_abort() argument
877 brcmf_sdiod_request_data(sdiodev, SDIO_FUNC_0, SDIO_CCCR_ABORT, in brcmf_sdiod_abort()
884 static void brcmf_sdiod_sgtable_alloc(struct brcmf_sdio_dev *sdiodev) in brcmf_sdiod_sgtable_alloc() argument
889 if (!sdiodev->sg_support) in brcmf_sdiod_sgtable_alloc()
895 WARN_ON(nents > sdiodev->max_segment_count); in brcmf_sdiod_sgtable_alloc()
898 err = sg_alloc_table(&sdiodev->sgtable, nents, GFP_KERNEL); in brcmf_sdiod_sgtable_alloc()
901 sdiodev->sg_support = false; in brcmf_sdiod_sgtable_alloc()
904 sdiodev->txglomsz = brcmf_sdiod_txglomsz; in brcmf_sdiod_sgtable_alloc()
908 static int brcmf_sdiod_freezer_attach(struct brcmf_sdio_dev *sdiodev) in brcmf_sdiod_freezer_attach() argument
910 sdiodev->freezer = kzalloc(sizeof(*sdiodev->freezer), GFP_KERNEL); in brcmf_sdiod_freezer_attach()
911 if (!sdiodev->freezer) in brcmf_sdiod_freezer_attach()
913 atomic_set(&sdiodev->freezer->thread_count, 0); in brcmf_sdiod_freezer_attach()
914 atomic_set(&sdiodev->freezer->freezing, 0); in brcmf_sdiod_freezer_attach()
915 init_waitqueue_head(&sdiodev->freezer->thread_freeze); in brcmf_sdiod_freezer_attach()
916 init_completion(&sdiodev->freezer->resumed); in brcmf_sdiod_freezer_attach()
920 static void brcmf_sdiod_freezer_detach(struct brcmf_sdio_dev *sdiodev) in brcmf_sdiod_freezer_detach() argument
922 if (sdiodev->freezer) { in brcmf_sdiod_freezer_detach()
923 WARN_ON(atomic_read(&sdiodev->freezer->freezing)); in brcmf_sdiod_freezer_detach()
924 kfree(sdiodev->freezer); in brcmf_sdiod_freezer_detach()
928 static int brcmf_sdiod_freezer_on(struct brcmf_sdio_dev *sdiodev) in brcmf_sdiod_freezer_on() argument
930 atomic_t *expect = &sdiodev->freezer->thread_count; in brcmf_sdiod_freezer_on()
933 sdiodev->freezer->frozen_count = 0; in brcmf_sdiod_freezer_on()
934 reinit_completion(&sdiodev->freezer->resumed); in brcmf_sdiod_freezer_on()
935 atomic_set(&sdiodev->freezer->freezing, 1); in brcmf_sdiod_freezer_on()
936 brcmf_sdio_trigger_dpc(sdiodev->bus); in brcmf_sdiod_freezer_on()
937 wait_event(sdiodev->freezer->thread_freeze, in brcmf_sdiod_freezer_on()
938 atomic_read(expect) == sdiodev->freezer->frozen_count); in brcmf_sdiod_freezer_on()
939 sdio_claim_host(sdiodev->func[1]); in brcmf_sdiod_freezer_on()
940 res = brcmf_sdio_sleep(sdiodev->bus, true); in brcmf_sdiod_freezer_on()
941 sdio_release_host(sdiodev->func[1]); in brcmf_sdiod_freezer_on()
945 static void brcmf_sdiod_freezer_off(struct brcmf_sdio_dev *sdiodev) in brcmf_sdiod_freezer_off() argument
947 sdio_claim_host(sdiodev->func[1]); in brcmf_sdiod_freezer_off()
948 brcmf_sdio_sleep(sdiodev->bus, false); in brcmf_sdiod_freezer_off()
949 sdio_release_host(sdiodev->func[1]); in brcmf_sdiod_freezer_off()
950 atomic_set(&sdiodev->freezer->freezing, 0); in brcmf_sdiod_freezer_off()
951 complete_all(&sdiodev->freezer->resumed); in brcmf_sdiod_freezer_off()
954 bool brcmf_sdiod_freezing(struct brcmf_sdio_dev *sdiodev) in brcmf_sdiod_freezing() argument
956 return atomic_read(&sdiodev->freezer->freezing); in brcmf_sdiod_freezing()
959 void brcmf_sdiod_try_freeze(struct brcmf_sdio_dev *sdiodev) in brcmf_sdiod_try_freeze() argument
961 if (!brcmf_sdiod_freezing(sdiodev)) in brcmf_sdiod_try_freeze()
963 sdiodev->freezer->frozen_count++; in brcmf_sdiod_try_freeze()
964 wake_up(&sdiodev->freezer->thread_freeze); in brcmf_sdiod_try_freeze()
965 wait_for_completion(&sdiodev->freezer->resumed); in brcmf_sdiod_try_freeze()
968 void brcmf_sdiod_freezer_count(struct brcmf_sdio_dev *sdiodev) in brcmf_sdiod_freezer_count() argument
970 atomic_inc(&sdiodev->freezer->thread_count); in brcmf_sdiod_freezer_count()
973 void brcmf_sdiod_freezer_uncount(struct brcmf_sdio_dev *sdiodev) in brcmf_sdiod_freezer_uncount() argument
975 atomic_dec(&sdiodev->freezer->thread_count); in brcmf_sdiod_freezer_uncount()
978 static int brcmf_sdiod_freezer_attach(struct brcmf_sdio_dev *sdiodev) in brcmf_sdiod_freezer_attach() argument
983 static void brcmf_sdiod_freezer_detach(struct brcmf_sdio_dev *sdiodev) in brcmf_sdiod_freezer_detach() argument
988 static int brcmf_sdiod_remove(struct brcmf_sdio_dev *sdiodev) in brcmf_sdiod_remove() argument
990 if (sdiodev->bus) { in brcmf_sdiod_remove()
991 brcmf_sdio_remove(sdiodev->bus); in brcmf_sdiod_remove()
992 sdiodev->bus = NULL; in brcmf_sdiod_remove()
995 brcmf_sdiod_freezer_detach(sdiodev); in brcmf_sdiod_remove()
998 sdio_claim_host(sdiodev->func[2]); in brcmf_sdiod_remove()
999 sdio_disable_func(sdiodev->func[2]); in brcmf_sdiod_remove()
1000 sdio_release_host(sdiodev->func[2]); in brcmf_sdiod_remove()
1003 sdio_claim_host(sdiodev->func[1]); in brcmf_sdiod_remove()
1004 sdio_disable_func(sdiodev->func[1]); in brcmf_sdiod_remove()
1005 sdio_release_host(sdiodev->func[1]); in brcmf_sdiod_remove()
1007 sg_free_table(&sdiodev->sgtable); in brcmf_sdiod_remove()
1008 sdiodev->sbwad = 0; in brcmf_sdiod_remove()
1010 pm_runtime_allow(sdiodev->func[1]->card->host->parent); in brcmf_sdiod_remove()
1014 static int brcmf_sdiod_probe(struct brcmf_sdio_dev *sdiodev) in brcmf_sdiod_probe() argument
1021 sdiodev->num_funcs = 2; in brcmf_sdiod_probe()
1023 sdio_claim_host(sdiodev->func[1]); in brcmf_sdiod_probe()
1025 ret = sdio_set_block_size(sdiodev->func[1], SDIO_FUNC1_BLOCKSIZE); in brcmf_sdiod_probe()
1028 sdio_release_host(sdiodev->func[1]); in brcmf_sdiod_probe()
1031 ret = sdio_set_block_size(sdiodev->func[2], SDIO_FUNC2_BLOCKSIZE); in brcmf_sdiod_probe()
1034 sdio_release_host(sdiodev->func[1]); in brcmf_sdiod_probe()
1039 sdiodev->func[2]->enable_timeout = SDIO_WAIT_F2RDY; in brcmf_sdiod_probe()
1042 ret = sdio_enable_func(sdiodev->func[1]); in brcmf_sdiod_probe()
1043 sdio_release_host(sdiodev->func[1]); in brcmf_sdiod_probe()
1054 func = sdiodev->func[2]; in brcmf_sdiod_probe()
1056 sdiodev->sg_support = host->max_segs > 1; in brcmf_sdiod_probe()
1058 sdiodev->max_request_size = min_t(uint, host->max_req_size, in brcmf_sdiod_probe()
1060 sdiodev->max_segment_count = min_t(uint, host->max_segs, in brcmf_sdiod_probe()
1062 sdiodev->max_segment_size = host->max_seg_size; in brcmf_sdiod_probe()
1067 brcmf_sdiod_sgtable_alloc(sdiodev); in brcmf_sdiod_probe()
1069 ret = brcmf_sdiod_freezer_attach(sdiodev); in brcmf_sdiod_probe()
1074 sdiodev->bus = brcmf_sdio_probe(sdiodev); in brcmf_sdiod_probe()
1075 if (!sdiodev->bus) { in brcmf_sdiod_probe()
1082 brcmf_sdiod_remove(sdiodev); in brcmf_sdiod_probe()
1115 struct brcmf_sdio_dev *sdiodev; in brcmf_ops_sdio_probe() local
1135 sdiodev = kzalloc(sizeof(struct brcmf_sdio_dev), GFP_KERNEL); in brcmf_ops_sdio_probe()
1136 if (!sdiodev) { in brcmf_ops_sdio_probe()
1144 sdiodev->func[0] = kmemdup(func, sizeof(*func), GFP_KERNEL); in brcmf_ops_sdio_probe()
1145 sdiodev->func[0]->num = 0; in brcmf_ops_sdio_probe()
1146 sdiodev->func[1] = func->card->sdio_func[0]; in brcmf_ops_sdio_probe()
1147 sdiodev->func[2] = func; in brcmf_ops_sdio_probe()
1149 sdiodev->bus_if = bus_if; in brcmf_ops_sdio_probe()
1150 bus_if->bus_priv.sdio = sdiodev; in brcmf_ops_sdio_probe()
1153 dev_set_drvdata(&sdiodev->func[1]->dev, bus_if); in brcmf_ops_sdio_probe()
1154 sdiodev->dev = &sdiodev->func[1]->dev; in brcmf_ops_sdio_probe()
1155 sdiodev->pdata = brcmfmac_sdio_pdata; in brcmf_ops_sdio_probe()
1157 if (!sdiodev->pdata) in brcmf_ops_sdio_probe()
1158 brcmf_of_probe(sdiodev); in brcmf_ops_sdio_probe()
1164 if ((sdio_get_host_pm_caps(sdiodev->func[1]) & MMC_PM_KEEP_POWER) && in brcmf_ops_sdio_probe()
1165 ((sdio_get_host_pm_caps(sdiodev->func[1]) & MMC_PM_WAKE_SDIO_IRQ) || in brcmf_ops_sdio_probe()
1166 (sdiodev->pdata && sdiodev->pdata->oob_irq_supported))) in brcmf_ops_sdio_probe()
1170 brcmf_sdiod_change_state(sdiodev, BRCMF_SDIOD_DOWN); in brcmf_ops_sdio_probe()
1173 err = brcmf_sdiod_probe(sdiodev); in brcmf_ops_sdio_probe()
1184 dev_set_drvdata(&sdiodev->func[1]->dev, NULL); in brcmf_ops_sdio_probe()
1185 kfree(sdiodev->func[0]); in brcmf_ops_sdio_probe()
1186 kfree(sdiodev); in brcmf_ops_sdio_probe()
1194 struct brcmf_sdio_dev *sdiodev; in brcmf_ops_sdio_remove() local
1206 sdiodev = bus_if->bus_priv.sdio; in brcmf_ops_sdio_remove()
1207 brcmf_sdiod_remove(sdiodev); in brcmf_ops_sdio_remove()
1209 dev_set_drvdata(&sdiodev->func[1]->dev, NULL); in brcmf_ops_sdio_remove()
1210 dev_set_drvdata(&sdiodev->func[2]->dev, NULL); in brcmf_ops_sdio_remove()
1213 kfree(sdiodev->func[0]); in brcmf_ops_sdio_remove()
1214 kfree(sdiodev); in brcmf_ops_sdio_remove()
1223 struct brcmf_sdio_dev *sdiodev = bus_if->bus_priv.sdio; in brcmf_sdio_wowl_config() local
1226 sdiodev->wowl_enabled = enabled; in brcmf_sdio_wowl_config()
1234 struct brcmf_sdio_dev *sdiodev; in brcmf_ops_sdio_suspend() local
1244 sdiodev = bus_if->bus_priv.sdio; in brcmf_ops_sdio_suspend()
1246 brcmf_sdiod_freezer_on(sdiodev); in brcmf_ops_sdio_suspend()
1247 brcmf_sdio_wd_timer(sdiodev->bus, 0); in brcmf_ops_sdio_suspend()
1249 if (sdiodev->wowl_enabled) { in brcmf_ops_sdio_suspend()
1251 if (sdiodev->pdata->oob_irq_supported) in brcmf_ops_sdio_suspend()
1252 enable_irq_wake(sdiodev->pdata->oob_irq_nr); in brcmf_ops_sdio_suspend()
1255 if (sdio_set_host_pm_flags(sdiodev->func[1], sdio_flags)) in brcmf_ops_sdio_suspend()
1264 struct brcmf_sdio_dev *sdiodev = bus_if->bus_priv.sdio; in brcmf_ops_sdio_resume() local
1271 brcmf_sdiod_freezer_off(sdiodev); in brcmf_ops_sdio_resume()