Lines Matching refs:sdiodev

65 	struct brcmf_sdio_dev *sdiodev = bus_if->bus_priv.sdio;  in brcmf_sdiod_oob_irqhandler()  local
72 if (sdiodev->irq_en) { in brcmf_sdiod_oob_irqhandler()
74 sdiodev->irq_en = false; in brcmf_sdiod_oob_irqhandler()
77 brcmf_sdio_isr(sdiodev->bus, true); in brcmf_sdiod_oob_irqhandler()
85 struct brcmf_sdio_dev *sdiodev = bus_if->bus_priv.sdio; in brcmf_sdiod_ib_irqhandler() local
89 brcmf_sdio_isr(sdiodev->bus, false); in brcmf_sdiod_ib_irqhandler()
97 int brcmf_sdiod_intr_register(struct brcmf_sdio_dev *sdiodev) in brcmf_sdiod_intr_register() argument
104 pdata = &sdiodev->settings->bus.sdio; in brcmf_sdiod_intr_register()
108 spin_lock_init(&sdiodev->irq_en_lock); in brcmf_sdiod_intr_register()
109 sdiodev->irq_en = true; in brcmf_sdiod_intr_register()
113 &sdiodev->func1->dev); in brcmf_sdiod_intr_register()
118 sdiodev->oob_irq_requested = true; in brcmf_sdiod_intr_register()
127 sdio_claim_host(sdiodev->func1); in brcmf_sdiod_intr_register()
129 if (sdiodev->bus_if->chip == BRCM_CC_43362_CHIP_ID) { in brcmf_sdiod_intr_register()
131 addr = brcmf_chip_enum_base(sdiodev->func1->device); in brcmf_sdiod_intr_register()
133 gpiocontrol = brcmf_sdiod_readl(sdiodev, addr, &ret); in brcmf_sdiod_intr_register()
135 brcmf_sdiod_writel(sdiodev, addr, gpiocontrol, &ret); in brcmf_sdiod_intr_register()
137 brcmf_sdiod_writeb(sdiodev, SBSDIO_GPIO_SELECT, in brcmf_sdiod_intr_register()
139 brcmf_sdiod_writeb(sdiodev, SBSDIO_GPIO_OUT, 0, &ret); in brcmf_sdiod_intr_register()
140 brcmf_sdiod_writeb(sdiodev, SBSDIO_GPIO_EN, 0x2, &ret); in brcmf_sdiod_intr_register()
144 data = brcmf_sdiod_func0_rb(sdiodev, SDIO_CCCR_IENx, &ret); in brcmf_sdiod_intr_register()
147 brcmf_sdiod_func0_wb(sdiodev, SDIO_CCCR_IENx, data, &ret); in brcmf_sdiod_intr_register()
153 brcmf_sdiod_func0_wb(sdiodev, SDIO_CCCR_BRCM_SEPINT, in brcmf_sdiod_intr_register()
155 sdio_release_host(sdiodev->func1); in brcmf_sdiod_intr_register()
158 sdio_claim_host(sdiodev->func1); in brcmf_sdiod_intr_register()
159 sdio_claim_irq(sdiodev->func1, brcmf_sdiod_ib_irqhandler); in brcmf_sdiod_intr_register()
160 sdio_claim_irq(sdiodev->func2, brcmf_sdiod_dummy_irqhandler); in brcmf_sdiod_intr_register()
161 sdio_release_host(sdiodev->func1); in brcmf_sdiod_intr_register()
162 sdiodev->sd_irq_requested = true; in brcmf_sdiod_intr_register()
168 void brcmf_sdiod_intr_unregister(struct brcmf_sdio_dev *sdiodev) in brcmf_sdiod_intr_unregister() argument
172 sdiodev->oob_irq_requested, in brcmf_sdiod_intr_unregister()
173 sdiodev->sd_irq_requested); in brcmf_sdiod_intr_unregister()
175 if (sdiodev->oob_irq_requested) { in brcmf_sdiod_intr_unregister()
178 pdata = &sdiodev->settings->bus.sdio; in brcmf_sdiod_intr_unregister()
179 sdio_claim_host(sdiodev->func1); in brcmf_sdiod_intr_unregister()
180 brcmf_sdiod_func0_wb(sdiodev, SDIO_CCCR_BRCM_SEPINT, 0, NULL); in brcmf_sdiod_intr_unregister()
181 brcmf_sdiod_func0_wb(sdiodev, SDIO_CCCR_IENx, 0, NULL); in brcmf_sdiod_intr_unregister()
182 sdio_release_host(sdiodev->func1); in brcmf_sdiod_intr_unregister()
184 sdiodev->oob_irq_requested = false; in brcmf_sdiod_intr_unregister()
185 free_irq(pdata->oob_irq_nr, &sdiodev->func1->dev); in brcmf_sdiod_intr_unregister()
186 sdiodev->irq_en = false; in brcmf_sdiod_intr_unregister()
187 sdiodev->oob_irq_requested = false; in brcmf_sdiod_intr_unregister()
190 if (sdiodev->sd_irq_requested) { in brcmf_sdiod_intr_unregister()
191 sdio_claim_host(sdiodev->func1); in brcmf_sdiod_intr_unregister()
192 sdio_release_irq(sdiodev->func2); in brcmf_sdiod_intr_unregister()
193 sdio_release_irq(sdiodev->func1); in brcmf_sdiod_intr_unregister()
194 sdio_release_host(sdiodev->func1); in brcmf_sdiod_intr_unregister()
195 sdiodev->sd_irq_requested = false; in brcmf_sdiod_intr_unregister()
199 void brcmf_sdiod_change_state(struct brcmf_sdio_dev *sdiodev, in brcmf_sdiod_change_state() argument
202 if (sdiodev->state == BRCMF_SDIOD_NOMEDIUM || in brcmf_sdiod_change_state()
203 state == sdiodev->state) in brcmf_sdiod_change_state()
206 brcmf_dbg(TRACE, "%d -> %d\n", sdiodev->state, state); in brcmf_sdiod_change_state()
207 switch (sdiodev->state) { in brcmf_sdiod_change_state()
210 brcmf_bus_change_state(sdiodev->bus_if, BRCMF_BUS_DOWN); in brcmf_sdiod_change_state()
215 brcmf_bus_change_state(sdiodev->bus_if, BRCMF_BUS_UP); in brcmf_sdiod_change_state()
220 sdiodev->state = state; in brcmf_sdiod_change_state()
223 static int brcmf_sdiod_set_backplane_window(struct brcmf_sdio_dev *sdiodev, in brcmf_sdiod_set_backplane_window() argument
229 if (bar0 == sdiodev->sbwad) in brcmf_sdiod_set_backplane_window()
235 brcmf_sdiod_writeb(sdiodev, SBSDIO_FUNC1_SBADDRLOW + i, in brcmf_sdiod_set_backplane_window()
239 sdiodev->sbwad = bar0; in brcmf_sdiod_set_backplane_window()
244 u32 brcmf_sdiod_readl(struct brcmf_sdio_dev *sdiodev, u32 addr, int *ret) in brcmf_sdiod_readl() argument
249 retval = brcmf_sdiod_set_backplane_window(sdiodev, addr); in brcmf_sdiod_readl()
256 data = sdio_readl(sdiodev->func1, addr, &retval); in brcmf_sdiod_readl()
265 void brcmf_sdiod_writel(struct brcmf_sdio_dev *sdiodev, u32 addr, in brcmf_sdiod_writel() argument
270 retval = brcmf_sdiod_set_backplane_window(sdiodev, addr); in brcmf_sdiod_writel()
277 sdio_writel(sdiodev->func1, data, addr, &retval); in brcmf_sdiod_writel()
284 static int brcmf_sdiod_skbuff_read(struct brcmf_sdio_dev *sdiodev, in brcmf_sdiod_skbuff_read() argument
310 brcmf_sdiod_change_state(sdiodev, BRCMF_SDIOD_NOMEDIUM); in brcmf_sdiod_skbuff_read()
315 static int brcmf_sdiod_skbuff_write(struct brcmf_sdio_dev *sdiodev, in brcmf_sdiod_skbuff_write() argument
329 brcmf_sdiod_change_state(sdiodev, BRCMF_SDIOD_NOMEDIUM); in brcmf_sdiod_skbuff_write()
337 struct brcmf_sdio_dev *sdiodev, in mmc_submit_one() argument
355 brcmf_sdiod_change_state(sdiodev, BRCMF_SDIOD_NOMEDIUM); in mmc_submit_one()
377 static int brcmf_sdiod_sglist_rw(struct brcmf_sdio_dev *sdiodev, in brcmf_sdiod_sglist_rw() argument
400 if (!write && sdiodev->settings->bus.sdio.broken_sg_support) { in brcmf_sdiod_sglist_rw()
424 max_req_sz = sdiodev->max_request_size; in brcmf_sdiod_sglist_rw()
425 max_seg_cnt = min_t(unsigned short, sdiodev->max_segment_count, in brcmf_sdiod_sglist_rw()
432 mmc_dat.sg = sdiodev->sgtable.sgl; in brcmf_sdiod_sglist_rw()
447 sgl = sdiodev->sgtable.sgl; in brcmf_sdiod_sglist_rw()
453 if (sg_data_sz > sdiodev->max_segment_size) in brcmf_sdiod_sglist_rw()
454 sg_data_sz = sdiodev->max_segment_size; in brcmf_sdiod_sglist_rw()
467 &addr, sdiodev, func, write); in brcmf_sdiod_sglist_rw()
472 sgl = sdiodev->sgtable.sgl; in brcmf_sdiod_sglist_rw()
479 &addr, sdiodev, func, write); in brcmf_sdiod_sglist_rw()
481 if (!write && sdiodev->settings->bus.sdio.broken_sg_support) { in brcmf_sdiod_sglist_rw()
512 sg_init_table(sdiodev->sgtable.sgl, sdiodev->sgtable.orig_nents); in brcmf_sdiod_sglist_rw()
519 int brcmf_sdiod_recv_buf(struct brcmf_sdio_dev *sdiodev, u8 *buf, uint nbytes) in brcmf_sdiod_recv_buf() argument
531 err = brcmf_sdiod_recv_pkt(sdiodev, mypkt); in brcmf_sdiod_recv_buf()
539 int brcmf_sdiod_recv_pkt(struct brcmf_sdio_dev *sdiodev, struct sk_buff *pkt) in brcmf_sdiod_recv_pkt() argument
541 u32 addr = sdiodev->cc_core->base; in brcmf_sdiod_recv_pkt()
546 err = brcmf_sdiod_set_backplane_window(sdiodev, addr); in brcmf_sdiod_recv_pkt()
553 err = brcmf_sdiod_skbuff_read(sdiodev, sdiodev->func2, addr, pkt); in brcmf_sdiod_recv_pkt()
559 int brcmf_sdiod_recv_chain(struct brcmf_sdio_dev *sdiodev, in brcmf_sdiod_recv_chain() argument
564 u32 addr = sdiodev->cc_core->base; in brcmf_sdiod_recv_chain()
570 err = brcmf_sdiod_set_backplane_window(sdiodev, addr); in brcmf_sdiod_recv_chain()
578 err = brcmf_sdiod_skbuff_read(sdiodev, sdiodev->func2, addr, in brcmf_sdiod_recv_chain()
580 else if (!sdiodev->sg_support) { in brcmf_sdiod_recv_chain()
584 err = brcmf_sdiod_skbuff_read(sdiodev, sdiodev->func2, addr, in brcmf_sdiod_recv_chain()
594 err = brcmf_sdiod_sglist_rw(sdiodev, sdiodev->func2, false, in brcmf_sdiod_recv_chain()
602 int brcmf_sdiod_send_buf(struct brcmf_sdio_dev *sdiodev, u8 *buf, uint nbytes) in brcmf_sdiod_send_buf() argument
605 u32 addr = sdiodev->cc_core->base; in brcmf_sdiod_send_buf()
618 err = brcmf_sdiod_set_backplane_window(sdiodev, addr); in brcmf_sdiod_send_buf()
625 err = brcmf_sdiod_skbuff_write(sdiodev, sdiodev->func2, addr, mypkt); in brcmf_sdiod_send_buf()
632 int brcmf_sdiod_send_pkt(struct brcmf_sdio_dev *sdiodev, in brcmf_sdiod_send_pkt() argument
636 u32 addr = sdiodev->cc_core->base; in brcmf_sdiod_send_pkt()
641 err = brcmf_sdiod_set_backplane_window(sdiodev, addr); in brcmf_sdiod_send_pkt()
648 if (pktq->qlen == 1 || !sdiodev->sg_support) { in brcmf_sdiod_send_pkt()
650 err = brcmf_sdiod_skbuff_write(sdiodev, sdiodev->func2, in brcmf_sdiod_send_pkt()
656 err = brcmf_sdiod_sglist_rw(sdiodev, sdiodev->func2, true, in brcmf_sdiod_send_pkt()
664 brcmf_sdiod_ramrw(struct brcmf_sdio_dev *sdiodev, bool write, u32 address, in brcmf_sdiod_ramrw() argument
687 sdio_claim_host(sdiodev->func1); in brcmf_sdiod_ramrw()
692 err = brcmf_sdiod_set_backplane_window(sdiodev, address); in brcmf_sdiod_ramrw()
707 err = brcmf_sdiod_skbuff_write(sdiodev, sdiodev->func1, in brcmf_sdiod_ramrw()
710 err = brcmf_sdiod_skbuff_read(sdiodev, sdiodev->func1, in brcmf_sdiod_ramrw()
734 sdio_release_host(sdiodev->func1); in brcmf_sdiod_ramrw()
739 int brcmf_sdiod_abort(struct brcmf_sdio_dev *sdiodev, struct sdio_func *func) in brcmf_sdiod_abort() argument
744 brcmf_sdiod_func0_wb(sdiodev, SDIO_CCCR_ABORT, func->num, NULL); in brcmf_sdiod_abort()
750 void brcmf_sdiod_sgtable_alloc(struct brcmf_sdio_dev *sdiodev) in brcmf_sdiod_sgtable_alloc() argument
758 func = sdiodev->func2; in brcmf_sdiod_sgtable_alloc()
760 sdiodev->sg_support = host->max_segs > 1; in brcmf_sdiod_sgtable_alloc()
762 sdiodev->max_request_size = min_t(uint, host->max_req_size, in brcmf_sdiod_sgtable_alloc()
764 sdiodev->max_segment_count = min_t(uint, host->max_segs, in brcmf_sdiod_sgtable_alloc()
766 sdiodev->max_segment_size = host->max_seg_size; in brcmf_sdiod_sgtable_alloc()
768 if (!sdiodev->sg_support) in brcmf_sdiod_sgtable_alloc()
772 sdiodev->settings->bus.sdio.txglomsz); in brcmf_sdiod_sgtable_alloc()
775 WARN_ON(nents > sdiodev->max_segment_count); in brcmf_sdiod_sgtable_alloc()
778 err = sg_alloc_table(&sdiodev->sgtable, nents, GFP_KERNEL); in brcmf_sdiod_sgtable_alloc()
781 sdiodev->sg_support = false; in brcmf_sdiod_sgtable_alloc()
784 sdiodev->txglomsz = sdiodev->settings->bus.sdio.txglomsz; in brcmf_sdiod_sgtable_alloc()
788 static int brcmf_sdiod_freezer_attach(struct brcmf_sdio_dev *sdiodev) in brcmf_sdiod_freezer_attach() argument
790 sdiodev->freezer = kzalloc(sizeof(*sdiodev->freezer), GFP_KERNEL); in brcmf_sdiod_freezer_attach()
791 if (!sdiodev->freezer) in brcmf_sdiod_freezer_attach()
793 atomic_set(&sdiodev->freezer->thread_count, 0); in brcmf_sdiod_freezer_attach()
794 atomic_set(&sdiodev->freezer->freezing, 0); in brcmf_sdiod_freezer_attach()
795 init_waitqueue_head(&sdiodev->freezer->thread_freeze); in brcmf_sdiod_freezer_attach()
796 init_completion(&sdiodev->freezer->resumed); in brcmf_sdiod_freezer_attach()
800 static void brcmf_sdiod_freezer_detach(struct brcmf_sdio_dev *sdiodev) in brcmf_sdiod_freezer_detach() argument
802 if (sdiodev->freezer) { in brcmf_sdiod_freezer_detach()
803 WARN_ON(atomic_read(&sdiodev->freezer->freezing)); in brcmf_sdiod_freezer_detach()
804 kfree(sdiodev->freezer); in brcmf_sdiod_freezer_detach()
808 static int brcmf_sdiod_freezer_on(struct brcmf_sdio_dev *sdiodev) in brcmf_sdiod_freezer_on() argument
810 atomic_t *expect = &sdiodev->freezer->thread_count; in brcmf_sdiod_freezer_on()
813 sdiodev->freezer->frozen_count = 0; in brcmf_sdiod_freezer_on()
814 reinit_completion(&sdiodev->freezer->resumed); in brcmf_sdiod_freezer_on()
815 atomic_set(&sdiodev->freezer->freezing, 1); in brcmf_sdiod_freezer_on()
816 brcmf_sdio_trigger_dpc(sdiodev->bus); in brcmf_sdiod_freezer_on()
817 wait_event(sdiodev->freezer->thread_freeze, in brcmf_sdiod_freezer_on()
818 atomic_read(expect) == sdiodev->freezer->frozen_count); in brcmf_sdiod_freezer_on()
819 sdio_claim_host(sdiodev->func1); in brcmf_sdiod_freezer_on()
820 res = brcmf_sdio_sleep(sdiodev->bus, true); in brcmf_sdiod_freezer_on()
821 sdio_release_host(sdiodev->func1); in brcmf_sdiod_freezer_on()
825 static void brcmf_sdiod_freezer_off(struct brcmf_sdio_dev *sdiodev) in brcmf_sdiod_freezer_off() argument
827 sdio_claim_host(sdiodev->func1); in brcmf_sdiod_freezer_off()
828 brcmf_sdio_sleep(sdiodev->bus, false); in brcmf_sdiod_freezer_off()
829 sdio_release_host(sdiodev->func1); in brcmf_sdiod_freezer_off()
830 atomic_set(&sdiodev->freezer->freezing, 0); in brcmf_sdiod_freezer_off()
831 complete_all(&sdiodev->freezer->resumed); in brcmf_sdiod_freezer_off()
834 bool brcmf_sdiod_freezing(struct brcmf_sdio_dev *sdiodev) in brcmf_sdiod_freezing() argument
836 return atomic_read(&sdiodev->freezer->freezing); in brcmf_sdiod_freezing()
839 void brcmf_sdiod_try_freeze(struct brcmf_sdio_dev *sdiodev) in brcmf_sdiod_try_freeze() argument
841 if (!brcmf_sdiod_freezing(sdiodev)) in brcmf_sdiod_try_freeze()
843 sdiodev->freezer->frozen_count++; in brcmf_sdiod_try_freeze()
844 wake_up(&sdiodev->freezer->thread_freeze); in brcmf_sdiod_try_freeze()
845 wait_for_completion(&sdiodev->freezer->resumed); in brcmf_sdiod_try_freeze()
848 void brcmf_sdiod_freezer_count(struct brcmf_sdio_dev *sdiodev) in brcmf_sdiod_freezer_count() argument
850 atomic_inc(&sdiodev->freezer->thread_count); in brcmf_sdiod_freezer_count()
853 void brcmf_sdiod_freezer_uncount(struct brcmf_sdio_dev *sdiodev) in brcmf_sdiod_freezer_uncount() argument
855 atomic_dec(&sdiodev->freezer->thread_count); in brcmf_sdiod_freezer_uncount()
858 static int brcmf_sdiod_freezer_attach(struct brcmf_sdio_dev *sdiodev) in brcmf_sdiod_freezer_attach() argument
863 static void brcmf_sdiod_freezer_detach(struct brcmf_sdio_dev *sdiodev) in brcmf_sdiod_freezer_detach() argument
868 int brcmf_sdiod_remove(struct brcmf_sdio_dev *sdiodev) in brcmf_sdiod_remove() argument
870 sdiodev->state = BRCMF_SDIOD_DOWN; in brcmf_sdiod_remove()
871 if (sdiodev->bus) { in brcmf_sdiod_remove()
872 brcmf_sdio_remove(sdiodev->bus); in brcmf_sdiod_remove()
873 sdiodev->bus = NULL; in brcmf_sdiod_remove()
876 brcmf_sdiod_freezer_detach(sdiodev); in brcmf_sdiod_remove()
879 sdio_claim_host(sdiodev->func2); in brcmf_sdiod_remove()
880 sdio_disable_func(sdiodev->func2); in brcmf_sdiod_remove()
881 sdio_release_host(sdiodev->func2); in brcmf_sdiod_remove()
884 sdio_claim_host(sdiodev->func1); in brcmf_sdiod_remove()
885 sdio_disable_func(sdiodev->func1); in brcmf_sdiod_remove()
886 sdio_release_host(sdiodev->func1); in brcmf_sdiod_remove()
888 sg_free_table(&sdiodev->sgtable); in brcmf_sdiod_remove()
889 sdiodev->sbwad = 0; in brcmf_sdiod_remove()
891 pm_runtime_allow(sdiodev->func1->card->host->parent); in brcmf_sdiod_remove()
903 int brcmf_sdiod_probe(struct brcmf_sdio_dev *sdiodev) in brcmf_sdiod_probe() argument
908 sdio_claim_host(sdiodev->func1); in brcmf_sdiod_probe()
910 ret = sdio_set_block_size(sdiodev->func1, SDIO_FUNC1_BLOCKSIZE); in brcmf_sdiod_probe()
913 sdio_release_host(sdiodev->func1); in brcmf_sdiod_probe()
916 switch (sdiodev->func2->device) { in brcmf_sdiod_probe()
932 ret = sdio_set_block_size(sdiodev->func2, f2_blksz); in brcmf_sdiod_probe()
935 sdio_release_host(sdiodev->func1); in brcmf_sdiod_probe()
942 sdiodev->func2->enable_timeout = SDIO_WAIT_F2RDY; in brcmf_sdiod_probe()
945 ret = sdio_enable_func(sdiodev->func1); in brcmf_sdiod_probe()
946 sdio_release_host(sdiodev->func1); in brcmf_sdiod_probe()
952 ret = brcmf_sdiod_freezer_attach(sdiodev); in brcmf_sdiod_probe()
957 sdiodev->bus = brcmf_sdio_probe(sdiodev); in brcmf_sdiod_probe()
958 if (!sdiodev->bus) { in brcmf_sdiod_probe()
962 brcmf_sdiod_host_fixup(sdiodev->func2->card->host); in brcmf_sdiod_probe()
965 brcmf_sdiod_remove(sdiodev); in brcmf_sdiod_probe()
1017 struct brcmf_sdio_dev *sdiodev; in brcmf_ops_sdio_probe() local
1046 sdiodev = kzalloc(sizeof(struct brcmf_sdio_dev), GFP_KERNEL); in brcmf_ops_sdio_probe()
1047 if (!sdiodev) { in brcmf_ops_sdio_probe()
1055 sdiodev->func1 = func->card->sdio_func[0]; in brcmf_ops_sdio_probe()
1056 sdiodev->func2 = func; in brcmf_ops_sdio_probe()
1058 sdiodev->bus_if = bus_if; in brcmf_ops_sdio_probe()
1059 bus_if->bus_priv.sdio = sdiodev; in brcmf_ops_sdio_probe()
1062 dev_set_drvdata(&sdiodev->func1->dev, bus_if); in brcmf_ops_sdio_probe()
1063 sdiodev->dev = &sdiodev->func1->dev; in brcmf_ops_sdio_probe()
1065 brcmf_sdiod_change_state(sdiodev, BRCMF_SDIOD_DOWN); in brcmf_ops_sdio_probe()
1068 err = brcmf_sdiod_probe(sdiodev); in brcmf_ops_sdio_probe()
1079 dev_set_drvdata(&sdiodev->func1->dev, NULL); in brcmf_ops_sdio_probe()
1080 kfree(sdiodev); in brcmf_ops_sdio_probe()
1088 struct brcmf_sdio_dev *sdiodev; in brcmf_ops_sdio_remove() local
1097 sdiodev = bus_if->bus_priv.sdio; in brcmf_ops_sdio_remove()
1100 brcmf_sdiod_intr_unregister(sdiodev); in brcmf_ops_sdio_remove()
1106 brcmf_sdiod_remove(sdiodev); in brcmf_ops_sdio_remove()
1108 dev_set_drvdata(&sdiodev->func1->dev, NULL); in brcmf_ops_sdio_remove()
1109 dev_set_drvdata(&sdiodev->func2->dev, NULL); in brcmf_ops_sdio_remove()
1112 kfree(sdiodev); in brcmf_ops_sdio_remove()
1121 struct brcmf_sdio_dev *sdiodev = bus_if->bus_priv.sdio; in brcmf_sdio_wowl_config() local
1124 sdiodev->wowl_enabled = enabled; in brcmf_sdio_wowl_config()
1132 struct brcmf_sdio_dev *sdiodev; in brcmf_ops_sdio_suspend() local
1143 sdiodev = bus_if->bus_priv.sdio; in brcmf_ops_sdio_suspend()
1149 brcmf_sdiod_freezer_on(sdiodev); in brcmf_ops_sdio_suspend()
1150 brcmf_sdio_wd_timer(sdiodev->bus, 0); in brcmf_ops_sdio_suspend()
1153 if (sdiodev->wowl_enabled) { in brcmf_ops_sdio_suspend()
1154 if (sdiodev->settings->bus.sdio.oob_irq_supported) in brcmf_ops_sdio_suspend()
1155 enable_irq_wake(sdiodev->settings->bus.sdio.oob_irq_nr); in brcmf_ops_sdio_suspend()
1160 if (sdio_set_host_pm_flags(sdiodev->func1, sdio_flags)) in brcmf_ops_sdio_suspend()
1165 brcmf_sdiod_intr_unregister(sdiodev); in brcmf_ops_sdio_suspend()
1166 ret = brcmf_sdiod_remove(sdiodev); in brcmf_ops_sdio_suspend()
1177 struct brcmf_sdio_dev *sdiodev = bus_if->bus_priv.sdio; in brcmf_ops_sdio_resume() local
1188 ret = brcmf_sdiod_probe(sdiodev); in brcmf_ops_sdio_resume()
1192 if (sdiodev->wowl_enabled && in brcmf_ops_sdio_resume()
1193 sdiodev->settings->bus.sdio.oob_irq_supported) in brcmf_ops_sdio_resume()
1194 disable_irq_wake(sdiodev->settings->bus.sdio.oob_irq_nr); in brcmf_ops_sdio_resume()
1196 brcmf_sdiod_freezer_off(sdiodev); in brcmf_ops_sdio_resume()