Lines Matching +full:address +full:- +full:data
1 // SPDX-License-Identifier: GPL-2.0
3 * Copyright (c) 2012 - 2018 Microchip Technology Inc., and its subsidiaries.
41 u32 address: 17; member
42 u32 data: 8; member
50 u32 address: 17; member
68 struct sdio_func *func = container_of(wilc->dev, struct sdio_func, dev); in wilc_sdio_cmd52()
70 u8 data; in wilc_sdio_cmd52() local
74 func->num = cmd->function; in wilc_sdio_cmd52()
75 if (cmd->read_write) { /* write */ in wilc_sdio_cmd52()
76 if (cmd->raw) { in wilc_sdio_cmd52()
77 sdio_writeb(func, cmd->data, cmd->address, &ret); in wilc_sdio_cmd52()
78 data = sdio_readb(func, cmd->address, &ret); in wilc_sdio_cmd52()
79 cmd->data = data; in wilc_sdio_cmd52()
81 sdio_writeb(func, cmd->data, cmd->address, &ret); in wilc_sdio_cmd52()
84 data = sdio_readb(func, cmd->address, &ret); in wilc_sdio_cmd52()
85 cmd->data = data; in wilc_sdio_cmd52()
91 dev_err(&func->dev, "%s..failed, err(%d)\n", __func__, ret); in wilc_sdio_cmd52()
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()
100 u8 *buf = cmd->buffer; in wilc_sdio_cmd53()
104 func->num = cmd->function; in wilc_sdio_cmd53()
105 func->cur_blksize = cmd->block_size; in wilc_sdio_cmd53()
106 if (cmd->block_mode) in wilc_sdio_cmd53()
107 size = cmd->count * cmd->block_size; in wilc_sdio_cmd53()
109 size = cmd->count; in wilc_sdio_cmd53()
111 if (cmd->use_global_buf) { in wilc_sdio_cmd53()
113 ret = -EINVAL; in wilc_sdio_cmd53()
116 buf = sdio_priv->cmd53_buf; in wilc_sdio_cmd53()
119 if (cmd->read_write) { /* write */ in wilc_sdio_cmd53()
120 if (cmd->use_global_buf) in wilc_sdio_cmd53()
121 memcpy(buf, cmd->buffer, size); in wilc_sdio_cmd53()
123 ret = sdio_memcpy_toio(func, cmd->address, buf, size); in wilc_sdio_cmd53()
125 ret = sdio_memcpy_fromio(func, buf, cmd->address, size); in wilc_sdio_cmd53()
127 if (cmd->use_global_buf) in wilc_sdio_cmd53()
128 memcpy(cmd->buffer, buf, size); in wilc_sdio_cmd53()
134 dev_err(&func->dev, "%s..failed, err(%d)\n", __func__, ret); in wilc_sdio_cmd53()
150 return -ENOMEM; in wilc_sdio_probe()
152 sdio_priv->cmd53_buf = kzalloc(sizeof(u32), GFP_KERNEL); in wilc_sdio_probe()
153 if (!sdio_priv->cmd53_buf) { in wilc_sdio_probe()
154 ret = -ENOMEM; in wilc_sdio_probe()
158 ret = wilc_cfg80211_init(&wilc, &func->dev, WILC_HIF_SDIO, in wilc_sdio_probe()
164 struct device_node *np = func->card->dev.of_node; in wilc_sdio_probe()
168 wilc->dev_irq_num = irq_num; in wilc_sdio_probe()
169 sdio_priv->irq_gpio = true; 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()
195 pr_err("Can not retrieve MAC address from chip\n"); in wilc_sdio_probe()
208 dev_info(&func->dev, "Driver Initializing success\n"); 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()
216 wiphy_free(wilc->wiphy); in wilc_sdio_probe()
218 kfree(sdio_priv->cmd53_buf); in wilc_sdio_probe()
226 struct wilc_sdio *sdio_priv = wilc->bus_data; in wilc_sdio_remove()
229 wiphy_unregister(wilc->wiphy); in wilc_sdio_remove()
230 wiphy_free(wilc->wiphy); in wilc_sdio_remove()
231 kfree(sdio_priv->cmd53_buf); in wilc_sdio_remove()
239 struct sdio_func *func = dev_to_sdio_func(wilc->dev); in wilc_sdio_reset()
244 cmd.address = SDIO_CCCR_ABORT; in wilc_sdio_reset()
245 cmd.data = WILC_SDIO_CCCR_ABORT_RESET; in wilc_sdio_reset()
248 dev_err(&func->dev, "Fail cmd 52, reset cmd ...\n"); in wilc_sdio_reset()
256 struct wilc_sdio *sdio_priv = wilc->bus_data; in wilc_sdio_is_init()
258 return sdio_priv->isinit; in wilc_sdio_is_init()
263 struct sdio_func *func = container_of(dev->dev, struct sdio_func, dev); in wilc_sdio_enable_interrupt()
271 dev_err(&func->dev, "can't claim sdio_irq, err(%d)\n", ret); in wilc_sdio_enable_interrupt()
272 ret = -EIO; in wilc_sdio_enable_interrupt()
279 struct sdio_func *func = container_of(dev->dev, struct sdio_func, dev); in wilc_sdio_disable_interrupt()
285 dev_err(&func->dev, "can't release sdio_irq, err(%d)\n", ret); in wilc_sdio_disable_interrupt()
297 struct sdio_func *func = dev_to_sdio_func(wilc->dev); in wilc_sdio_set_func0_csa_address()
307 cmd.address = WILC_SDIO_FBR_CSA_REG; in wilc_sdio_set_func0_csa_address()
308 cmd.data = (u8)adr; in wilc_sdio_set_func0_csa_address()
311 dev_err(&func->dev, "Failed cmd52, set %04x data...\n", in wilc_sdio_set_func0_csa_address()
312 cmd.address); in wilc_sdio_set_func0_csa_address()
316 cmd.address = WILC_SDIO_FBR_CSA_REG + 1; in wilc_sdio_set_func0_csa_address()
317 cmd.data = (u8)(adr >> 8); in wilc_sdio_set_func0_csa_address()
320 dev_err(&func->dev, "Failed cmd52, set %04x data...\n", in wilc_sdio_set_func0_csa_address()
321 cmd.address); in wilc_sdio_set_func0_csa_address()
325 cmd.address = WILC_SDIO_FBR_CSA_REG + 2; in wilc_sdio_set_func0_csa_address()
326 cmd.data = (u8)(adr >> 16); in wilc_sdio_set_func0_csa_address()
329 dev_err(&func->dev, "Failed cmd52, set %04x data...\n", in wilc_sdio_set_func0_csa_address()
330 cmd.address); in wilc_sdio_set_func0_csa_address()
340 struct sdio_func *func = dev_to_sdio_func(wilc->dev); in wilc_sdio_set_block_size()
347 cmd.address = SDIO_FBR_BASE(func_num) + SDIO_CCCR_BLKSIZE; in wilc_sdio_set_block_size()
348 cmd.data = (u8)block_size; in wilc_sdio_set_block_size()
351 dev_err(&func->dev, "Failed cmd52, set %04x data...\n", in wilc_sdio_set_block_size()
352 cmd.address); in wilc_sdio_set_block_size()
356 cmd.address = SDIO_FBR_BASE(func_num) + SDIO_CCCR_BLKSIZE + 1; in wilc_sdio_set_block_size()
357 cmd.data = (u8)(block_size >> 8); in wilc_sdio_set_block_size()
360 dev_err(&func->dev, "Failed cmd52, set %04x data...\n", in wilc_sdio_set_block_size()
361 cmd.address); 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()
379 cpu_to_le32s(&data); in wilc_sdio_write_reg()
387 cmd.address = addr; in wilc_sdio_write_reg()
388 cmd.data = data; in wilc_sdio_write_reg()
391 dev_err(&func->dev, in wilc_sdio_write_reg()
397 * set the AHB address in wilc_sdio_write_reg()
405 cmd.address = WILC_SDIO_FBR_DATA_REG; in wilc_sdio_write_reg()
409 cmd.buffer = (u8 *)&data; in wilc_sdio_write_reg()
411 cmd.block_size = sdio_priv->block_size; in wilc_sdio_write_reg()
414 dev_err(&func->dev, in wilc_sdio_write_reg()
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()
425 u32 block_size = sdio_priv->block_size; in wilc_sdio_write()
435 cmd.address = WILC_SDIO_FBR_DATA_REG; in wilc_sdio_write()
441 cmd.address = WILC_SDIO_F1_DATA_REG; in wilc_sdio_write()
462 dev_err(&func->dev, in wilc_sdio_write()
486 dev_err(&func->dev, 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()
507 cmd.address = addr; in wilc_sdio_read_reg()
510 dev_err(&func->dev, in wilc_sdio_read_reg()
514 *data = cmd.data; in wilc_sdio_read_reg()
524 cmd.address = WILC_SDIO_FBR_DATA_REG; in wilc_sdio_read_reg()
528 cmd.buffer = (u8 *)data; in wilc_sdio_read_reg()
531 cmd.block_size = sdio_priv->block_size; in wilc_sdio_read_reg()
534 dev_err(&func->dev, in wilc_sdio_read_reg()
540 le32_to_cpus(data); in wilc_sdio_read_reg()
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()
548 u32 block_size = sdio_priv->block_size; in wilc_sdio_read()
558 cmd.address = WILC_SDIO_FBR_DATA_REG; in wilc_sdio_read()
564 cmd.address = WILC_SDIO_F1_DATA_REG; in wilc_sdio_read()
585 dev_err(&func->dev, in wilc_sdio_read()
609 dev_err(&func->dev, in wilc_sdio_read()
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()
636 cmd.address = SDIO_CCCR_IENx; in wilc_sdio_deinit()
637 cmd.data = 0; in wilc_sdio_deinit()
640 dev_err(&func->dev, "Failed to disable functions interrupts\n"); in wilc_sdio_deinit()
645 cmd.address = SDIO_CCCR_IOEx; in wilc_sdio_deinit()
646 cmd.data = 0; in wilc_sdio_deinit()
649 dev_err(&func->dev, in wilc_sdio_deinit()
656 cmd.address = SDIO_FBR_BASE(1); in wilc_sdio_deinit()
659 dev_err(&func->dev, in wilc_sdio_deinit()
664 cmd.address = SDIO_FBR_BASE(1); in wilc_sdio_deinit()
665 cmd.data &= ~SDIO_FBR_ENABLE_CSA; in wilc_sdio_deinit()
668 dev_err(&func->dev, in wilc_sdio_deinit()
673 sdio_priv->isinit = false; in wilc_sdio_deinit()
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()
690 cmd.address = SDIO_FBR_BASE(1); in wilc_sdio_init()
691 cmd.data = SDIO_FBR_ENABLE_CSA; in wilc_sdio_init()
694 dev_err(&func->dev, "Fail cmd 52, enable csa...\n"); in wilc_sdio_init()
703 dev_err(&func->dev, "Fail cmd 52, set func 0 block size...\n"); in wilc_sdio_init()
706 sdio_priv->block_size = WILC_SDIO_BLOCK_SIZE; in wilc_sdio_init()
714 cmd.address = SDIO_CCCR_IOEx; in wilc_sdio_init()
715 cmd.data = WILC_SDIO_CCCR_IO_EN_FUNC1; in wilc_sdio_init()
718 dev_err(&func->dev, in wilc_sdio_init()
729 cmd.address = SDIO_CCCR_IORx; in wilc_sdio_init()
732 cmd.data = 0; in wilc_sdio_init()
735 dev_err(&func->dev, in wilc_sdio_init()
739 if (cmd.data == WILC_SDIO_CCCR_IO_EN_FUNC1) in wilc_sdio_init()
741 } while (loop--); in wilc_sdio_init()
744 dev_err(&func->dev, "Fail func 1 is not ready...\n"); in wilc_sdio_init()
745 return -EINVAL; in wilc_sdio_init()
753 dev_err(&func->dev, "Fail set func 1 block size...\n"); in wilc_sdio_init()
763 cmd.address = SDIO_CCCR_IENx; in wilc_sdio_init()
764 cmd.data = WILC_SDIO_CCCR_IEN_MASTER | WILC_SDIO_CCCR_IEN_FUNC1; in wilc_sdio_init()
767 dev_err(&func->dev, "Fail cmd 52, set IEN register...\n"); in wilc_sdio_init()
771 sdio_priv->isinit = true; in wilc_sdio_init()
786 cmd.address = WILC_SDIO_INTERRUPT_DATA_SZ_REG; in wilc_sdio_read_size()
787 cmd.data = 0; in wilc_sdio_read_size()
789 tmp = cmd.data; in wilc_sdio_read_size()
791 cmd.address = WILC_SDIO_INTERRUPT_DATA_SZ_REG + 1; in wilc_sdio_read_size()
792 cmd.data = 0; in wilc_sdio_read_size()
794 tmp |= (cmd.data << 8); in wilc_sdio_read_size()
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()
813 if (!sdio_priv->irq_gpio) { in wilc_sdio_read_int()
815 cmd.address = WILC_SDIO_EXT_IRQ_FLAG_REG; in wilc_sdio_read_int()
818 cmd.address = is_wilc1000(wilc->chipid) ? in wilc_sdio_read_int()
824 cmd.data = 0; in wilc_sdio_read_int()
826 irq_flags = cmd.data; in wilc_sdio_read_int()
828 if (sdio_priv->irq_gpio) in wilc_sdio_read_int()
829 irq_flags &= is_wilc1000(wilc->chipid) ? 0x1f : 0x0f; in wilc_sdio_read_int()
831 tmp |= FIELD_PREP(IRG_FLAGS_MASK, cmd.data); in wilc_sdio_read_int()
834 dev_err(&func->dev, "Unexpected interrupt (1) int=%lx\n", in wilc_sdio_read_int()
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()
849 if (sdio_priv->irq_gpio) in wilc_sdio_clear_int_ext()
850 reg = val & (BIT(MAX_NUM_INT) - 1); in wilc_sdio_clear_int_ext()
852 if (is_wilc1000(wilc->chipid)) { in wilc_sdio_clear_int_ext()
863 if (sdio_priv->irq_gpio && reg) { in wilc_sdio_clear_int_ext()
869 cmd.address = WILC3000_SDIO_IRQ_FLAG_REG; in wilc_sdio_clear_int_ext()
870 cmd.data = reg; in wilc_sdio_clear_int_ext()
874 dev_err(&func->dev, in wilc_sdio_clear_int_ext()
875 "Failed cmd52, set 0xfe data (%d) ...\n", in wilc_sdio_clear_int_ext()
899 cmd.address = is_wilc1000(wilc->chipid) ? in wilc_sdio_clear_int_ext()
902 cmd.data = reg; in wilc_sdio_clear_int_ext()
906 dev_err(&func->dev, in wilc_sdio_clear_int_ext()
907 "Failed cmd52, set (%02x) data (%d) ...\n", in wilc_sdio_clear_int_ext()
908 cmd.address, __LINE__); in wilc_sdio_clear_int_ext()
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()
921 dev_err(&func->dev, "Too many interrupts (%d)...\n", nint); in wilc_sdio_sync_ext()
922 return -EINVAL; in wilc_sdio_sync_ext()
925 if (sdio_priv->irq_gpio) { in wilc_sdio_sync_ext()
934 dev_err(&func->dev, "Failed read reg (%08x)...\n", in wilc_sdio_sync_ext()
941 dev_err(&func->dev, "Failed write reg (%08x)...\n", in wilc_sdio_sync_ext()
951 dev_err(&func->dev, "Failed read reg (%08x)...\n", in wilc_sdio_sync_ext()
956 for (i = 0; (i < 5) && (nint > 0); i++, nint--) in wilc_sdio_sync_ext()
960 dev_err(&func->dev, "Failed write reg (%08x)...\n", in wilc_sdio_sync_ext()
967 dev_err(&func->dev, in wilc_sdio_sync_ext()
973 for (i = 0; (i < 3) && (nint > 0); i++, nint--) in wilc_sdio_sync_ext()
978 dev_err(&func->dev, in wilc_sdio_sync_ext()
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()
1024 clk_prepare_enable(wilc->rtc_clk); in wilc_sdio_suspend()
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()