Lines Matching full:wilc
27 static int wilc_sdio_init(struct wilc *wilc, bool resume);
28 static int wilc_sdio_deinit(struct wilc *wilc);
66 static int wilc_sdio_cmd52(struct wilc *wilc, struct sdio_cmd52 *cmd) in wilc_sdio_cmd52() argument
68 struct sdio_func *func = container_of(wilc->dev, struct sdio_func, dev); in wilc_sdio_cmd52()
95 static int wilc_sdio_cmd53(struct wilc *wilc, struct sdio_cmd53 *cmd) in wilc_sdio_cmd53() argument
97 struct sdio_func *func = container_of(wilc->dev, struct sdio_func, dev); in wilc_sdio_cmd53()
99 struct wilc_sdio *sdio_priv = wilc->bus_data; in wilc_sdio_cmd53()
144 struct wilc *wilc; in wilc_sdio_probe() local
158 ret = wilc_cfg80211_init(&wilc, &func->dev, WILC_HIF_SDIO, in wilc_sdio_probe()
168 wilc->dev_irq_num = irq_num; in wilc_sdio_probe()
173 sdio_set_drvdata(func, wilc); in wilc_sdio_probe()
174 wilc->bus_data = sdio_priv; in wilc_sdio_probe()
175 wilc->dev = &func->dev; in wilc_sdio_probe()
177 wilc->rtc_clk = devm_clk_get_optional_enabled(&func->card->dev, "rtc"); in wilc_sdio_probe()
178 if (IS_ERR(wilc->rtc_clk)) { in wilc_sdio_probe()
179 ret = PTR_ERR(wilc->rtc_clk); in wilc_sdio_probe()
183 wilc_sdio_init(wilc, false); in wilc_sdio_probe()
185 ret = wilc_get_chipid(wilc); in wilc_sdio_probe()
189 ret = wilc_cfg80211_register(wilc); in wilc_sdio_probe()
193 ret = wilc_load_mac_from_nv(wilc); in wilc_sdio_probe()
199 wilc_sdio_deinit(wilc); in wilc_sdio_probe()
201 vif = wilc_netdev_ifc_init(wilc, "wlan%d", WILC_STATION_MODE, in wilc_sdio_probe()
212 wiphy_unregister(wilc->wiphy); in wilc_sdio_probe()
214 irq_dispose_mapping(wilc->dev_irq_num); in wilc_sdio_probe()
215 wilc_netdev_cleanup(wilc); in wilc_sdio_probe()
216 wiphy_free(wilc->wiphy); in wilc_sdio_probe()
225 struct wilc *wilc = sdio_get_drvdata(func); in wilc_sdio_remove() local
226 struct wilc_sdio *sdio_priv = wilc->bus_data; in wilc_sdio_remove()
228 wilc_netdev_cleanup(wilc); in wilc_sdio_remove()
229 wiphy_unregister(wilc->wiphy); in wilc_sdio_remove()
230 wiphy_free(wilc->wiphy); in wilc_sdio_remove()
235 static int wilc_sdio_reset(struct wilc *wilc) in wilc_sdio_reset() argument
239 struct sdio_func *func = dev_to_sdio_func(wilc->dev); in wilc_sdio_reset()
246 ret = wilc_sdio_cmd52(wilc, &cmd); in wilc_sdio_reset()
254 static bool wilc_sdio_is_init(struct wilc *wilc) in wilc_sdio_is_init() argument
256 struct wilc_sdio *sdio_priv = wilc->bus_data; in wilc_sdio_is_init()
261 static int wilc_sdio_enable_interrupt(struct wilc *dev) in wilc_sdio_enable_interrupt()
277 static void wilc_sdio_disable_interrupt(struct wilc *dev) in wilc_sdio_disable_interrupt()
295 static int wilc_sdio_set_func0_csa_address(struct wilc *wilc, u32 adr) in wilc_sdio_set_func0_csa_address() argument
297 struct sdio_func *func = dev_to_sdio_func(wilc->dev); in wilc_sdio_set_func0_csa_address()
309 ret = wilc_sdio_cmd52(wilc, &cmd); in wilc_sdio_set_func0_csa_address()
318 ret = wilc_sdio_cmd52(wilc, &cmd); in wilc_sdio_set_func0_csa_address()
327 ret = wilc_sdio_cmd52(wilc, &cmd); in wilc_sdio_set_func0_csa_address()
337 static int wilc_sdio_set_block_size(struct wilc *wilc, u8 func_num, in wilc_sdio_set_block_size() argument
340 struct sdio_func *func = dev_to_sdio_func(wilc->dev); in wilc_sdio_set_block_size()
349 ret = wilc_sdio_cmd52(wilc, &cmd); in wilc_sdio_set_block_size()
358 ret = wilc_sdio_cmd52(wilc, &cmd); in wilc_sdio_set_block_size()
373 static int wilc_sdio_write_reg(struct wilc *wilc, u32 addr, u32 data) in wilc_sdio_write_reg() argument
375 struct sdio_func *func = dev_to_sdio_func(wilc->dev); in wilc_sdio_write_reg()
376 struct wilc_sdio *sdio_priv = wilc->bus_data; in wilc_sdio_write_reg()
389 ret = wilc_sdio_cmd52(wilc, &cmd); in wilc_sdio_write_reg()
399 ret = wilc_sdio_set_func0_csa_address(wilc, addr); in wilc_sdio_write_reg()
412 ret = wilc_sdio_cmd53(wilc, &cmd); in wilc_sdio_write_reg()
421 static int wilc_sdio_write(struct wilc *wilc, u32 addr, u8 *buf, u32 size) in wilc_sdio_write() argument
423 struct sdio_func *func = dev_to_sdio_func(wilc->dev); in wilc_sdio_write()
424 struct wilc_sdio *sdio_priv = wilc->bus_data; in wilc_sdio_write()
456 ret = wilc_sdio_set_func0_csa_address(wilc, addr); in wilc_sdio_write()
460 ret = wilc_sdio_cmd53(wilc, &cmd); in wilc_sdio_write()
480 ret = wilc_sdio_set_func0_csa_address(wilc, addr); in wilc_sdio_write()
484 ret = wilc_sdio_cmd53(wilc, &cmd); in wilc_sdio_write()
495 static int wilc_sdio_read_reg(struct wilc *wilc, u32 addr, u32 *data) in wilc_sdio_read_reg() argument
497 struct sdio_func *func = dev_to_sdio_func(wilc->dev); in wilc_sdio_read_reg()
498 struct wilc_sdio *sdio_priv = wilc->bus_data; in wilc_sdio_read_reg()
508 ret = wilc_sdio_cmd52(wilc, &cmd); in wilc_sdio_read_reg()
518 ret = wilc_sdio_set_func0_csa_address(wilc, addr); in wilc_sdio_read_reg()
532 ret = wilc_sdio_cmd53(wilc, &cmd); in wilc_sdio_read_reg()
544 static int wilc_sdio_read(struct wilc *wilc, u32 addr, u8 *buf, u32 size) in wilc_sdio_read() argument
546 struct sdio_func *func = dev_to_sdio_func(wilc->dev); in wilc_sdio_read()
547 struct wilc_sdio *sdio_priv = wilc->bus_data; in wilc_sdio_read()
579 ret = wilc_sdio_set_func0_csa_address(wilc, addr); in wilc_sdio_read()
583 ret = wilc_sdio_cmd53(wilc, &cmd); in wilc_sdio_read()
603 ret = wilc_sdio_set_func0_csa_address(wilc, addr); in wilc_sdio_read()
607 ret = wilc_sdio_cmd53(wilc, &cmd); in wilc_sdio_read()
624 static int wilc_sdio_deinit(struct wilc *wilc) in wilc_sdio_deinit() argument
626 struct sdio_func *func = dev_to_sdio_func(wilc->dev); in wilc_sdio_deinit()
627 struct wilc_sdio *sdio_priv = wilc->bus_data; in wilc_sdio_deinit()
638 ret = wilc_sdio_cmd52(wilc, &cmd); in wilc_sdio_deinit()
647 ret = wilc_sdio_cmd52(wilc, &cmd); in wilc_sdio_deinit()
657 ret = wilc_sdio_cmd52(wilc, &cmd); in wilc_sdio_deinit()
666 ret = wilc_sdio_cmd52(wilc, &cmd); in wilc_sdio_deinit()
677 static int wilc_sdio_init(struct wilc *wilc, bool resume) in wilc_sdio_init() argument
679 struct sdio_func *func = dev_to_sdio_func(wilc->dev); in wilc_sdio_init()
680 struct wilc_sdio *sdio_priv = wilc->bus_data; in wilc_sdio_init()
692 ret = wilc_sdio_cmd52(wilc, &cmd); in wilc_sdio_init()
701 ret = wilc_sdio_set_block_size(wilc, 0, WILC_SDIO_BLOCK_SIZE); in wilc_sdio_init()
716 ret = wilc_sdio_cmd52(wilc, &cmd); in wilc_sdio_init()
733 ret = wilc_sdio_cmd52(wilc, &cmd); in wilc_sdio_init()
751 ret = wilc_sdio_set_block_size(wilc, 1, WILC_SDIO_BLOCK_SIZE); in wilc_sdio_init()
765 ret = wilc_sdio_cmd52(wilc, &cmd); in wilc_sdio_init()
775 static int wilc_sdio_read_size(struct wilc *wilc, u32 *size) in wilc_sdio_read_size() argument
788 wilc_sdio_cmd52(wilc, &cmd); in wilc_sdio_read_size()
793 wilc_sdio_cmd52(wilc, &cmd); in wilc_sdio_read_size()
800 static int wilc_sdio_read_int(struct wilc *wilc, u32 *int_status) in wilc_sdio_read_int() argument
802 struct sdio_func *func = dev_to_sdio_func(wilc->dev); in wilc_sdio_read_int()
803 struct wilc_sdio *sdio_priv = wilc->bus_data; in wilc_sdio_read_int()
808 wilc_sdio_read_size(wilc, &tmp); in wilc_sdio_read_int()
818 cmd.address = is_wilc1000(wilc->chipid) ? in wilc_sdio_read_int()
825 wilc_sdio_cmd52(wilc, &cmd); in wilc_sdio_read_int()
829 irq_flags &= is_wilc1000(wilc->chipid) ? 0x1f : 0x0f; in wilc_sdio_read_int()
842 static int wilc_sdio_clear_int_ext(struct wilc *wilc, u32 val) in wilc_sdio_clear_int_ext() argument
844 struct sdio_func *func = dev_to_sdio_func(wilc->dev); in wilc_sdio_clear_int_ext()
845 struct wilc_sdio *sdio_priv = wilc->bus_data; in wilc_sdio_clear_int_ext()
852 if (is_wilc1000(wilc->chipid)) { in wilc_sdio_clear_int_ext()
872 ret = wilc_sdio_cmd52(wilc, &cmd); in wilc_sdio_clear_int_ext()
899 cmd.address = is_wilc1000(wilc->chipid) ? in wilc_sdio_clear_int_ext()
904 ret = wilc_sdio_cmd52(wilc, &cmd); in wilc_sdio_clear_int_ext()
915 static int wilc_sdio_sync_ext(struct wilc *wilc, int nint) in wilc_sdio_sync_ext() argument
917 struct sdio_func *func = dev_to_sdio_func(wilc->dev); in wilc_sdio_sync_ext()
918 struct wilc_sdio *sdio_priv = wilc->bus_data; in wilc_sdio_sync_ext()
932 ret = wilc_sdio_read_reg(wilc, WILC_PIN_MUX_0, ®); in wilc_sdio_sync_ext()
939 ret = wilc_sdio_write_reg(wilc, WILC_PIN_MUX_0, reg); in wilc_sdio_sync_ext()
949 ret = wilc_sdio_read_reg(wilc, WILC_INTR_ENABLE, ®); in wilc_sdio_sync_ext()
958 ret = wilc_sdio_write_reg(wilc, WILC_INTR_ENABLE, reg); in wilc_sdio_sync_ext()
965 ret = wilc_sdio_read_reg(wilc, WILC_INTR2_ENABLE, ®); in wilc_sdio_sync_ext()
976 ret = wilc_sdio_write_reg(wilc, WILC_INTR2_ENABLE, reg); in wilc_sdio_sync_ext()
1011 struct wilc *wilc = sdio_get_drvdata(func); in wilc_sdio_suspend() local
1016 if (!wilc->initialized) in wilc_sdio_suspend()
1019 if (!IS_ERR(wilc->rtc_clk)) in wilc_sdio_suspend()
1020 clk_disable_unprepare(wilc->rtc_clk); in wilc_sdio_suspend()
1022 ret = host_sleep_notify(wilc); in wilc_sdio_suspend()
1024 clk_prepare_enable(wilc->rtc_clk); in wilc_sdio_suspend()
1028 wilc_sdio_disable_interrupt(wilc); in wilc_sdio_suspend()
1036 struct wilc *wilc = sdio_get_drvdata(func); in wilc_sdio_resume() local
1040 if (!wilc->initialized) in wilc_sdio_resume()
1043 if (!IS_ERR(wilc->rtc_clk)) in wilc_sdio_resume()
1044 clk_prepare_enable(wilc->rtc_clk); in wilc_sdio_resume()
1046 wilc_sdio_init(wilc, true); in wilc_sdio_resume()
1047 wilc_sdio_enable_interrupt(wilc); in wilc_sdio_resume()
1049 return host_wakeup_notify(wilc); in wilc_sdio_resume()