Lines Matching full:wilc
61 static int wilc_sdio_cmd52(struct wilc *wilc, struct sdio_cmd52 *cmd) in wilc_sdio_cmd52() argument
63 struct sdio_func *func = container_of(wilc->dev, struct sdio_func, dev); in wilc_sdio_cmd52()
90 static int wilc_sdio_cmd53(struct wilc *wilc, struct sdio_cmd53 *cmd) in wilc_sdio_cmd53() argument
92 struct sdio_func *func = container_of(wilc->dev, struct sdio_func, dev); in wilc_sdio_cmd53()
123 struct wilc *wilc; in wilc_sdio_probe() local
131 ret = wilc_cfg80211_init(&wilc, &func->dev, WILC_HIF_SDIO, in wilc_sdio_probe()
143 wilc->dev_irq_num = irq_num; in wilc_sdio_probe()
148 sdio_set_drvdata(func, wilc); in wilc_sdio_probe()
149 wilc->bus_data = sdio_priv; in wilc_sdio_probe()
150 wilc->dev = &func->dev; in wilc_sdio_probe()
152 wilc->rtc_clk = devm_clk_get(&func->card->dev, "rtc"); in wilc_sdio_probe()
153 if (PTR_ERR_OR_ZERO(wilc->rtc_clk) == -EPROBE_DEFER) { in wilc_sdio_probe()
156 } else if (!IS_ERR(wilc->rtc_clk)) in wilc_sdio_probe()
157 clk_prepare_enable(wilc->rtc_clk); in wilc_sdio_probe()
165 struct wilc *wilc = sdio_get_drvdata(func); in wilc_sdio_remove() local
167 if (!IS_ERR(wilc->rtc_clk)) in wilc_sdio_remove()
168 clk_disable_unprepare(wilc->rtc_clk); in wilc_sdio_remove()
170 wilc_netdev_cleanup(wilc); in wilc_sdio_remove()
173 static int wilc_sdio_reset(struct wilc *wilc) in wilc_sdio_reset() argument
177 struct sdio_func *func = dev_to_sdio_func(wilc->dev); in wilc_sdio_reset()
184 ret = wilc_sdio_cmd52(wilc, &cmd); in wilc_sdio_reset()
195 struct wilc *wilc = sdio_get_drvdata(func); in wilc_sdio_suspend() local
199 chip_wakeup(wilc); in wilc_sdio_suspend()
201 if (!IS_ERR(wilc->rtc_clk)) in wilc_sdio_suspend()
202 clk_disable_unprepare(wilc->rtc_clk); in wilc_sdio_suspend()
204 if (wilc->suspend_event) { in wilc_sdio_suspend()
205 host_sleep_notify(wilc); in wilc_sdio_suspend()
206 chip_allow_sleep(wilc); in wilc_sdio_suspend()
209 ret = wilc_sdio_reset(wilc); in wilc_sdio_suspend()
219 static int wilc_sdio_enable_interrupt(struct wilc *dev) in wilc_sdio_enable_interrupt()
235 static void wilc_sdio_disable_interrupt(struct wilc *dev) in wilc_sdio_disable_interrupt()
253 static int wilc_sdio_set_func0_csa_address(struct wilc *wilc, u32 adr) in wilc_sdio_set_func0_csa_address() argument
255 struct sdio_func *func = dev_to_sdio_func(wilc->dev); in wilc_sdio_set_func0_csa_address()
267 ret = wilc_sdio_cmd52(wilc, &cmd); in wilc_sdio_set_func0_csa_address()
276 ret = wilc_sdio_cmd52(wilc, &cmd); in wilc_sdio_set_func0_csa_address()
285 ret = wilc_sdio_cmd52(wilc, &cmd); in wilc_sdio_set_func0_csa_address()
295 static int wilc_sdio_set_block_size(struct wilc *wilc, u8 func_num, in wilc_sdio_set_block_size() argument
298 struct sdio_func *func = dev_to_sdio_func(wilc->dev); in wilc_sdio_set_block_size()
307 ret = wilc_sdio_cmd52(wilc, &cmd); in wilc_sdio_set_block_size()
316 ret = wilc_sdio_cmd52(wilc, &cmd); in wilc_sdio_set_block_size()
331 static int wilc_sdio_write_reg(struct wilc *wilc, u32 addr, u32 data) in wilc_sdio_write_reg() argument
333 struct sdio_func *func = dev_to_sdio_func(wilc->dev); in wilc_sdio_write_reg()
334 struct wilc_sdio *sdio_priv = wilc->bus_data; in wilc_sdio_write_reg()
347 ret = wilc_sdio_cmd52(wilc, &cmd); in wilc_sdio_write_reg()
357 ret = wilc_sdio_set_func0_csa_address(wilc, addr); in wilc_sdio_write_reg()
369 ret = wilc_sdio_cmd53(wilc, &cmd); in wilc_sdio_write_reg()
378 static int wilc_sdio_write(struct wilc *wilc, u32 addr, u8 *buf, u32 size) in wilc_sdio_write() argument
380 struct sdio_func *func = dev_to_sdio_func(wilc->dev); in wilc_sdio_write()
381 struct wilc_sdio *sdio_priv = wilc->bus_data; in wilc_sdio_write()
412 ret = wilc_sdio_set_func0_csa_address(wilc, addr); in wilc_sdio_write()
416 ret = wilc_sdio_cmd53(wilc, &cmd); in wilc_sdio_write()
436 ret = wilc_sdio_set_func0_csa_address(wilc, addr); in wilc_sdio_write()
440 ret = wilc_sdio_cmd53(wilc, &cmd); in wilc_sdio_write()
451 static int wilc_sdio_read_reg(struct wilc *wilc, u32 addr, u32 *data) in wilc_sdio_read_reg() argument
453 struct sdio_func *func = dev_to_sdio_func(wilc->dev); in wilc_sdio_read_reg()
454 struct wilc_sdio *sdio_priv = wilc->bus_data; in wilc_sdio_read_reg()
464 ret = wilc_sdio_cmd52(wilc, &cmd); in wilc_sdio_read_reg()
474 ret = wilc_sdio_set_func0_csa_address(wilc, addr); in wilc_sdio_read_reg()
487 ret = wilc_sdio_cmd53(wilc, &cmd); in wilc_sdio_read_reg()
499 static int wilc_sdio_read(struct wilc *wilc, u32 addr, u8 *buf, u32 size) in wilc_sdio_read() argument
501 struct sdio_func *func = dev_to_sdio_func(wilc->dev); in wilc_sdio_read()
502 struct wilc_sdio *sdio_priv = wilc->bus_data; in wilc_sdio_read()
533 ret = wilc_sdio_set_func0_csa_address(wilc, addr); in wilc_sdio_read()
537 ret = wilc_sdio_cmd53(wilc, &cmd); in wilc_sdio_read()
557 ret = wilc_sdio_set_func0_csa_address(wilc, addr); in wilc_sdio_read()
561 ret = wilc_sdio_cmd53(wilc, &cmd); in wilc_sdio_read()
578 static int wilc_sdio_deinit(struct wilc *wilc) in wilc_sdio_deinit() argument
583 static int wilc_sdio_init(struct wilc *wilc, bool resume) in wilc_sdio_init() argument
585 struct sdio_func *func = dev_to_sdio_func(wilc->dev); in wilc_sdio_init()
586 struct wilc_sdio *sdio_priv = wilc->bus_data; in wilc_sdio_init()
599 ret = wilc_sdio_cmd52(wilc, &cmd); in wilc_sdio_init()
608 ret = wilc_sdio_set_block_size(wilc, 0, WILC_SDIO_BLOCK_SIZE); in wilc_sdio_init()
623 ret = wilc_sdio_cmd52(wilc, &cmd); in wilc_sdio_init()
640 ret = wilc_sdio_cmd52(wilc, &cmd); in wilc_sdio_init()
658 ret = wilc_sdio_set_block_size(wilc, 1, WILC_SDIO_BLOCK_SIZE); in wilc_sdio_init()
672 ret = wilc_sdio_cmd52(wilc, &cmd); in wilc_sdio_init()
684 ret = wilc_sdio_read_reg(wilc, WILC_CHIPID, &chipid); in wilc_sdio_init()
702 static int wilc_sdio_read_size(struct wilc *wilc, u32 *size) in wilc_sdio_read_size() argument
715 wilc_sdio_cmd52(wilc, &cmd); in wilc_sdio_read_size()
720 wilc_sdio_cmd52(wilc, &cmd); in wilc_sdio_read_size()
727 static int wilc_sdio_read_int(struct wilc *wilc, u32 *int_status) in wilc_sdio_read_int() argument
729 struct sdio_func *func = dev_to_sdio_func(wilc->dev); in wilc_sdio_read_int()
730 struct wilc_sdio *sdio_priv = wilc->bus_data; in wilc_sdio_read_int()
735 wilc_sdio_read_size(wilc, &tmp); in wilc_sdio_read_int()
750 wilc_sdio_cmd52(wilc, &cmd); in wilc_sdio_read_int()
763 static int wilc_sdio_clear_int_ext(struct wilc *wilc, u32 val) in wilc_sdio_clear_int_ext() argument
765 struct sdio_func *func = dev_to_sdio_func(wilc->dev); in wilc_sdio_clear_int_ext()
766 struct wilc_sdio *sdio_priv = wilc->bus_data; in wilc_sdio_clear_int_ext()
794 ret = wilc_sdio_cmd52(wilc, &cmd); in wilc_sdio_clear_int_ext()
824 ret = wilc_sdio_cmd52(wilc, &cmd); in wilc_sdio_clear_int_ext()
864 ret = wilc_sdio_cmd52(wilc, &cmd); in wilc_sdio_clear_int_ext()
875 static int wilc_sdio_sync_ext(struct wilc *wilc, int nint) in wilc_sdio_sync_ext() argument
877 struct sdio_func *func = dev_to_sdio_func(wilc->dev); in wilc_sdio_sync_ext()
878 struct wilc_sdio *sdio_priv = wilc->bus_data; in wilc_sdio_sync_ext()
889 if (wilc_sdio_read_reg(wilc, WILC_MISC, ®)) { in wilc_sdio_sync_ext()
895 if (wilc_sdio_write_reg(wilc, WILC_MISC, reg)) { in wilc_sdio_sync_ext()
907 ret = wilc_sdio_read_reg(wilc, WILC_PIN_MUX_0, ®); in wilc_sdio_sync_ext()
914 ret = wilc_sdio_write_reg(wilc, WILC_PIN_MUX_0, reg); in wilc_sdio_sync_ext()
924 ret = wilc_sdio_read_reg(wilc, WILC_INTR_ENABLE, ®); in wilc_sdio_sync_ext()
933 ret = wilc_sdio_write_reg(wilc, WILC_INTR_ENABLE, reg); in wilc_sdio_sync_ext()
940 ret = wilc_sdio_read_reg(wilc, WILC_INTR2_ENABLE, ®); in wilc_sdio_sync_ext()
951 ret = wilc_sdio_write_reg(wilc, WILC_INTR2_ENABLE, reg); in wilc_sdio_sync_ext()
984 struct wilc *wilc = sdio_get_drvdata(func); in wilc_sdio_resume() local
988 chip_wakeup(wilc); in wilc_sdio_resume()
989 wilc_sdio_init(wilc, true); in wilc_sdio_resume()
991 if (wilc->suspend_event) in wilc_sdio_resume()
992 host_wakeup_notify(wilc); in wilc_sdio_resume()
994 chip_allow_sleep(wilc); in wilc_sdio_resume()