Lines Matching full:wilc

60 static int wilc_sdio_cmd52(struct wilc *wilc, struct sdio_cmd52 *cmd)  in wilc_sdio_cmd52()  argument
62 struct sdio_func *func = container_of(wilc->dev, struct sdio_func, dev); in wilc_sdio_cmd52()
89 static int wilc_sdio_cmd53(struct wilc *wilc, struct sdio_cmd53 *cmd) in wilc_sdio_cmd53() argument
91 struct sdio_func *func = container_of(wilc->dev, struct sdio_func, dev); in wilc_sdio_cmd53()
122 struct wilc *wilc; in wilc_sdio_probe() local
130 ret = wilc_cfg80211_init(&wilc, &func->dev, WILC_HIF_SDIO, in wilc_sdio_probe()
140 wilc->dev_irq_num = irq_num; in wilc_sdio_probe()
145 sdio_set_drvdata(func, wilc); in wilc_sdio_probe()
146 wilc->bus_data = sdio_priv; in wilc_sdio_probe()
147 wilc->dev = &func->dev; in wilc_sdio_probe()
149 wilc->rtc_clk = devm_clk_get_optional(&func->card->dev, "rtc"); in wilc_sdio_probe()
150 if (IS_ERR(wilc->rtc_clk)) { in wilc_sdio_probe()
151 ret = PTR_ERR(wilc->rtc_clk); in wilc_sdio_probe()
154 clk_prepare_enable(wilc->rtc_clk); in wilc_sdio_probe()
160 irq_dispose_mapping(wilc->dev_irq_num); in wilc_sdio_probe()
161 wilc_netdev_cleanup(wilc); in wilc_sdio_probe()
169 struct wilc *wilc = sdio_get_drvdata(func); in wilc_sdio_remove() local
171 clk_disable_unprepare(wilc->rtc_clk); in wilc_sdio_remove()
172 wilc_netdev_cleanup(wilc); in wilc_sdio_remove()
175 static int wilc_sdio_reset(struct wilc *wilc) in wilc_sdio_reset() argument
179 struct sdio_func *func = dev_to_sdio_func(wilc->dev); in wilc_sdio_reset()
186 ret = wilc_sdio_cmd52(wilc, &cmd); in wilc_sdio_reset()
197 struct wilc *wilc = sdio_get_drvdata(func); in wilc_sdio_suspend() local
201 chip_wakeup(wilc); in wilc_sdio_suspend()
203 if (!IS_ERR(wilc->rtc_clk)) in wilc_sdio_suspend()
204 clk_disable_unprepare(wilc->rtc_clk); in wilc_sdio_suspend()
206 if (wilc->suspend_event) { in wilc_sdio_suspend()
207 host_sleep_notify(wilc); in wilc_sdio_suspend()
208 chip_allow_sleep(wilc); in wilc_sdio_suspend()
211 ret = wilc_sdio_reset(wilc); in wilc_sdio_suspend()
221 static int wilc_sdio_enable_interrupt(struct wilc *dev) in wilc_sdio_enable_interrupt()
237 static void wilc_sdio_disable_interrupt(struct wilc *dev) in wilc_sdio_disable_interrupt()
255 static int wilc_sdio_set_func0_csa_address(struct wilc *wilc, u32 adr) in wilc_sdio_set_func0_csa_address() argument
257 struct sdio_func *func = dev_to_sdio_func(wilc->dev); in wilc_sdio_set_func0_csa_address()
269 ret = wilc_sdio_cmd52(wilc, &cmd); in wilc_sdio_set_func0_csa_address()
278 ret = wilc_sdio_cmd52(wilc, &cmd); in wilc_sdio_set_func0_csa_address()
287 ret = wilc_sdio_cmd52(wilc, &cmd); in wilc_sdio_set_func0_csa_address()
297 static int wilc_sdio_set_block_size(struct wilc *wilc, u8 func_num, in wilc_sdio_set_block_size() argument
300 struct sdio_func *func = dev_to_sdio_func(wilc->dev); in wilc_sdio_set_block_size()
309 ret = wilc_sdio_cmd52(wilc, &cmd); in wilc_sdio_set_block_size()
318 ret = wilc_sdio_cmd52(wilc, &cmd); in wilc_sdio_set_block_size()
333 static int wilc_sdio_write_reg(struct wilc *wilc, u32 addr, u32 data) in wilc_sdio_write_reg() argument
335 struct sdio_func *func = dev_to_sdio_func(wilc->dev); in wilc_sdio_write_reg()
336 struct wilc_sdio *sdio_priv = wilc->bus_data; in wilc_sdio_write_reg()
349 ret = wilc_sdio_cmd52(wilc, &cmd); in wilc_sdio_write_reg()
359 ret = wilc_sdio_set_func0_csa_address(wilc, addr); in wilc_sdio_write_reg()
371 ret = wilc_sdio_cmd53(wilc, &cmd); in wilc_sdio_write_reg()
380 static int wilc_sdio_write(struct wilc *wilc, u32 addr, u8 *buf, u32 size) in wilc_sdio_write() argument
382 struct sdio_func *func = dev_to_sdio_func(wilc->dev); in wilc_sdio_write()
383 struct wilc_sdio *sdio_priv = wilc->bus_data; in wilc_sdio_write()
414 ret = wilc_sdio_set_func0_csa_address(wilc, addr); in wilc_sdio_write()
418 ret = wilc_sdio_cmd53(wilc, &cmd); in wilc_sdio_write()
438 ret = wilc_sdio_set_func0_csa_address(wilc, addr); in wilc_sdio_write()
442 ret = wilc_sdio_cmd53(wilc, &cmd); in wilc_sdio_write()
453 static int wilc_sdio_read_reg(struct wilc *wilc, u32 addr, u32 *data) in wilc_sdio_read_reg() argument
455 struct sdio_func *func = dev_to_sdio_func(wilc->dev); in wilc_sdio_read_reg()
456 struct wilc_sdio *sdio_priv = wilc->bus_data; in wilc_sdio_read_reg()
466 ret = wilc_sdio_cmd52(wilc, &cmd); in wilc_sdio_read_reg()
476 ret = wilc_sdio_set_func0_csa_address(wilc, addr); in wilc_sdio_read_reg()
489 ret = wilc_sdio_cmd53(wilc, &cmd); in wilc_sdio_read_reg()
501 static int wilc_sdio_read(struct wilc *wilc, u32 addr, u8 *buf, u32 size) in wilc_sdio_read() argument
503 struct sdio_func *func = dev_to_sdio_func(wilc->dev); in wilc_sdio_read()
504 struct wilc_sdio *sdio_priv = wilc->bus_data; in wilc_sdio_read()
535 ret = wilc_sdio_set_func0_csa_address(wilc, addr); in wilc_sdio_read()
539 ret = wilc_sdio_cmd53(wilc, &cmd); in wilc_sdio_read()
559 ret = wilc_sdio_set_func0_csa_address(wilc, addr); in wilc_sdio_read()
563 ret = wilc_sdio_cmd53(wilc, &cmd); in wilc_sdio_read()
580 static int wilc_sdio_deinit(struct wilc *wilc) in wilc_sdio_deinit() argument
585 static int wilc_sdio_init(struct wilc *wilc, bool resume) in wilc_sdio_init() argument
587 struct sdio_func *func = dev_to_sdio_func(wilc->dev); in wilc_sdio_init()
588 struct wilc_sdio *sdio_priv = wilc->bus_data; in wilc_sdio_init()
601 ret = wilc_sdio_cmd52(wilc, &cmd); in wilc_sdio_init()
610 ret = wilc_sdio_set_block_size(wilc, 0, WILC_SDIO_BLOCK_SIZE); in wilc_sdio_init()
625 ret = wilc_sdio_cmd52(wilc, &cmd); in wilc_sdio_init()
642 ret = wilc_sdio_cmd52(wilc, &cmd); in wilc_sdio_init()
660 ret = wilc_sdio_set_block_size(wilc, 1, WILC_SDIO_BLOCK_SIZE); in wilc_sdio_init()
674 ret = wilc_sdio_cmd52(wilc, &cmd); in wilc_sdio_init()
686 ret = wilc_sdio_read_reg(wilc, WILC_CHIPID, &chipid); in wilc_sdio_init()
704 static int wilc_sdio_read_size(struct wilc *wilc, u32 *size) in wilc_sdio_read_size() argument
717 wilc_sdio_cmd52(wilc, &cmd); in wilc_sdio_read_size()
722 wilc_sdio_cmd52(wilc, &cmd); in wilc_sdio_read_size()
729 static int wilc_sdio_read_int(struct wilc *wilc, u32 *int_status) in wilc_sdio_read_int() argument
731 struct sdio_func *func = dev_to_sdio_func(wilc->dev); in wilc_sdio_read_int()
732 struct wilc_sdio *sdio_priv = wilc->bus_data; in wilc_sdio_read_int()
737 wilc_sdio_read_size(wilc, &tmp); in wilc_sdio_read_int()
752 wilc_sdio_cmd52(wilc, &cmd); in wilc_sdio_read_int()
765 static int wilc_sdio_clear_int_ext(struct wilc *wilc, u32 val) in wilc_sdio_clear_int_ext() argument
767 struct sdio_func *func = dev_to_sdio_func(wilc->dev); in wilc_sdio_clear_int_ext()
768 struct wilc_sdio *sdio_priv = wilc->bus_data; in wilc_sdio_clear_int_ext()
796 ret = wilc_sdio_cmd52(wilc, &cmd); in wilc_sdio_clear_int_ext()
826 ret = wilc_sdio_cmd52(wilc, &cmd); in wilc_sdio_clear_int_ext()
866 ret = wilc_sdio_cmd52(wilc, &cmd); in wilc_sdio_clear_int_ext()
877 static int wilc_sdio_sync_ext(struct wilc *wilc, int nint) in wilc_sdio_sync_ext() argument
879 struct sdio_func *func = dev_to_sdio_func(wilc->dev); in wilc_sdio_sync_ext()
880 struct wilc_sdio *sdio_priv = wilc->bus_data; in wilc_sdio_sync_ext()
891 if (wilc_sdio_read_reg(wilc, WILC_MISC, &reg)) { in wilc_sdio_sync_ext()
897 if (wilc_sdio_write_reg(wilc, WILC_MISC, reg)) { in wilc_sdio_sync_ext()
909 ret = wilc_sdio_read_reg(wilc, WILC_PIN_MUX_0, &reg); in wilc_sdio_sync_ext()
916 ret = wilc_sdio_write_reg(wilc, WILC_PIN_MUX_0, reg); in wilc_sdio_sync_ext()
926 ret = wilc_sdio_read_reg(wilc, WILC_INTR_ENABLE, &reg); in wilc_sdio_sync_ext()
935 ret = wilc_sdio_write_reg(wilc, WILC_INTR_ENABLE, reg); in wilc_sdio_sync_ext()
942 ret = wilc_sdio_read_reg(wilc, WILC_INTR2_ENABLE, &reg); in wilc_sdio_sync_ext()
953 ret = wilc_sdio_write_reg(wilc, WILC_INTR2_ENABLE, reg); in wilc_sdio_sync_ext()
986 struct wilc *wilc = sdio_get_drvdata(func); in wilc_sdio_resume() local
990 chip_wakeup(wilc); in wilc_sdio_resume()
991 wilc_sdio_init(wilc, true); in wilc_sdio_resume()
993 if (wilc->suspend_event) in wilc_sdio_resume()
994 host_wakeup_notify(wilc); in wilc_sdio_resume()
996 chip_allow_sleep(wilc); in wilc_sdio_resume()