Lines Matching full:wilc
63 static int wilc_sdio_cmd52(struct wilc *wilc, struct sdio_cmd52 *cmd) in wilc_sdio_cmd52() argument
65 struct sdio_func *func = container_of(wilc->dev, struct sdio_func, dev); in wilc_sdio_cmd52()
92 static int wilc_sdio_cmd53(struct wilc *wilc, struct sdio_cmd53 *cmd) in wilc_sdio_cmd53() argument
94 struct sdio_func *func = container_of(wilc->dev, struct sdio_func, dev); in wilc_sdio_cmd53()
96 struct wilc_sdio *sdio_priv = wilc->bus_data; in wilc_sdio_cmd53()
138 struct wilc *wilc; in wilc_sdio_probe() local
152 ret = wilc_cfg80211_init(&wilc, &func->dev, WILC_HIF_SDIO, in wilc_sdio_probe()
162 wilc->dev_irq_num = irq_num; in wilc_sdio_probe()
167 sdio_set_drvdata(func, wilc); in wilc_sdio_probe()
168 wilc->bus_data = sdio_priv; in wilc_sdio_probe()
169 wilc->dev = &func->dev; in wilc_sdio_probe()
171 wilc->rtc_clk = devm_clk_get_optional(&func->card->dev, "rtc"); in wilc_sdio_probe()
172 if (IS_ERR(wilc->rtc_clk)) { in wilc_sdio_probe()
173 ret = PTR_ERR(wilc->rtc_clk); in wilc_sdio_probe()
176 clk_prepare_enable(wilc->rtc_clk); in wilc_sdio_probe()
182 irq_dispose_mapping(wilc->dev_irq_num); in wilc_sdio_probe()
183 wilc_netdev_cleanup(wilc); in wilc_sdio_probe()
192 struct wilc *wilc = sdio_get_drvdata(func); in wilc_sdio_remove() local
193 struct wilc_sdio *sdio_priv = wilc->bus_data; in wilc_sdio_remove()
195 clk_disable_unprepare(wilc->rtc_clk); in wilc_sdio_remove()
196 wilc_netdev_cleanup(wilc); in wilc_sdio_remove()
201 static int wilc_sdio_reset(struct wilc *wilc) in wilc_sdio_reset() argument
205 struct sdio_func *func = dev_to_sdio_func(wilc->dev); in wilc_sdio_reset()
212 ret = wilc_sdio_cmd52(wilc, &cmd); in wilc_sdio_reset()
220 static bool wilc_sdio_is_init(struct wilc *wilc) in wilc_sdio_is_init() argument
222 struct wilc_sdio *sdio_priv = wilc->bus_data; in wilc_sdio_is_init()
230 struct wilc *wilc = sdio_get_drvdata(func); in wilc_sdio_suspend() local
234 chip_wakeup(wilc); in wilc_sdio_suspend()
236 if (!IS_ERR(wilc->rtc_clk)) in wilc_sdio_suspend()
237 clk_disable_unprepare(wilc->rtc_clk); in wilc_sdio_suspend()
239 if (wilc->suspend_event) { in wilc_sdio_suspend()
240 host_sleep_notify(wilc); in wilc_sdio_suspend()
241 chip_allow_sleep(wilc); in wilc_sdio_suspend()
244 ret = wilc_sdio_reset(wilc); in wilc_sdio_suspend()
254 static int wilc_sdio_enable_interrupt(struct wilc *dev) in wilc_sdio_enable_interrupt()
270 static void wilc_sdio_disable_interrupt(struct wilc *dev) in wilc_sdio_disable_interrupt()
288 static int wilc_sdio_set_func0_csa_address(struct wilc *wilc, u32 adr) in wilc_sdio_set_func0_csa_address() argument
290 struct sdio_func *func = dev_to_sdio_func(wilc->dev); in wilc_sdio_set_func0_csa_address()
302 ret = wilc_sdio_cmd52(wilc, &cmd); in wilc_sdio_set_func0_csa_address()
311 ret = wilc_sdio_cmd52(wilc, &cmd); in wilc_sdio_set_func0_csa_address()
320 ret = wilc_sdio_cmd52(wilc, &cmd); in wilc_sdio_set_func0_csa_address()
330 static int wilc_sdio_set_block_size(struct wilc *wilc, u8 func_num, in wilc_sdio_set_block_size() argument
333 struct sdio_func *func = dev_to_sdio_func(wilc->dev); in wilc_sdio_set_block_size()
342 ret = wilc_sdio_cmd52(wilc, &cmd); in wilc_sdio_set_block_size()
351 ret = wilc_sdio_cmd52(wilc, &cmd); in wilc_sdio_set_block_size()
366 static int wilc_sdio_write_reg(struct wilc *wilc, u32 addr, u32 data) in wilc_sdio_write_reg() argument
368 struct sdio_func *func = dev_to_sdio_func(wilc->dev); in wilc_sdio_write_reg()
369 struct wilc_sdio *sdio_priv = wilc->bus_data; in wilc_sdio_write_reg()
382 ret = wilc_sdio_cmd52(wilc, &cmd); in wilc_sdio_write_reg()
392 ret = wilc_sdio_set_func0_csa_address(wilc, addr); in wilc_sdio_write_reg()
405 ret = wilc_sdio_cmd53(wilc, &cmd); in wilc_sdio_write_reg()
414 static int wilc_sdio_write(struct wilc *wilc, u32 addr, u8 *buf, u32 size) in wilc_sdio_write() argument
416 struct sdio_func *func = dev_to_sdio_func(wilc->dev); in wilc_sdio_write()
417 struct wilc_sdio *sdio_priv = wilc->bus_data; in wilc_sdio_write()
449 ret = wilc_sdio_set_func0_csa_address(wilc, addr); in wilc_sdio_write()
453 ret = wilc_sdio_cmd53(wilc, &cmd); in wilc_sdio_write()
473 ret = wilc_sdio_set_func0_csa_address(wilc, addr); in wilc_sdio_write()
477 ret = wilc_sdio_cmd53(wilc, &cmd); in wilc_sdio_write()
488 static int wilc_sdio_read_reg(struct wilc *wilc, u32 addr, u32 *data) in wilc_sdio_read_reg() argument
490 struct sdio_func *func = dev_to_sdio_func(wilc->dev); in wilc_sdio_read_reg()
491 struct wilc_sdio *sdio_priv = wilc->bus_data; in wilc_sdio_read_reg()
501 ret = wilc_sdio_cmd52(wilc, &cmd); in wilc_sdio_read_reg()
511 ret = wilc_sdio_set_func0_csa_address(wilc, addr); in wilc_sdio_read_reg()
525 ret = wilc_sdio_cmd53(wilc, &cmd); in wilc_sdio_read_reg()
537 static int wilc_sdio_read(struct wilc *wilc, u32 addr, u8 *buf, u32 size) in wilc_sdio_read() argument
539 struct sdio_func *func = dev_to_sdio_func(wilc->dev); in wilc_sdio_read()
540 struct wilc_sdio *sdio_priv = wilc->bus_data; in wilc_sdio_read()
572 ret = wilc_sdio_set_func0_csa_address(wilc, addr); in wilc_sdio_read()
576 ret = wilc_sdio_cmd53(wilc, &cmd); in wilc_sdio_read()
596 ret = wilc_sdio_set_func0_csa_address(wilc, addr); in wilc_sdio_read()
600 ret = wilc_sdio_cmd53(wilc, &cmd); in wilc_sdio_read()
617 static int wilc_sdio_deinit(struct wilc *wilc) in wilc_sdio_deinit() argument
619 struct wilc_sdio *sdio_priv = wilc->bus_data; in wilc_sdio_deinit()
625 static int wilc_sdio_init(struct wilc *wilc, bool resume) in wilc_sdio_init() argument
627 struct sdio_func *func = dev_to_sdio_func(wilc->dev); in wilc_sdio_init()
628 struct wilc_sdio *sdio_priv = wilc->bus_data; in wilc_sdio_init()
641 ret = wilc_sdio_cmd52(wilc, &cmd); in wilc_sdio_init()
650 ret = wilc_sdio_set_block_size(wilc, 0, WILC_SDIO_BLOCK_SIZE); in wilc_sdio_init()
665 ret = wilc_sdio_cmd52(wilc, &cmd); in wilc_sdio_init()
682 ret = wilc_sdio_cmd52(wilc, &cmd); in wilc_sdio_init()
700 ret = wilc_sdio_set_block_size(wilc, 1, WILC_SDIO_BLOCK_SIZE); in wilc_sdio_init()
714 ret = wilc_sdio_cmd52(wilc, &cmd); in wilc_sdio_init()
724 ret = wilc_sdio_read_reg(wilc, WILC_CHIPID, &chipid); in wilc_sdio_init()
736 static int wilc_sdio_read_size(struct wilc *wilc, u32 *size) in wilc_sdio_read_size() argument
749 wilc_sdio_cmd52(wilc, &cmd); in wilc_sdio_read_size()
754 wilc_sdio_cmd52(wilc, &cmd); in wilc_sdio_read_size()
761 static int wilc_sdio_read_int(struct wilc *wilc, u32 *int_status) in wilc_sdio_read_int() argument
763 struct sdio_func *func = dev_to_sdio_func(wilc->dev); in wilc_sdio_read_int()
764 struct wilc_sdio *sdio_priv = wilc->bus_data; in wilc_sdio_read_int()
769 wilc_sdio_read_size(wilc, &tmp); in wilc_sdio_read_int()
784 wilc_sdio_cmd52(wilc, &cmd); in wilc_sdio_read_int()
797 static int wilc_sdio_clear_int_ext(struct wilc *wilc, u32 val) in wilc_sdio_clear_int_ext() argument
799 struct sdio_func *func = dev_to_sdio_func(wilc->dev); in wilc_sdio_clear_int_ext()
800 struct wilc_sdio *sdio_priv = wilc->bus_data; in wilc_sdio_clear_int_ext()
825 ret = wilc_sdio_cmd52(wilc, &cmd); in wilc_sdio_clear_int_ext()
836 static int wilc_sdio_sync_ext(struct wilc *wilc, int nint) in wilc_sdio_sync_ext() argument
838 struct sdio_func *func = dev_to_sdio_func(wilc->dev); in wilc_sdio_sync_ext()
839 struct wilc_sdio *sdio_priv = wilc->bus_data; in wilc_sdio_sync_ext()
850 if (wilc_sdio_read_reg(wilc, WILC_MISC, ®)) { in wilc_sdio_sync_ext()
856 if (wilc_sdio_write_reg(wilc, WILC_MISC, reg)) { in wilc_sdio_sync_ext()
868 ret = wilc_sdio_read_reg(wilc, WILC_PIN_MUX_0, ®); in wilc_sdio_sync_ext()
875 ret = wilc_sdio_write_reg(wilc, WILC_PIN_MUX_0, reg); in wilc_sdio_sync_ext()
885 ret = wilc_sdio_read_reg(wilc, WILC_INTR_ENABLE, ®); in wilc_sdio_sync_ext()
894 ret = wilc_sdio_write_reg(wilc, WILC_INTR_ENABLE, reg); in wilc_sdio_sync_ext()
901 ret = wilc_sdio_read_reg(wilc, WILC_INTR2_ENABLE, ®); in wilc_sdio_sync_ext()
912 ret = wilc_sdio_write_reg(wilc, WILC_INTR2_ENABLE, reg); in wilc_sdio_sync_ext()
947 struct wilc *wilc = sdio_get_drvdata(func); in wilc_sdio_resume() local
951 chip_wakeup(wilc); in wilc_sdio_resume()
952 wilc_sdio_init(wilc, true); in wilc_sdio_resume()
954 if (wilc->suspend_event) in wilc_sdio_resume()
955 host_wakeup_notify(wilc); in wilc_sdio_resume()
957 chip_allow_sleep(wilc); in wilc_sdio_resume()