Lines Matching refs:sdiodev

78 	struct brcmf_sdio_dev *sdiodev = bus_if->bus_priv.sdio;  in brcmf_sdiod_oob_irqhandler()  local
85 if (sdiodev->irq_en) { in brcmf_sdiod_oob_irqhandler()
87 sdiodev->irq_en = false; in brcmf_sdiod_oob_irqhandler()
90 brcmf_sdio_isr(sdiodev->bus); in brcmf_sdiod_oob_irqhandler()
98 struct brcmf_sdio_dev *sdiodev = bus_if->bus_priv.sdio; in brcmf_sdiod_ib_irqhandler() local
102 brcmf_sdio_isr(sdiodev->bus); in brcmf_sdiod_ib_irqhandler()
110 int brcmf_sdiod_intr_register(struct brcmf_sdio_dev *sdiodev) in brcmf_sdiod_intr_register() argument
117 if ((sdiodev->pdata) && (sdiodev->pdata->oob_irq_supported)) { in brcmf_sdiod_intr_register()
119 sdiodev->pdata->oob_irq_nr); in brcmf_sdiod_intr_register()
120 ret = request_irq(sdiodev->pdata->oob_irq_nr, in brcmf_sdiod_intr_register()
122 sdiodev->pdata->oob_irq_flags, in brcmf_sdiod_intr_register()
124 &sdiodev->func[1]->dev); in brcmf_sdiod_intr_register()
129 sdiodev->oob_irq_requested = true; in brcmf_sdiod_intr_register()
130 spin_lock_init(&sdiodev->irq_en_lock); in brcmf_sdiod_intr_register()
131 spin_lock_irqsave(&sdiodev->irq_en_lock, flags); in brcmf_sdiod_intr_register()
132 sdiodev->irq_en = true; in brcmf_sdiod_intr_register()
133 spin_unlock_irqrestore(&sdiodev->irq_en_lock, flags); in brcmf_sdiod_intr_register()
135 ret = enable_irq_wake(sdiodev->pdata->oob_irq_nr); in brcmf_sdiod_intr_register()
140 sdiodev->irq_wake = true; in brcmf_sdiod_intr_register()
142 sdio_claim_host(sdiodev->func[1]); in brcmf_sdiod_intr_register()
144 if (sdiodev->bus_if->chip == BRCM_CC_43362_CHIP_ID) { in brcmf_sdiod_intr_register()
147 gpiocontrol = brcmf_sdiod_regrl(sdiodev, addr, &ret); in brcmf_sdiod_intr_register()
149 brcmf_sdiod_regwl(sdiodev, addr, gpiocontrol, &ret); in brcmf_sdiod_intr_register()
151 brcmf_sdiod_regwb(sdiodev, SBSDIO_GPIO_SELECT, 0xf, in brcmf_sdiod_intr_register()
153 brcmf_sdiod_regwb(sdiodev, SBSDIO_GPIO_OUT, 0, &ret); in brcmf_sdiod_intr_register()
154 brcmf_sdiod_regwb(sdiodev, SBSDIO_GPIO_EN, 0x2, &ret); in brcmf_sdiod_intr_register()
158 data = brcmf_sdiod_regrb(sdiodev, SDIO_CCCR_IENx, &ret); in brcmf_sdiod_intr_register()
160 brcmf_sdiod_regwb(sdiodev, SDIO_CCCR_IENx, data, &ret); in brcmf_sdiod_intr_register()
164 if (sdiodev->pdata->oob_irq_flags & IRQF_TRIGGER_HIGH) in brcmf_sdiod_intr_register()
166 brcmf_sdiod_regwb(sdiodev, SDIO_CCCR_BRCM_SEPINT, data, &ret); in brcmf_sdiod_intr_register()
168 sdio_release_host(sdiodev->func[1]); in brcmf_sdiod_intr_register()
171 sdio_claim_host(sdiodev->func[1]); in brcmf_sdiod_intr_register()
172 sdio_claim_irq(sdiodev->func[1], brcmf_sdiod_ib_irqhandler); in brcmf_sdiod_intr_register()
173 sdio_claim_irq(sdiodev->func[2], brcmf_sdiod_dummy_irqhandler); in brcmf_sdiod_intr_register()
174 sdio_release_host(sdiodev->func[1]); in brcmf_sdiod_intr_register()
180 int brcmf_sdiod_intr_unregister(struct brcmf_sdio_dev *sdiodev) in brcmf_sdiod_intr_unregister() argument
184 if ((sdiodev->pdata) && (sdiodev->pdata->oob_irq_supported)) { in brcmf_sdiod_intr_unregister()
185 sdio_claim_host(sdiodev->func[1]); in brcmf_sdiod_intr_unregister()
186 brcmf_sdiod_regwb(sdiodev, SDIO_CCCR_BRCM_SEPINT, 0, NULL); in brcmf_sdiod_intr_unregister()
187 brcmf_sdiod_regwb(sdiodev, SDIO_CCCR_IENx, 0, NULL); in brcmf_sdiod_intr_unregister()
188 sdio_release_host(sdiodev->func[1]); in brcmf_sdiod_intr_unregister()
190 if (sdiodev->oob_irq_requested) { in brcmf_sdiod_intr_unregister()
191 sdiodev->oob_irq_requested = false; in brcmf_sdiod_intr_unregister()
192 if (sdiodev->irq_wake) { in brcmf_sdiod_intr_unregister()
193 disable_irq_wake(sdiodev->pdata->oob_irq_nr); in brcmf_sdiod_intr_unregister()
194 sdiodev->irq_wake = false; in brcmf_sdiod_intr_unregister()
196 free_irq(sdiodev->pdata->oob_irq_nr, in brcmf_sdiod_intr_unregister()
197 &sdiodev->func[1]->dev); in brcmf_sdiod_intr_unregister()
198 sdiodev->irq_en = false; in brcmf_sdiod_intr_unregister()
201 sdio_claim_host(sdiodev->func[1]); in brcmf_sdiod_intr_unregister()
202 sdio_release_irq(sdiodev->func[2]); in brcmf_sdiod_intr_unregister()
203 sdio_release_irq(sdiodev->func[1]); in brcmf_sdiod_intr_unregister()
204 sdio_release_host(sdiodev->func[1]); in brcmf_sdiod_intr_unregister()
210 void brcmf_sdiod_change_state(struct brcmf_sdio_dev *sdiodev, in brcmf_sdiod_change_state() argument
213 if (sdiodev->state == BRCMF_SDIOD_NOMEDIUM || in brcmf_sdiod_change_state()
214 state == sdiodev->state) in brcmf_sdiod_change_state()
217 brcmf_dbg(TRACE, "%d -> %d\n", sdiodev->state, state); in brcmf_sdiod_change_state()
218 switch (sdiodev->state) { in brcmf_sdiod_change_state()
221 brcmf_bus_change_state(sdiodev->bus_if, BRCMF_BUS_DOWN); in brcmf_sdiod_change_state()
226 brcmf_bus_change_state(sdiodev->bus_if, BRCMF_BUS_UP); in brcmf_sdiod_change_state()
231 sdiodev->state = state; in brcmf_sdiod_change_state()
253 static int brcmf_sdiod_request_data(struct brcmf_sdio_dev *sdiodev, u8 fn, in brcmf_sdiod_request_data() argument
265 func = sdiodev->func[fn]; in brcmf_sdiod_request_data()
306 static int brcmf_sdiod_regrw_helper(struct brcmf_sdio_dev *sdiodev, u32 addr, in brcmf_sdiod_regrw_helper() argument
313 if (sdiodev->state == BRCMF_SDIOD_NOMEDIUM) in brcmf_sdiod_regrw_helper()
333 ret = brcmf_sdiod_request_data(sdiodev, func, addr, regsz, in brcmf_sdiod_regrw_helper()
339 brcmf_sdiod_change_state(sdiodev, BRCMF_SDIOD_NOMEDIUM); in brcmf_sdiod_regrw_helper()
357 brcmf_sdiod_set_sbaddr_window(struct brcmf_sdio_dev *sdiodev, u32 address) in brcmf_sdiod_set_sbaddr_window() argument
362 if (sdiodev->state == BRCMF_SDIOD_NOMEDIUM) in brcmf_sdiod_set_sbaddr_window()
370 err = brcmf_sdiod_regrw_helper(sdiodev, in brcmf_sdiod_set_sbaddr_window()
384 brcmf_sdiod_addrprep(struct brcmf_sdio_dev *sdiodev, uint width, u32 *addr) in brcmf_sdiod_addrprep() argument
389 if (bar0 != sdiodev->sbwad) { in brcmf_sdiod_addrprep()
390 err = brcmf_sdiod_set_sbaddr_window(sdiodev, bar0); in brcmf_sdiod_addrprep()
394 sdiodev->sbwad = bar0; in brcmf_sdiod_addrprep()
405 u8 brcmf_sdiod_regrb(struct brcmf_sdio_dev *sdiodev, u32 addr, int *ret) in brcmf_sdiod_regrb() argument
411 retval = brcmf_sdiod_regrw_helper(sdiodev, addr, sizeof(data), &data, in brcmf_sdiod_regrb()
421 u32 brcmf_sdiod_regrl(struct brcmf_sdio_dev *sdiodev, u32 addr, int *ret) in brcmf_sdiod_regrl() argument
427 retval = brcmf_sdiod_addrprep(sdiodev, sizeof(data), &addr); in brcmf_sdiod_regrl()
430 retval = brcmf_sdiod_regrw_helper(sdiodev, addr, sizeof(data), &data, in brcmf_sdiod_regrl()
441 void brcmf_sdiod_regwb(struct brcmf_sdio_dev *sdiodev, u32 addr, in brcmf_sdiod_regwb() argument
447 retval = brcmf_sdiod_regrw_helper(sdiodev, addr, sizeof(data), &data, in brcmf_sdiod_regwb()
453 void brcmf_sdiod_regwl(struct brcmf_sdio_dev *sdiodev, u32 addr, in brcmf_sdiod_regwl() argument
459 retval = brcmf_sdiod_addrprep(sdiodev, sizeof(data), &addr); in brcmf_sdiod_regwl()
462 retval = brcmf_sdiod_regrw_helper(sdiodev, addr, sizeof(data), &data, in brcmf_sdiod_regwl()
470 static int brcmf_sdiod_buffrw(struct brcmf_sdio_dev *sdiodev, uint fn, in brcmf_sdiod_buffrw() argument
481 err = sdio_memcpy_toio(sdiodev->func[fn], addr, in brcmf_sdiod_buffrw()
484 err = sdio_memcpy_fromio(sdiodev->func[fn], ((u8 *)(pkt->data)), in brcmf_sdiod_buffrw()
488 err = sdio_readsb(sdiodev->func[fn], ((u8 *)(pkt->data)), addr, in brcmf_sdiod_buffrw()
491 brcmf_sdiod_change_state(sdiodev, BRCMF_SDIOD_NOMEDIUM); in brcmf_sdiod_buffrw()
507 static int brcmf_sdiod_sglist_rw(struct brcmf_sdio_dev *sdiodev, uint fn, in brcmf_sdiod_sglist_rw() argument
529 if (sdiodev->pdata && sdiodev->pdata->broken_sg_support && !write) { in brcmf_sdiod_sglist_rw()
533 req_sz = ALIGN(req_sz, sdiodev->func[fn]->cur_blksize); in brcmf_sdiod_sglist_rw()
552 func_blk_sz = sdiodev->func[fn]->cur_blksize; in brcmf_sdiod_sglist_rw()
553 max_req_sz = sdiodev->max_request_size; in brcmf_sdiod_sglist_rw()
554 max_seg_cnt = min_t(unsigned short, sdiodev->max_segment_count, in brcmf_sdiod_sglist_rw()
564 mmc_dat.sg = sdiodev->sgtable.sgl; in brcmf_sdiod_sglist_rw()
580 sgl = sdiodev->sgtable.sgl; in brcmf_sdiod_sglist_rw()
585 if (sg_data_sz > sdiodev->max_segment_size) in brcmf_sdiod_sglist_rw()
586 sg_data_sz = sdiodev->max_segment_size; in brcmf_sdiod_sglist_rw()
621 mmc_set_data_timeout(&mmc_dat, sdiodev->func[fn]->card); in brcmf_sdiod_sglist_rw()
622 mmc_wait_for_req(sdiodev->func[fn]->card->host, &mmc_req); in brcmf_sdiod_sglist_rw()
626 brcmf_sdiod_change_state(sdiodev, BRCMF_SDIOD_NOMEDIUM); in brcmf_sdiod_sglist_rw()
636 if (sdiodev->pdata && sdiodev->pdata->broken_sg_support && !write) { in brcmf_sdiod_sglist_rw()
661 sg_init_table(sdiodev->sgtable.sgl, sdiodev->sgtable.orig_nents); in brcmf_sdiod_sglist_rw()
668 int brcmf_sdiod_recv_buf(struct brcmf_sdio_dev *sdiodev, u8 *buf, uint nbytes) in brcmf_sdiod_recv_buf() argument
680 err = brcmf_sdiod_recv_pkt(sdiodev, mypkt); in brcmf_sdiod_recv_buf()
688 int brcmf_sdiod_recv_pkt(struct brcmf_sdio_dev *sdiodev, struct sk_buff *pkt) in brcmf_sdiod_recv_pkt() argument
690 u32 addr = sdiodev->sbwad; in brcmf_sdiod_recv_pkt()
695 err = brcmf_sdiod_addrprep(sdiodev, 4, &addr); in brcmf_sdiod_recv_pkt()
699 err = brcmf_sdiod_buffrw(sdiodev, SDIO_FUNC_2, false, addr, pkt); in brcmf_sdiod_recv_pkt()
705 int brcmf_sdiod_recv_chain(struct brcmf_sdio_dev *sdiodev, in brcmf_sdiod_recv_chain() argument
710 u32 addr = sdiodev->sbwad; in brcmf_sdiod_recv_chain()
716 err = brcmf_sdiod_addrprep(sdiodev, 4, &addr); in brcmf_sdiod_recv_chain()
721 err = brcmf_sdiod_buffrw(sdiodev, SDIO_FUNC_2, false, addr, in brcmf_sdiod_recv_chain()
723 else if (!sdiodev->sg_support) { in brcmf_sdiod_recv_chain()
727 err = brcmf_sdiod_buffrw(sdiodev, SDIO_FUNC_2, false, addr, in brcmf_sdiod_recv_chain()
737 err = brcmf_sdiod_sglist_rw(sdiodev, SDIO_FUNC_2, false, addr, in brcmf_sdiod_recv_chain()
744 int brcmf_sdiod_send_buf(struct brcmf_sdio_dev *sdiodev, u8 *buf, uint nbytes) in brcmf_sdiod_send_buf() argument
747 u32 addr = sdiodev->sbwad; in brcmf_sdiod_send_buf()
759 err = brcmf_sdiod_addrprep(sdiodev, 4, &addr); in brcmf_sdiod_send_buf()
762 err = brcmf_sdiod_buffrw(sdiodev, SDIO_FUNC_2, true, addr, in brcmf_sdiod_send_buf()
770 int brcmf_sdiod_send_pkt(struct brcmf_sdio_dev *sdiodev, in brcmf_sdiod_send_pkt() argument
774 u32 addr = sdiodev->sbwad; in brcmf_sdiod_send_pkt()
779 err = brcmf_sdiod_addrprep(sdiodev, 4, &addr); in brcmf_sdiod_send_pkt()
783 if (pktq->qlen == 1 || !sdiodev->sg_support) in brcmf_sdiod_send_pkt()
785 err = brcmf_sdiod_buffrw(sdiodev, SDIO_FUNC_2, true, in brcmf_sdiod_send_pkt()
791 err = brcmf_sdiod_sglist_rw(sdiodev, SDIO_FUNC_2, true, addr, in brcmf_sdiod_send_pkt()
798 brcmf_sdiod_ramrw(struct brcmf_sdio_dev *sdiodev, bool write, u32 address, in brcmf_sdiod_ramrw() argument
821 sdio_claim_host(sdiodev->func[1]); in brcmf_sdiod_ramrw()
826 bcmerror = brcmf_sdiod_set_sbaddr_window(sdiodev, address); in brcmf_sdiod_ramrw()
840 bcmerror = brcmf_sdiod_buffrw(sdiodev, SDIO_FUNC_1, write, in brcmf_sdiod_ramrw()
863 if (brcmf_sdiod_set_sbaddr_window(sdiodev, sdiodev->sbwad)) in brcmf_sdiod_ramrw()
865 sdiodev->sbwad); in brcmf_sdiod_ramrw()
867 sdio_release_host(sdiodev->func[1]); in brcmf_sdiod_ramrw()
872 int brcmf_sdiod_abort(struct brcmf_sdio_dev *sdiodev, uint fn) in brcmf_sdiod_abort() argument
878 brcmf_sdiod_request_data(sdiodev, SDIO_FUNC_0, SDIO_CCCR_ABORT, in brcmf_sdiod_abort()
885 static void brcmf_sdiod_sgtable_alloc(struct brcmf_sdio_dev *sdiodev) in brcmf_sdiod_sgtable_alloc() argument
890 if (!sdiodev->sg_support) in brcmf_sdiod_sgtable_alloc()
896 WARN_ON(nents > sdiodev->max_segment_count); in brcmf_sdiod_sgtable_alloc()
899 err = sg_alloc_table(&sdiodev->sgtable, nents, GFP_KERNEL); in brcmf_sdiod_sgtable_alloc()
902 sdiodev->sg_support = false; in brcmf_sdiod_sgtable_alloc()
905 sdiodev->txglomsz = brcmf_sdiod_txglomsz; in brcmf_sdiod_sgtable_alloc()
909 static int brcmf_sdiod_freezer_attach(struct brcmf_sdio_dev *sdiodev) in brcmf_sdiod_freezer_attach() argument
911 sdiodev->freezer = kzalloc(sizeof(*sdiodev->freezer), GFP_KERNEL); in brcmf_sdiod_freezer_attach()
912 if (!sdiodev->freezer) in brcmf_sdiod_freezer_attach()
914 atomic_set(&sdiodev->freezer->thread_count, 0); in brcmf_sdiod_freezer_attach()
915 atomic_set(&sdiodev->freezer->freezing, 0); in brcmf_sdiod_freezer_attach()
916 init_waitqueue_head(&sdiodev->freezer->thread_freeze); in brcmf_sdiod_freezer_attach()
917 init_completion(&sdiodev->freezer->resumed); in brcmf_sdiod_freezer_attach()
921 static void brcmf_sdiod_freezer_detach(struct brcmf_sdio_dev *sdiodev) in brcmf_sdiod_freezer_detach() argument
923 if (sdiodev->freezer) { in brcmf_sdiod_freezer_detach()
924 WARN_ON(atomic_read(&sdiodev->freezer->freezing)); in brcmf_sdiod_freezer_detach()
925 kfree(sdiodev->freezer); in brcmf_sdiod_freezer_detach()
929 static int brcmf_sdiod_freezer_on(struct brcmf_sdio_dev *sdiodev) in brcmf_sdiod_freezer_on() argument
931 atomic_t *expect = &sdiodev->freezer->thread_count; in brcmf_sdiod_freezer_on()
934 sdiodev->freezer->frozen_count = 0; in brcmf_sdiod_freezer_on()
935 reinit_completion(&sdiodev->freezer->resumed); in brcmf_sdiod_freezer_on()
936 atomic_set(&sdiodev->freezer->freezing, 1); in brcmf_sdiod_freezer_on()
937 brcmf_sdio_trigger_dpc(sdiodev->bus); in brcmf_sdiod_freezer_on()
938 wait_event(sdiodev->freezer->thread_freeze, in brcmf_sdiod_freezer_on()
939 atomic_read(expect) == sdiodev->freezer->frozen_count); in brcmf_sdiod_freezer_on()
940 sdio_claim_host(sdiodev->func[1]); in brcmf_sdiod_freezer_on()
941 res = brcmf_sdio_sleep(sdiodev->bus, true); in brcmf_sdiod_freezer_on()
942 sdio_release_host(sdiodev->func[1]); in brcmf_sdiod_freezer_on()
946 static void brcmf_sdiod_freezer_off(struct brcmf_sdio_dev *sdiodev) in brcmf_sdiod_freezer_off() argument
948 sdio_claim_host(sdiodev->func[1]); in brcmf_sdiod_freezer_off()
949 brcmf_sdio_sleep(sdiodev->bus, false); in brcmf_sdiod_freezer_off()
950 sdio_release_host(sdiodev->func[1]); in brcmf_sdiod_freezer_off()
951 atomic_set(&sdiodev->freezer->freezing, 0); in brcmf_sdiod_freezer_off()
952 complete_all(&sdiodev->freezer->resumed); in brcmf_sdiod_freezer_off()
955 bool brcmf_sdiod_freezing(struct brcmf_sdio_dev *sdiodev) in brcmf_sdiod_freezing() argument
957 return atomic_read(&sdiodev->freezer->freezing); in brcmf_sdiod_freezing()
960 void brcmf_sdiod_try_freeze(struct brcmf_sdio_dev *sdiodev) in brcmf_sdiod_try_freeze() argument
962 if (!brcmf_sdiod_freezing(sdiodev)) in brcmf_sdiod_try_freeze()
964 sdiodev->freezer->frozen_count++; in brcmf_sdiod_try_freeze()
965 wake_up(&sdiodev->freezer->thread_freeze); in brcmf_sdiod_try_freeze()
966 wait_for_completion(&sdiodev->freezer->resumed); in brcmf_sdiod_try_freeze()
969 void brcmf_sdiod_freezer_count(struct brcmf_sdio_dev *sdiodev) in brcmf_sdiod_freezer_count() argument
971 atomic_inc(&sdiodev->freezer->thread_count); in brcmf_sdiod_freezer_count()
974 void brcmf_sdiod_freezer_uncount(struct brcmf_sdio_dev *sdiodev) in brcmf_sdiod_freezer_uncount() argument
976 atomic_dec(&sdiodev->freezer->thread_count); in brcmf_sdiod_freezer_uncount()
979 static int brcmf_sdiod_freezer_attach(struct brcmf_sdio_dev *sdiodev) in brcmf_sdiod_freezer_attach() argument
984 static void brcmf_sdiod_freezer_detach(struct brcmf_sdio_dev *sdiodev) in brcmf_sdiod_freezer_detach() argument
989 static int brcmf_sdiod_remove(struct brcmf_sdio_dev *sdiodev) in brcmf_sdiod_remove() argument
991 sdiodev->state = BRCMF_SDIOD_DOWN; in brcmf_sdiod_remove()
992 if (sdiodev->bus) { in brcmf_sdiod_remove()
993 brcmf_sdio_remove(sdiodev->bus); in brcmf_sdiod_remove()
994 sdiodev->bus = NULL; in brcmf_sdiod_remove()
997 brcmf_sdiod_freezer_detach(sdiodev); in brcmf_sdiod_remove()
1000 sdio_claim_host(sdiodev->func[2]); in brcmf_sdiod_remove()
1001 sdio_disable_func(sdiodev->func[2]); in brcmf_sdiod_remove()
1002 sdio_release_host(sdiodev->func[2]); in brcmf_sdiod_remove()
1005 sdio_claim_host(sdiodev->func[1]); in brcmf_sdiod_remove()
1006 sdio_disable_func(sdiodev->func[1]); in brcmf_sdiod_remove()
1007 sdio_release_host(sdiodev->func[1]); in brcmf_sdiod_remove()
1009 sg_free_table(&sdiodev->sgtable); in brcmf_sdiod_remove()
1010 sdiodev->sbwad = 0; in brcmf_sdiod_remove()
1012 pm_runtime_allow(sdiodev->func[1]->card->host->parent); in brcmf_sdiod_remove()
1024 static int brcmf_sdiod_probe(struct brcmf_sdio_dev *sdiodev) in brcmf_sdiod_probe() argument
1031 sdiodev->num_funcs = 2; in brcmf_sdiod_probe()
1033 sdio_claim_host(sdiodev->func[1]); in brcmf_sdiod_probe()
1035 ret = sdio_set_block_size(sdiodev->func[1], SDIO_FUNC1_BLOCKSIZE); in brcmf_sdiod_probe()
1038 sdio_release_host(sdiodev->func[1]); in brcmf_sdiod_probe()
1041 ret = sdio_set_block_size(sdiodev->func[2], SDIO_FUNC2_BLOCKSIZE); in brcmf_sdiod_probe()
1044 sdio_release_host(sdiodev->func[1]); in brcmf_sdiod_probe()
1049 sdiodev->func[2]->enable_timeout = SDIO_WAIT_F2RDY; in brcmf_sdiod_probe()
1052 ret = sdio_enable_func(sdiodev->func[1]); in brcmf_sdiod_probe()
1053 sdio_release_host(sdiodev->func[1]); in brcmf_sdiod_probe()
1064 func = sdiodev->func[2]; in brcmf_sdiod_probe()
1066 sdiodev->sg_support = host->max_segs > 1; in brcmf_sdiod_probe()
1068 sdiodev->max_request_size = min_t(uint, host->max_req_size, in brcmf_sdiod_probe()
1070 sdiodev->max_segment_count = min_t(uint, host->max_segs, in brcmf_sdiod_probe()
1072 sdiodev->max_segment_size = host->max_seg_size; in brcmf_sdiod_probe()
1077 brcmf_sdiod_sgtable_alloc(sdiodev); in brcmf_sdiod_probe()
1079 ret = brcmf_sdiod_freezer_attach(sdiodev); in brcmf_sdiod_probe()
1084 sdiodev->bus = brcmf_sdio_probe(sdiodev); in brcmf_sdiod_probe()
1085 if (!sdiodev->bus) { in brcmf_sdiod_probe()
1092 brcmf_sdiod_remove(sdiodev); in brcmf_sdiod_probe()
1137 struct brcmf_sdio_dev *sdiodev; in brcmf_ops_sdio_probe() local
1162 sdiodev = kzalloc(sizeof(struct brcmf_sdio_dev), GFP_KERNEL); in brcmf_ops_sdio_probe()
1163 if (!sdiodev) { in brcmf_ops_sdio_probe()
1171 sdiodev->func[0] = kmemdup(func, sizeof(*func), GFP_KERNEL); in brcmf_ops_sdio_probe()
1172 sdiodev->func[0]->num = 0; in brcmf_ops_sdio_probe()
1173 sdiodev->func[1] = func->card->sdio_func[0]; in brcmf_ops_sdio_probe()
1174 sdiodev->func[2] = func; in brcmf_ops_sdio_probe()
1176 sdiodev->bus_if = bus_if; in brcmf_ops_sdio_probe()
1177 bus_if->bus_priv.sdio = sdiodev; in brcmf_ops_sdio_probe()
1180 dev_set_drvdata(&sdiodev->func[1]->dev, bus_if); in brcmf_ops_sdio_probe()
1181 sdiodev->dev = &sdiodev->func[1]->dev; in brcmf_ops_sdio_probe()
1182 sdiodev->pdata = brcmfmac_sdio_pdata; in brcmf_ops_sdio_probe()
1184 if (!sdiodev->pdata) in brcmf_ops_sdio_probe()
1185 brcmf_of_probe(sdiodev); in brcmf_ops_sdio_probe()
1191 if ((sdio_get_host_pm_caps(sdiodev->func[1]) & MMC_PM_KEEP_POWER) && in brcmf_ops_sdio_probe()
1192 ((sdio_get_host_pm_caps(sdiodev->func[1]) & MMC_PM_WAKE_SDIO_IRQ) || in brcmf_ops_sdio_probe()
1193 (sdiodev->pdata && sdiodev->pdata->oob_irq_supported))) in brcmf_ops_sdio_probe()
1197 brcmf_sdiod_change_state(sdiodev, BRCMF_SDIOD_DOWN); in brcmf_ops_sdio_probe()
1200 err = brcmf_sdiod_probe(sdiodev); in brcmf_ops_sdio_probe()
1211 dev_set_drvdata(&sdiodev->func[1]->dev, NULL); in brcmf_ops_sdio_probe()
1212 kfree(sdiodev->func[0]); in brcmf_ops_sdio_probe()
1213 kfree(sdiodev); in brcmf_ops_sdio_probe()
1221 struct brcmf_sdio_dev *sdiodev; in brcmf_ops_sdio_remove() local
1233 sdiodev = bus_if->bus_priv.sdio; in brcmf_ops_sdio_remove()
1234 brcmf_sdiod_remove(sdiodev); in brcmf_ops_sdio_remove()
1236 dev_set_drvdata(&sdiodev->func[1]->dev, NULL); in brcmf_ops_sdio_remove()
1237 dev_set_drvdata(&sdiodev->func[2]->dev, NULL); in brcmf_ops_sdio_remove()
1240 kfree(sdiodev->func[0]); in brcmf_ops_sdio_remove()
1241 kfree(sdiodev); in brcmf_ops_sdio_remove()
1250 struct brcmf_sdio_dev *sdiodev = bus_if->bus_priv.sdio; in brcmf_sdio_wowl_config() local
1253 sdiodev->wowl_enabled = enabled; in brcmf_sdio_wowl_config()
1261 struct brcmf_sdio_dev *sdiodev; in brcmf_ops_sdio_suspend() local
1271 sdiodev = bus_if->bus_priv.sdio; in brcmf_ops_sdio_suspend()
1273 brcmf_sdiod_freezer_on(sdiodev); in brcmf_ops_sdio_suspend()
1274 brcmf_sdio_wd_timer(sdiodev->bus, 0); in brcmf_ops_sdio_suspend()
1277 if (sdiodev->wowl_enabled) { in brcmf_ops_sdio_suspend()
1278 if (sdiodev->pdata->oob_irq_supported) in brcmf_ops_sdio_suspend()
1279 enable_irq_wake(sdiodev->pdata->oob_irq_nr); in brcmf_ops_sdio_suspend()
1283 if (sdio_set_host_pm_flags(sdiodev->func[1], sdio_flags)) in brcmf_ops_sdio_suspend()
1291 struct brcmf_sdio_dev *sdiodev = bus_if->bus_priv.sdio; in brcmf_ops_sdio_resume() local
1298 brcmf_sdiod_freezer_off(sdiodev); in brcmf_ops_sdio_resume()