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()
139 struct wilc *wilc; in wilc_sdio_probe() local
153 ret = wilc_cfg80211_init(&wilc, &func->dev, WILC_HIF_SDIO, in wilc_sdio_probe()
163 wilc->dev_irq_num = irq_num; in wilc_sdio_probe()
168 sdio_set_drvdata(func, wilc); in wilc_sdio_probe()
169 wilc->bus_data = sdio_priv; in wilc_sdio_probe()
170 wilc->dev = &func->dev; in wilc_sdio_probe()
172 wilc->rtc_clk = devm_clk_get_optional(&func->card->dev, "rtc"); in wilc_sdio_probe()
173 if (IS_ERR(wilc->rtc_clk)) { in wilc_sdio_probe()
174 ret = PTR_ERR(wilc->rtc_clk); in wilc_sdio_probe()
177 clk_prepare_enable(wilc->rtc_clk); in wilc_sdio_probe()
183 irq_dispose_mapping(wilc->dev_irq_num); in wilc_sdio_probe()
184 wilc_netdev_cleanup(wilc); in wilc_sdio_probe()
193 struct wilc *wilc = sdio_get_drvdata(func); in wilc_sdio_remove() local
194 struct wilc_sdio *sdio_priv = wilc->bus_data; in wilc_sdio_remove()
196 clk_disable_unprepare(wilc->rtc_clk); in wilc_sdio_remove()
197 wilc_netdev_cleanup(wilc); in wilc_sdio_remove()
202 static int wilc_sdio_reset(struct wilc *wilc) in wilc_sdio_reset() argument
206 struct sdio_func *func = dev_to_sdio_func(wilc->dev); in wilc_sdio_reset()
213 ret = wilc_sdio_cmd52(wilc, &cmd); in wilc_sdio_reset()
221 static bool wilc_sdio_is_init(struct wilc *wilc) in wilc_sdio_is_init() argument
223 struct wilc_sdio *sdio_priv = wilc->bus_data; in wilc_sdio_is_init()
231 struct wilc *wilc = sdio_get_drvdata(func); in wilc_sdio_suspend() local
235 chip_wakeup(wilc); in wilc_sdio_suspend()
237 if (!IS_ERR(wilc->rtc_clk)) in wilc_sdio_suspend()
238 clk_disable_unprepare(wilc->rtc_clk); in wilc_sdio_suspend()
240 if (wilc->suspend_event) { in wilc_sdio_suspend()
241 host_sleep_notify(wilc); in wilc_sdio_suspend()
242 chip_allow_sleep(wilc); in wilc_sdio_suspend()
245 ret = wilc_sdio_reset(wilc); in wilc_sdio_suspend()
255 static int wilc_sdio_enable_interrupt(struct wilc *dev) in wilc_sdio_enable_interrupt()
271 static void wilc_sdio_disable_interrupt(struct wilc *dev) in wilc_sdio_disable_interrupt()
289 static int wilc_sdio_set_func0_csa_address(struct wilc *wilc, u32 adr) in wilc_sdio_set_func0_csa_address() argument
291 struct sdio_func *func = dev_to_sdio_func(wilc->dev); in wilc_sdio_set_func0_csa_address()
303 ret = wilc_sdio_cmd52(wilc, &cmd); in wilc_sdio_set_func0_csa_address()
312 ret = wilc_sdio_cmd52(wilc, &cmd); in wilc_sdio_set_func0_csa_address()
321 ret = wilc_sdio_cmd52(wilc, &cmd); in wilc_sdio_set_func0_csa_address()
331 static int wilc_sdio_set_block_size(struct wilc *wilc, u8 func_num, in wilc_sdio_set_block_size() argument
334 struct sdio_func *func = dev_to_sdio_func(wilc->dev); in wilc_sdio_set_block_size()
343 ret = wilc_sdio_cmd52(wilc, &cmd); in wilc_sdio_set_block_size()
352 ret = wilc_sdio_cmd52(wilc, &cmd); in wilc_sdio_set_block_size()
367 static int wilc_sdio_write_reg(struct wilc *wilc, u32 addr, u32 data) in wilc_sdio_write_reg() argument
369 struct sdio_func *func = dev_to_sdio_func(wilc->dev); in wilc_sdio_write_reg()
370 struct wilc_sdio *sdio_priv = wilc->bus_data; in wilc_sdio_write_reg()
383 ret = wilc_sdio_cmd52(wilc, &cmd); in wilc_sdio_write_reg()
393 ret = wilc_sdio_set_func0_csa_address(wilc, addr); in wilc_sdio_write_reg()
406 ret = wilc_sdio_cmd53(wilc, &cmd); in wilc_sdio_write_reg()
415 static int wilc_sdio_write(struct wilc *wilc, u32 addr, u8 *buf, u32 size) in wilc_sdio_write() argument
417 struct sdio_func *func = dev_to_sdio_func(wilc->dev); in wilc_sdio_write()
418 struct wilc_sdio *sdio_priv = wilc->bus_data; in wilc_sdio_write()
450 ret = wilc_sdio_set_func0_csa_address(wilc, addr); in wilc_sdio_write()
454 ret = wilc_sdio_cmd53(wilc, &cmd); in wilc_sdio_write()
474 ret = wilc_sdio_set_func0_csa_address(wilc, addr); in wilc_sdio_write()
478 ret = wilc_sdio_cmd53(wilc, &cmd); in wilc_sdio_write()
489 static int wilc_sdio_read_reg(struct wilc *wilc, u32 addr, u32 *data) in wilc_sdio_read_reg() argument
491 struct sdio_func *func = dev_to_sdio_func(wilc->dev); in wilc_sdio_read_reg()
492 struct wilc_sdio *sdio_priv = wilc->bus_data; in wilc_sdio_read_reg()
502 ret = wilc_sdio_cmd52(wilc, &cmd); in wilc_sdio_read_reg()
512 ret = wilc_sdio_set_func0_csa_address(wilc, addr); in wilc_sdio_read_reg()
526 ret = wilc_sdio_cmd53(wilc, &cmd); in wilc_sdio_read_reg()
538 static int wilc_sdio_read(struct wilc *wilc, u32 addr, u8 *buf, u32 size) in wilc_sdio_read() argument
540 struct sdio_func *func = dev_to_sdio_func(wilc->dev); in wilc_sdio_read()
541 struct wilc_sdio *sdio_priv = wilc->bus_data; in wilc_sdio_read()
573 ret = wilc_sdio_set_func0_csa_address(wilc, addr); in wilc_sdio_read()
577 ret = wilc_sdio_cmd53(wilc, &cmd); in wilc_sdio_read()
597 ret = wilc_sdio_set_func0_csa_address(wilc, addr); in wilc_sdio_read()
601 ret = wilc_sdio_cmd53(wilc, &cmd); in wilc_sdio_read()
618 static int wilc_sdio_deinit(struct wilc *wilc) in wilc_sdio_deinit() argument
620 struct wilc_sdio *sdio_priv = wilc->bus_data; in wilc_sdio_deinit()
626 static int wilc_sdio_init(struct wilc *wilc, bool resume) in wilc_sdio_init() argument
628 struct sdio_func *func = dev_to_sdio_func(wilc->dev); in wilc_sdio_init()
629 struct wilc_sdio *sdio_priv = wilc->bus_data; in wilc_sdio_init()
642 ret = wilc_sdio_cmd52(wilc, &cmd); in wilc_sdio_init()
651 ret = wilc_sdio_set_block_size(wilc, 0, WILC_SDIO_BLOCK_SIZE); in wilc_sdio_init()
666 ret = wilc_sdio_cmd52(wilc, &cmd); in wilc_sdio_init()
683 ret = wilc_sdio_cmd52(wilc, &cmd); in wilc_sdio_init()
701 ret = wilc_sdio_set_block_size(wilc, 1, WILC_SDIO_BLOCK_SIZE); in wilc_sdio_init()
715 ret = wilc_sdio_cmd52(wilc, &cmd); in wilc_sdio_init()
725 ret = wilc_sdio_read_reg(wilc, WILC_CHIPID, &chipid); in wilc_sdio_init()
737 static int wilc_sdio_read_size(struct wilc *wilc, u32 *size) in wilc_sdio_read_size() argument
750 wilc_sdio_cmd52(wilc, &cmd); in wilc_sdio_read_size()
755 wilc_sdio_cmd52(wilc, &cmd); in wilc_sdio_read_size()
762 static int wilc_sdio_read_int(struct wilc *wilc, u32 *int_status) in wilc_sdio_read_int() argument
764 struct sdio_func *func = dev_to_sdio_func(wilc->dev); in wilc_sdio_read_int()
765 struct wilc_sdio *sdio_priv = wilc->bus_data; in wilc_sdio_read_int()
770 wilc_sdio_read_size(wilc, &tmp); in wilc_sdio_read_int()
785 wilc_sdio_cmd52(wilc, &cmd); in wilc_sdio_read_int()
798 static int wilc_sdio_clear_int_ext(struct wilc *wilc, u32 val) in wilc_sdio_clear_int_ext() argument
800 struct sdio_func *func = dev_to_sdio_func(wilc->dev); in wilc_sdio_clear_int_ext()
801 struct wilc_sdio *sdio_priv = wilc->bus_data; in wilc_sdio_clear_int_ext()
826 ret = wilc_sdio_cmd52(wilc, &cmd); in wilc_sdio_clear_int_ext()
837 static int wilc_sdio_sync_ext(struct wilc *wilc, int nint) in wilc_sdio_sync_ext() argument
839 struct sdio_func *func = dev_to_sdio_func(wilc->dev); in wilc_sdio_sync_ext()
840 struct wilc_sdio *sdio_priv = wilc->bus_data; in wilc_sdio_sync_ext()
851 if (wilc_sdio_read_reg(wilc, WILC_MISC, &reg)) { in wilc_sdio_sync_ext()
857 if (wilc_sdio_write_reg(wilc, WILC_MISC, reg)) { in wilc_sdio_sync_ext()
869 ret = wilc_sdio_read_reg(wilc, WILC_PIN_MUX_0, &reg); in wilc_sdio_sync_ext()
876 ret = wilc_sdio_write_reg(wilc, WILC_PIN_MUX_0, reg); in wilc_sdio_sync_ext()
886 ret = wilc_sdio_read_reg(wilc, WILC_INTR_ENABLE, &reg); in wilc_sdio_sync_ext()
895 ret = wilc_sdio_write_reg(wilc, WILC_INTR_ENABLE, reg); in wilc_sdio_sync_ext()
902 ret = wilc_sdio_read_reg(wilc, WILC_INTR2_ENABLE, &reg); in wilc_sdio_sync_ext()
913 ret = wilc_sdio_write_reg(wilc, WILC_INTR2_ENABLE, reg); in wilc_sdio_sync_ext()
948 struct wilc *wilc = sdio_get_drvdata(func); in wilc_sdio_resume() local
952 chip_wakeup(wilc); in wilc_sdio_resume()
953 wilc_sdio_init(wilc, true); in wilc_sdio_resume()
955 if (wilc->suspend_event) in wilc_sdio_resume()
956 host_wakeup_notify(wilc); in wilc_sdio_resume()
958 chip_allow_sleep(wilc); in wilc_sdio_resume()