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.
38 u32 address: 17; member
39 u32 data: 8; member
47 u32 address: 17; member
65 struct sdio_func *func = container_of(wilc->dev, struct sdio_func, dev); in wilc_sdio_cmd52()
67 u8 data; in wilc_sdio_cmd52() local
71 func->num = cmd->function; in wilc_sdio_cmd52()
72 if (cmd->read_write) { /* write */ in wilc_sdio_cmd52()
73 if (cmd->raw) { in wilc_sdio_cmd52()
74 sdio_writeb(func, cmd->data, cmd->address, &ret); in wilc_sdio_cmd52()
75 data = sdio_readb(func, cmd->address, &ret); in wilc_sdio_cmd52()
76 cmd->data = data; in wilc_sdio_cmd52()
78 sdio_writeb(func, cmd->data, cmd->address, &ret); in wilc_sdio_cmd52()
81 data = sdio_readb(func, cmd->address, &ret); in wilc_sdio_cmd52()
82 cmd->data = data; in wilc_sdio_cmd52()
88 dev_err(&func->dev, "%s..failed, err(%d)\n", __func__, ret); in wilc_sdio_cmd52()
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()
97 u8 *buf = cmd->buffer; in wilc_sdio_cmd53()
101 func->num = cmd->function; in wilc_sdio_cmd53()
102 func->cur_blksize = cmd->block_size; in wilc_sdio_cmd53()
103 if (cmd->block_mode) in wilc_sdio_cmd53()
104 size = cmd->count * cmd->block_size; in wilc_sdio_cmd53()
106 size = cmd->count; in wilc_sdio_cmd53()
108 if (cmd->use_global_buf) { in wilc_sdio_cmd53()
110 ret = -EINVAL; in wilc_sdio_cmd53()
113 buf = sdio_priv->cmd53_buf; in wilc_sdio_cmd53()
116 if (cmd->read_write) { /* write */ in wilc_sdio_cmd53()
117 if (cmd->use_global_buf) in wilc_sdio_cmd53()
118 memcpy(buf, cmd->buffer, size); in wilc_sdio_cmd53()
120 ret = sdio_memcpy_toio(func, cmd->address, buf, size); in wilc_sdio_cmd53()
122 ret = sdio_memcpy_fromio(func, buf, cmd->address, size); in wilc_sdio_cmd53()
124 if (cmd->use_global_buf) in wilc_sdio_cmd53()
125 memcpy(cmd->buffer, buf, size); in wilc_sdio_cmd53()
131 dev_err(&func->dev, "%s..failed, err(%d)\n", __func__, ret); in wilc_sdio_cmd53()
145 return -ENOMEM; in wilc_sdio_probe()
147 sdio_priv->cmd53_buf = kzalloc(sizeof(u32), GFP_KERNEL); in wilc_sdio_probe()
148 if (!sdio_priv->cmd53_buf) { in wilc_sdio_probe()
149 ret = -ENOMEM; in wilc_sdio_probe()
153 ret = wilc_cfg80211_init(&wilc, &func->dev, WILC_HIF_SDIO, in wilc_sdio_probe()
159 struct device_node *np = func->card->dev.of_node; in wilc_sdio_probe()
163 wilc->dev_irq_num = irq_num; in wilc_sdio_probe()
164 sdio_priv->irq_gpio = true; 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()
179 dev_info(&func->dev, "Driver Initializing success\n"); in wilc_sdio_probe()
183 irq_dispose_mapping(wilc->dev_irq_num); in wilc_sdio_probe()
186 kfree(sdio_priv->cmd53_buf); in wilc_sdio_probe()
194 struct wilc_sdio *sdio_priv = wilc->bus_data; in wilc_sdio_remove()
196 clk_disable_unprepare(wilc->rtc_clk); in wilc_sdio_remove()
198 kfree(sdio_priv->cmd53_buf); in wilc_sdio_remove()
206 struct sdio_func *func = dev_to_sdio_func(wilc->dev); in wilc_sdio_reset()
211 cmd.address = SDIO_CCCR_ABORT; in wilc_sdio_reset()
212 cmd.data = WILC_SDIO_CCCR_ABORT_RESET; in wilc_sdio_reset()
215 dev_err(&func->dev, "Fail cmd 52, reset cmd ...\n"); in wilc_sdio_reset()
223 struct wilc_sdio *sdio_priv = wilc->bus_data; in wilc_sdio_is_init()
225 return sdio_priv->isinit; in wilc_sdio_is_init()
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()
247 dev_err(&func->dev, "Fail reset sdio\n"); in wilc_sdio_suspend()
257 struct sdio_func *func = container_of(dev->dev, struct sdio_func, dev); in wilc_sdio_enable_interrupt()
265 dev_err(&func->dev, "can't claim sdio_irq, err(%d)\n", ret); in wilc_sdio_enable_interrupt()
266 ret = -EIO; in wilc_sdio_enable_interrupt()
273 struct sdio_func *func = container_of(dev->dev, struct sdio_func, dev); in wilc_sdio_disable_interrupt()
279 dev_err(&func->dev, "can't release sdio_irq, err(%d)\n", ret); in wilc_sdio_disable_interrupt()
291 struct sdio_func *func = dev_to_sdio_func(wilc->dev); in wilc_sdio_set_func0_csa_address()
301 cmd.address = WILC_SDIO_FBR_CSA_REG; in wilc_sdio_set_func0_csa_address()
302 cmd.data = (u8)adr; in wilc_sdio_set_func0_csa_address()
305 dev_err(&func->dev, "Failed cmd52, set %04x data...\n", in wilc_sdio_set_func0_csa_address()
306 cmd.address); in wilc_sdio_set_func0_csa_address()
310 cmd.address = WILC_SDIO_FBR_CSA_REG + 1; in wilc_sdio_set_func0_csa_address()
311 cmd.data = (u8)(adr >> 8); in wilc_sdio_set_func0_csa_address()
314 dev_err(&func->dev, "Failed cmd52, set %04x data...\n", in wilc_sdio_set_func0_csa_address()
315 cmd.address); in wilc_sdio_set_func0_csa_address()
319 cmd.address = WILC_SDIO_FBR_CSA_REG + 2; in wilc_sdio_set_func0_csa_address()
320 cmd.data = (u8)(adr >> 16); in wilc_sdio_set_func0_csa_address()
323 dev_err(&func->dev, "Failed cmd52, set %04x data...\n", in wilc_sdio_set_func0_csa_address()
324 cmd.address); in wilc_sdio_set_func0_csa_address()
334 struct sdio_func *func = dev_to_sdio_func(wilc->dev); in wilc_sdio_set_block_size()
341 cmd.address = SDIO_FBR_BASE(func_num) + SDIO_CCCR_BLKSIZE; in wilc_sdio_set_block_size()
342 cmd.data = (u8)block_size; in wilc_sdio_set_block_size()
345 dev_err(&func->dev, "Failed cmd52, set %04x data...\n", in wilc_sdio_set_block_size()
346 cmd.address); in wilc_sdio_set_block_size()
350 cmd.address = SDIO_FBR_BASE(func_num) + SDIO_CCCR_BLKSIZE + 1; in wilc_sdio_set_block_size()
351 cmd.data = (u8)(block_size >> 8); in wilc_sdio_set_block_size()
354 dev_err(&func->dev, "Failed cmd52, set %04x data...\n", in wilc_sdio_set_block_size()
355 cmd.address); 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()
373 cpu_to_le32s(&data); in wilc_sdio_write_reg()
381 cmd.address = addr; in wilc_sdio_write_reg()
382 cmd.data = data; in wilc_sdio_write_reg()
385 dev_err(&func->dev, in wilc_sdio_write_reg()
391 * set the AHB address in wilc_sdio_write_reg()
399 cmd.address = WILC_SDIO_FBR_DATA_REG; in wilc_sdio_write_reg()
403 cmd.buffer = (u8 *)&data; in wilc_sdio_write_reg()
405 cmd.block_size = sdio_priv->block_size; in wilc_sdio_write_reg()
408 dev_err(&func->dev, in wilc_sdio_write_reg()
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()
419 u32 block_size = sdio_priv->block_size; in wilc_sdio_write()
429 cmd.address = WILC_SDIO_FBR_DATA_REG; in wilc_sdio_write()
435 cmd.address = WILC_SDIO_F1_DATA_REG; in wilc_sdio_write()
456 dev_err(&func->dev, in wilc_sdio_write()
480 dev_err(&func->dev, 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()
501 cmd.address = addr; in wilc_sdio_read_reg()
504 dev_err(&func->dev, in wilc_sdio_read_reg()
508 *data = cmd.data; in wilc_sdio_read_reg()
518 cmd.address = WILC_SDIO_FBR_DATA_REG; in wilc_sdio_read_reg()
522 cmd.buffer = (u8 *)data; in wilc_sdio_read_reg()
525 cmd.block_size = sdio_priv->block_size; in wilc_sdio_read_reg()
528 dev_err(&func->dev, in wilc_sdio_read_reg()
534 le32_to_cpus(data); in wilc_sdio_read_reg()
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()
542 u32 block_size = sdio_priv->block_size; in wilc_sdio_read()
552 cmd.address = WILC_SDIO_FBR_DATA_REG; in wilc_sdio_read()
558 cmd.address = WILC_SDIO_F1_DATA_REG; in wilc_sdio_read()
579 dev_err(&func->dev, in wilc_sdio_read()
603 dev_err(&func->dev, in wilc_sdio_read()
620 struct wilc_sdio *sdio_priv = wilc->bus_data; in wilc_sdio_deinit()
622 sdio_priv->isinit = false; in wilc_sdio_deinit()
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()
640 cmd.address = SDIO_FBR_BASE(1); in wilc_sdio_init()
641 cmd.data = SDIO_FBR_ENABLE_CSA; in wilc_sdio_init()
644 dev_err(&func->dev, "Fail cmd 52, enable csa...\n"); in wilc_sdio_init()
653 dev_err(&func->dev, "Fail cmd 52, set func 0 block size...\n"); in wilc_sdio_init()
656 sdio_priv->block_size = WILC_SDIO_BLOCK_SIZE; in wilc_sdio_init()
664 cmd.address = SDIO_CCCR_IOEx; in wilc_sdio_init()
665 cmd.data = WILC_SDIO_CCCR_IO_EN_FUNC1; in wilc_sdio_init()
668 dev_err(&func->dev, in wilc_sdio_init()
679 cmd.address = SDIO_CCCR_IORx; in wilc_sdio_init()
682 cmd.data = 0; in wilc_sdio_init()
685 dev_err(&func->dev, in wilc_sdio_init()
689 if (cmd.data == WILC_SDIO_CCCR_IO_EN_FUNC1) in wilc_sdio_init()
691 } while (loop--); in wilc_sdio_init()
694 dev_err(&func->dev, "Fail func 1 is not ready...\n"); in wilc_sdio_init()
695 return -EINVAL; in wilc_sdio_init()
703 dev_err(&func->dev, "Fail set func 1 block size...\n"); in wilc_sdio_init()
713 cmd.address = SDIO_CCCR_IENx; in wilc_sdio_init()
714 cmd.data = WILC_SDIO_CCCR_IEN_MASTER | WILC_SDIO_CCCR_IEN_FUNC1; in wilc_sdio_init()
717 dev_err(&func->dev, "Fail cmd 52, set IEN register...\n"); in wilc_sdio_init()
727 dev_err(&func->dev, "Fail cmd read chip id...\n"); in wilc_sdio_init()
730 dev_err(&func->dev, "chipid (%08x)\n", chipid); in wilc_sdio_init()
733 sdio_priv->isinit = true; in wilc_sdio_init()
748 cmd.address = WILC_SDIO_INTERRUPT_DATA_SZ_REG; in wilc_sdio_read_size()
749 cmd.data = 0; in wilc_sdio_read_size()
751 tmp = cmd.data; in wilc_sdio_read_size()
753 cmd.address = WILC_SDIO_INTERRUPT_DATA_SZ_REG + 1; in wilc_sdio_read_size()
754 cmd.data = 0; in wilc_sdio_read_size()
756 tmp |= (cmd.data << 8); in wilc_sdio_read_size()
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()
775 if (!sdio_priv->irq_gpio) { in wilc_sdio_read_int()
777 cmd.address = WILC_SDIO_EXT_IRQ_FLAG_REG; in wilc_sdio_read_int()
780 cmd.address = WILC_SDIO_IRQ_FLAG_REG; in wilc_sdio_read_int()
784 cmd.data = 0; in wilc_sdio_read_int()
786 irq_flags = cmd.data; in wilc_sdio_read_int()
787 tmp |= FIELD_PREP(IRG_FLAGS_MASK, cmd.data); in wilc_sdio_read_int()
790 dev_err(&func->dev, "Unexpected interrupt (1) int=%lx\n", in wilc_sdio_read_int()
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()
805 if (sdio_priv->irq_gpio) in wilc_sdio_clear_int_ext()
806 reg = val & (BIT(MAX_NUM_INT) - 1); in wilc_sdio_clear_int_ext()
823 cmd.address = WILC_SDIO_IRQ_CLEAR_FLAG_REG; in wilc_sdio_clear_int_ext()
824 cmd.data = reg; in wilc_sdio_clear_int_ext()
828 dev_err(&func->dev, in wilc_sdio_clear_int_ext()
829 "Failed cmd52, set (%02x) data (%d) ...\n", in wilc_sdio_clear_int_ext()
830 cmd.address, __LINE__); in wilc_sdio_clear_int_ext()
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()
844 dev_err(&func->dev, "Too many interrupts (%d)...\n", nint); in wilc_sdio_sync_ext()
845 return -EINVAL; in wilc_sdio_sync_ext()
852 dev_err(&func->dev, "Failed read misc reg...\n"); in wilc_sdio_sync_ext()
853 return -EINVAL; in wilc_sdio_sync_ext()
858 dev_err(&func->dev, "Failed write misc reg...\n"); in wilc_sdio_sync_ext()
859 return -EINVAL; in wilc_sdio_sync_ext()
862 if (sdio_priv->irq_gpio) { in wilc_sdio_sync_ext()
871 dev_err(&func->dev, "Failed read reg (%08x)...\n", in wilc_sdio_sync_ext()
878 dev_err(&func->dev, "Failed write reg (%08x)...\n", in wilc_sdio_sync_ext()
888 dev_err(&func->dev, "Failed read reg (%08x)...\n", in wilc_sdio_sync_ext()
893 for (i = 0; (i < 5) && (nint > 0); i++, nint--) in wilc_sdio_sync_ext()
897 dev_err(&func->dev, "Failed write reg (%08x)...\n", in wilc_sdio_sync_ext()
904 dev_err(&func->dev, in wilc_sdio_sync_ext()
910 for (i = 0; (i < 3) && (nint > 0); i++, nint--) in wilc_sdio_sync_ext()
915 dev_err(&func->dev, in wilc_sdio_sync_ext()
955 if (wilc->suspend_event) in wilc_sdio_resume()