Lines Matching +full:imx21 +full:- +full:i2c

1 // SPDX-License-Identifier: GPL-2.0+
3 * Copyright (C) 2002 Motorola GSG-China
9 * Implementation of I2C Adapter/Algorithm Driver
10 * for I2C Bus integrated in Freescale i.MX/MXC processors
12 * Derived from Motorola GSG China I2C example driver
28 #include <linux/dma-mapping.h>
34 #include <linux/i2c.h>
46 #include <linux/platform_data/i2c-imx.h>
53 #define DRIVER_NAME "imx-i2c"
66 /* IMX I2C registers:
67 * the I2C register offset is different between SoCs,
74 #define IMX_I2C_IADR 0x00 /* i2c slave address */
75 #define IMX_I2C_IFDR 0x01 /* i2c frequency divider */
76 #define IMX_I2C_I2CR 0x02 /* i2c control */
77 #define IMX_I2C_I2SR 0x03 /* i2c status */
78 #define IMX_I2C_I2DR 0x04 /* i2c transfer data */
83 #define IMX_I2C_IBIC 0x05 /* i2c bus interrupt config */
88 /* Bits of IMX I2C registers */
107 * - write zero to clear(w0c) INT flag on i.MX,
108 * - but write one to clear(w1c) INT flag on Vybrid.
109 * 2) I2CR: I2C module enable operation also differ between SoCs:
110 * - set I2CR_IEN bit enable the module on i.MX,
111 * - but clear I2CR_IEN bit enable the module on Vybrid.
122 * taken from table 26-5, p.26-9, Freescale i.MX
183 * I2C: When the I2C clock speed is configured for 400 kHz,
184 * the SCL low period violates the I2C spec of 1.3 uS min.
270 .name = "imx1-i2c",
273 .name = "imx21-i2c",
282 { .compatible = "fsl,imx1-i2c", .data = &imx1_i2c_hwdata, },
283 { .compatible = "fsl,imx21-i2c", .data = &imx21_i2c_hwdata, },
284 { .compatible = "fsl,imx6q-i2c", .data = &imx6_i2c_hwdata, },
285 { .compatible = "fsl,imx6sl-i2c", .data = &imx6_i2c_hwdata, },
286 { .compatible = "fsl,imx6sll-i2c", .data = &imx6_i2c_hwdata, },
287 { .compatible = "fsl,imx6sx-i2c", .data = &imx6_i2c_hwdata, },
288 { .compatible = "fsl,imx6ul-i2c", .data = &imx6_i2c_hwdata, },
289 { .compatible = "fsl,imx7s-i2c", .data = &imx6_i2c_hwdata, },
290 { .compatible = "fsl,imx8mm-i2c", .data = &imx6_i2c_hwdata, },
291 { .compatible = "fsl,imx8mn-i2c", .data = &imx6_i2c_hwdata, },
292 { .compatible = "fsl,imx8mp-i2c", .data = &imx6_i2c_hwdata, },
293 { .compatible = "fsl,imx8mq-i2c", .data = &imx6_i2c_hwdata, },
294 { .compatible = "fsl,vf610-i2c", .data = &vf610_i2c_hwdata, },
307 return i2c_imx->hwdata->devtype == IMX1_I2C; in is_imx1_i2c()
312 return i2c_imx->hwdata->devtype == VF610_I2C; in is_vf610_i2c()
318 writeb(val, i2c_imx->base + (reg << i2c_imx->hwdata->regshift)); in imx_i2c_write_reg()
324 return readb(i2c_imx->base + (reg << i2c_imx->hwdata->regshift)); in imx_i2c_read_reg()
336 temp = ~i2c_imx->hwdata->i2sr_clr_opcode ^ bits; in i2c_imx_clear_irq()
340 /* Set up i2c controller register and i2c status register to default value. */
343 imx_i2c_write_reg(i2c_imx->hwdata->i2cr_ien_opcode ^ I2CR_IEN, in i2c_imx_reset_regs()
354 struct device *dev = &i2c_imx->adapter.dev; in i2c_imx_dma_request()
361 dma->chan_tx = dma_request_chan(dev, "tx"); in i2c_imx_dma_request()
362 if (IS_ERR(dma->chan_tx)) { in i2c_imx_dma_request()
363 ret = PTR_ERR(dma->chan_tx); in i2c_imx_dma_request()
364 if (ret != -ENODEV && ret != -EPROBE_DEFER) in i2c_imx_dma_request()
370 (IMX_I2C_I2DR << i2c_imx->hwdata->regshift); in i2c_imx_dma_request()
374 ret = dmaengine_slave_config(dma->chan_tx, &dma_sconfig); in i2c_imx_dma_request()
380 dma->chan_rx = dma_request_chan(dev, "rx"); in i2c_imx_dma_request()
381 if (IS_ERR(dma->chan_rx)) { in i2c_imx_dma_request()
382 ret = PTR_ERR(dma->chan_rx); in i2c_imx_dma_request()
383 if (ret != -ENODEV && ret != -EPROBE_DEFER) in i2c_imx_dma_request()
389 (IMX_I2C_I2DR << i2c_imx->hwdata->regshift); in i2c_imx_dma_request()
393 ret = dmaengine_slave_config(dma->chan_rx, &dma_sconfig); in i2c_imx_dma_request()
399 i2c_imx->dma = dma; in i2c_imx_dma_request()
400 init_completion(&dma->cmd_complete); in i2c_imx_dma_request()
402 dma_chan_name(dma->chan_tx), dma_chan_name(dma->chan_rx)); in i2c_imx_dma_request()
407 dma_release_channel(dma->chan_rx); in i2c_imx_dma_request()
409 dma_release_channel(dma->chan_tx); in i2c_imx_dma_request()
417 struct imx_i2c_dma *dma = i2c_imx->dma; in i2c_imx_dma_callback()
419 dma_unmap_single(dma->chan_using->device->dev, dma->dma_buf, in i2c_imx_dma_callback()
420 dma->dma_len, dma->dma_data_dir); in i2c_imx_dma_callback()
421 complete(&dma->cmd_complete); in i2c_imx_dma_callback()
427 struct imx_i2c_dma *dma = i2c_imx->dma; in i2c_imx_dma_xfer()
429 struct device *dev = &i2c_imx->adapter.dev; in i2c_imx_dma_xfer()
430 struct device *chan_dev = dma->chan_using->device->dev; in i2c_imx_dma_xfer()
432 dma->dma_buf = dma_map_single(chan_dev, msgs->buf, in i2c_imx_dma_xfer()
433 dma->dma_len, dma->dma_data_dir); in i2c_imx_dma_xfer()
434 if (dma_mapping_error(chan_dev, dma->dma_buf)) { in i2c_imx_dma_xfer()
439 txdesc = dmaengine_prep_slave_single(dma->chan_using, dma->dma_buf, in i2c_imx_dma_xfer()
440 dma->dma_len, dma->dma_transfer_dir, in i2c_imx_dma_xfer()
447 reinit_completion(&dma->cmd_complete); in i2c_imx_dma_xfer()
448 txdesc->callback = i2c_imx_dma_callback; in i2c_imx_dma_xfer()
449 txdesc->callback_param = i2c_imx; in i2c_imx_dma_xfer()
455 dma_async_issue_pending(dma->chan_using); in i2c_imx_dma_xfer()
459 dmaengine_terminate_sync(dma->chan_using); in i2c_imx_dma_xfer()
461 dma_unmap_single(chan_dev, dma->dma_buf, in i2c_imx_dma_xfer()
462 dma->dma_len, dma->dma_data_dir); in i2c_imx_dma_xfer()
464 return -EINVAL; in i2c_imx_dma_xfer()
469 struct imx_i2c_dma *dma = i2c_imx->dma; in i2c_imx_dma_free()
471 dma->dma_buf = 0; in i2c_imx_dma_free()
472 dma->dma_len = 0; in i2c_imx_dma_free()
474 dma_release_channel(dma->chan_tx); in i2c_imx_dma_free()
475 dma->chan_tx = NULL; in i2c_imx_dma_free()
477 dma_release_channel(dma->chan_rx); in i2c_imx_dma_free()
478 dma->chan_rx = NULL; in i2c_imx_dma_free()
480 dma->chan_using = NULL; in i2c_imx_dma_free()
494 return -EAGAIN; in i2c_imx_bus_busy()
498 i2c_imx->stopped = 0; in i2c_imx_bus_busy()
502 i2c_imx->stopped = 1; in i2c_imx_bus_busy()
506 dev_dbg(&i2c_imx->adapter.dev, in i2c_imx_bus_busy()
507 "<%s> I2C bus is busy\n", __func__); in i2c_imx_bus_busy()
508 return -ETIMEDOUT; in i2c_imx_bus_busy()
522 void __iomem *addr = i2c_imx->base + (IMX_I2C_I2SR << i2c_imx->hwdata->regshift); in i2c_imx_trx_complete()
529 * Set the value hard as it is done for the non-atomic use-case. in i2c_imx_trx_complete()
536 i2c_imx->i2csr = regval; in i2c_imx_trx_complete()
539 wait_event_timeout(i2c_imx->queue, i2c_imx->i2csr & I2SR_IIF, HZ / 10); in i2c_imx_trx_complete()
542 if (unlikely(!(i2c_imx->i2csr & I2SR_IIF))) { in i2c_imx_trx_complete()
543 dev_dbg(&i2c_imx->adapter.dev, "<%s> Timeout\n", __func__); in i2c_imx_trx_complete()
544 return -ETIMEDOUT; in i2c_imx_trx_complete()
548 if (i2c_imx->i2csr & I2SR_IAL) { in i2c_imx_trx_complete()
549 dev_dbg(&i2c_imx->adapter.dev, "<%s> Arbitration lost\n", __func__); in i2c_imx_trx_complete()
552 i2c_imx->i2csr = 0; in i2c_imx_trx_complete()
553 return -EAGAIN; in i2c_imx_trx_complete()
556 dev_dbg(&i2c_imx->adapter.dev, "<%s> TRX complete\n", __func__); in i2c_imx_trx_complete()
557 i2c_imx->i2csr = 0; in i2c_imx_trx_complete()
564 dev_dbg(&i2c_imx->adapter.dev, "<%s> No ACK\n", __func__); in i2c_imx_acked()
565 return -ENXIO; /* No ACK */ in i2c_imx_acked()
568 dev_dbg(&i2c_imx->adapter.dev, "<%s> ACK received\n", __func__); in i2c_imx_acked()
575 struct imx_i2c_clk_pair *i2c_clk_div = i2c_imx->hwdata->clk_div; in i2c_imx_set_clk()
579 if (i2c_imx->hwdata->has_err007805 && i2c_imx->bitrate > 384000) { in i2c_imx_set_clk()
580 dev_dbg(&i2c_imx->adapter.dev, in i2c_imx_set_clk()
582 i2c_imx->bitrate); in i2c_imx_set_clk()
583 i2c_imx->bitrate = 384000; in i2c_imx_set_clk()
587 if (i2c_imx->cur_clk == i2c_clk_rate) in i2c_imx_set_clk()
590 i2c_imx->cur_clk = i2c_clk_rate; in i2c_imx_set_clk()
592 div = DIV_ROUND_UP(i2c_clk_rate, i2c_imx->bitrate); in i2c_imx_set_clk()
595 else if (div > i2c_clk_div[i2c_imx->hwdata->ndivs - 1].div) in i2c_imx_set_clk()
596 i = i2c_imx->hwdata->ndivs - 1; in i2c_imx_set_clk()
602 i2c_imx->ifdr = i2c_clk_div[i].val; in i2c_imx_set_clk()
606 * It should be about one I2C clock period long. in i2c_imx_set_clk()
607 * This delay is used in I2C bus disable function in i2c_imx_set_clk()
610 i2c_imx->disable_delay = DIV_ROUND_UP(500000U * i2c_clk_div[i].div, in i2c_imx_set_clk()
614 dev_dbg(&i2c_imx->adapter.dev, "I2C_CLK=%d, REQ DIV=%d\n", in i2c_imx_set_clk()
616 dev_dbg(&i2c_imx->adapter.dev, "IFDR[IC]=0x%x, REAL DIV=%d\n", in i2c_imx_set_clk()
630 i2c_imx_set_clk(i2c_imx, ndata->new_rate); in i2c_imx_clk_notifier_call()
640 imx_i2c_write_reg(i2c_imx->ifdr, i2c_imx, IMX_I2C_IFDR); in i2c_imx_start()
641 /* Enable I2C controller */ in i2c_imx_start()
642 imx_i2c_write_reg(i2c_imx->hwdata->i2sr_clr_opcode, i2c_imx, IMX_I2C_I2SR); in i2c_imx_start()
643 imx_i2c_write_reg(i2c_imx->hwdata->i2cr_ien_opcode, i2c_imx, IMX_I2C_I2CR); in i2c_imx_start()
651 /* Start I2C transaction */ in i2c_imx_start()
672 if (!i2c_imx->stopped) { in i2c_imx_stop()
673 /* Stop I2C transaction */ in i2c_imx_stop()
676 i2c_imx->stopped = 1; in i2c_imx_stop()
678 if (i2c_imx->dma) in i2c_imx_stop()
687 udelay(i2c_imx->disable_delay); in i2c_imx_stop()
690 if (!i2c_imx->stopped) in i2c_imx_stop()
693 /* Disable I2C controller */ in i2c_imx_stop()
694 temp = i2c_imx->hwdata->i2cr_ien_opcode ^ I2CR_IEN, in i2c_imx_stop()
700 * Note: IBIC register will be cleared after disabled i2c module.
717 i2c_slave_event(i2c_imx->slave, event, val); in i2c_imx_slave_event()
718 i2c_imx->last_slave_event = event; in i2c_imx_slave_event()
725 while (i2c_imx->last_slave_event != I2C_SLAVE_STOP) { in i2c_imx_slave_finish_op()
726 switch (i2c_imx->last_slave_event) { in i2c_imx_slave_finish_op()
769 dev_dbg(&i2c_imx->adapter.dev, "read requested"); in i2c_imx_slave_handle()
780 dev_dbg(&i2c_imx->adapter.dev, "write requested"); in i2c_imx_slave_handle()
813 * 1, then everything is fine. If it returns -1, then the in i2c_imx_slave_handle()
818 hrtimer_try_to_cancel(&i2c_imx->slave_timer); in i2c_imx_slave_handle()
819 hrtimer_forward_now(&i2c_imx->slave_timer, I2C_IMX_CHECK_DELAY); in i2c_imx_slave_handle()
820 hrtimer_restart(&i2c_imx->slave_timer); in i2c_imx_slave_handle()
831 spin_lock_irqsave(&i2c_imx->slave_lock, flags); in i2c_imx_slave_timeout()
835 spin_unlock_irqrestore(&i2c_imx->slave_lock, flags); in i2c_imx_slave_timeout()
844 imx_i2c_write_reg((i2c_imx->slave->addr << 1), i2c_imx, IMX_I2C_IADR); in i2c_imx_slave_init()
849 temp = i2c_imx->hwdata->i2cr_ien_opcode; in i2c_imx_slave_init()
852 /* Enable interrupt from i2c module */ in i2c_imx_slave_init()
861 struct imx_i2c_struct *i2c_imx = i2c_get_adapdata(client->adapter); in i2c_imx_reg_slave()
864 if (i2c_imx->slave) in i2c_imx_reg_slave()
865 return -EBUSY; in i2c_imx_reg_slave()
867 i2c_imx->slave = client; in i2c_imx_reg_slave()
868 i2c_imx->last_slave_event = I2C_SLAVE_STOP; in i2c_imx_reg_slave()
871 ret = pm_runtime_resume_and_get(i2c_imx->adapter.dev.parent); in i2c_imx_reg_slave()
873 dev_err(&i2c_imx->adapter.dev, "failed to resume i2c controller"); in i2c_imx_reg_slave()
884 struct imx_i2c_struct *i2c_imx = i2c_get_adapdata(client->adapter); in i2c_imx_unreg_slave()
887 if (!i2c_imx->slave) in i2c_imx_unreg_slave()
888 return -EINVAL; in i2c_imx_unreg_slave()
895 i2c_imx->slave = NULL; in i2c_imx_unreg_slave()
898 ret = pm_runtime_put_sync(i2c_imx->adapter.dev.parent); in i2c_imx_unreg_slave()
900 dev_err(&i2c_imx->adapter.dev, "failed to suspend i2c controller"); in i2c_imx_unreg_slave()
908 i2c_imx->i2csr = status; in i2c_imx_master_isr()
909 wake_up(&i2c_imx->queue); in i2c_imx_master_isr()
920 spin_lock_irqsave(&i2c_imx->slave_lock, flags); in i2c_imx_isr()
926 if (i2c_imx->slave) { in i2c_imx_isr()
932 spin_unlock_irqrestore(&i2c_imx->slave_lock, in i2c_imx_isr()
938 spin_unlock_irqrestore(&i2c_imx->slave_lock, flags); in i2c_imx_isr()
941 spin_unlock_irqrestore(&i2c_imx->slave_lock, flags); in i2c_imx_isr()
953 struct imx_i2c_dma *dma = i2c_imx->dma; in i2c_imx_dma_write()
954 struct device *dev = &i2c_imx->adapter.dev; in i2c_imx_dma_write()
956 dma->chan_using = dma->chan_tx; in i2c_imx_dma_write()
957 dma->dma_transfer_dir = DMA_MEM_TO_DEV; in i2c_imx_dma_write()
958 dma->dma_data_dir = DMA_TO_DEVICE; in i2c_imx_dma_write()
959 dma->dma_len = msgs->len - 1; in i2c_imx_dma_write()
974 &i2c_imx->dma->cmd_complete, in i2c_imx_dma_write()
977 dmaengine_terminate_sync(dma->chan_using); in i2c_imx_dma_write()
978 return -ETIMEDOUT; in i2c_imx_dma_write()
989 return -ETIMEDOUT; in i2c_imx_dma_write()
999 imx_i2c_write_reg(msgs->buf[msgs->len-1], in i2c_imx_dma_write()
1015 struct imx_i2c_dma *dma = i2c_imx->dma; in i2c_imx_dma_read()
1016 struct device *dev = &i2c_imx->adapter.dev; in i2c_imx_dma_read()
1019 dma->chan_using = dma->chan_rx; in i2c_imx_dma_read()
1020 dma->dma_transfer_dir = DMA_DEV_TO_MEM; in i2c_imx_dma_read()
1021 dma->dma_data_dir = DMA_FROM_DEVICE; in i2c_imx_dma_read()
1023 dma->dma_len = msgs->len - 2; in i2c_imx_dma_read()
1029 &i2c_imx->dma->cmd_complete, in i2c_imx_dma_read()
1032 dmaengine_terminate_sync(dma->chan_using); in i2c_imx_dma_read()
1033 return -ETIMEDOUT; in i2c_imx_dma_read()
1044 return -ETIMEDOUT; in i2c_imx_dma_read()
1053 /* read n-1 byte data */ in i2c_imx_dma_read()
1058 msgs->buf[msgs->len-2] = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2DR); in i2c_imx_dma_read()
1072 i2c_imx->stopped = 1; in i2c_imx_dma_read()
1075 if (!i2c_imx->stopped) in i2c_imx_dma_read()
1079 * For i2c master receiver repeat restart operation like: in i2c_imx_dma_read()
1080 * read -> repeat MSTA -> read/write in i2c_imx_dma_read()
1089 msgs->buf[msgs->len-1] = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2DR); in i2c_imx_dma_read()
1099 dev_dbg(&i2c_imx->adapter.dev, "<%s> write slave address: addr=0x%x\n", in i2c_imx_write()
1110 dev_dbg(&i2c_imx->adapter.dev, "<%s> write data\n", __func__); in i2c_imx_write()
1113 for (i = 0; i < msgs->len; i++) { in i2c_imx_write()
1114 dev_dbg(&i2c_imx->adapter.dev, in i2c_imx_write()
1116 __func__, i, msgs->buf[i]); in i2c_imx_write()
1117 imx_i2c_write_reg(msgs->buf[i], i2c_imx, IMX_I2C_I2DR); in i2c_imx_write()
1133 int block_data = msgs->flags & I2C_M_RECV_LEN; in i2c_imx_read()
1134 int use_dma = i2c_imx->dma && msgs->flags & I2C_M_DMA_SAFE && in i2c_imx_read()
1135 msgs->len >= DMA_THRESHOLD && !block_data; in i2c_imx_read()
1137 dev_dbg(&i2c_imx->adapter.dev, in i2c_imx_read()
1150 dev_dbg(&i2c_imx->adapter.dev, "<%s> setup bus\n", __func__); in i2c_imx_read()
1160 if ((msgs->len - 1) || block_data) in i2c_imx_read()
1167 dev_dbg(&i2c_imx->adapter.dev, "<%s> read data\n", __func__); in i2c_imx_read()
1173 for (i = 0; i < msgs->len; i++) { in i2c_imx_read()
1182 * msgs->len. in i2c_imx_read()
1187 return -EPROTO; in i2c_imx_read()
1188 dev_dbg(&i2c_imx->adapter.dev, in i2c_imx_read()
1191 msgs->len += len; in i2c_imx_read()
1193 if (i == (msgs->len - 1)) { in i2c_imx_read()
1199 dev_dbg(&i2c_imx->adapter.dev, in i2c_imx_read()
1203 i2c_imx->stopped = 1; in i2c_imx_read()
1206 if (!i2c_imx->stopped) in i2c_imx_read()
1210 * For i2c master receiver repeat restart operation like: in i2c_imx_read()
1211 * read -> repeat MSTA -> read/write in i2c_imx_read()
1220 } else if (i == (msgs->len - 2)) { in i2c_imx_read()
1221 dev_dbg(&i2c_imx->adapter.dev, in i2c_imx_read()
1228 msgs->buf[0] = len; in i2c_imx_read()
1230 msgs->buf[i] = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2DR); in i2c_imx_read()
1231 dev_dbg(&i2c_imx->adapter.dev, in i2c_imx_read()
1233 __func__, i, msgs->buf[i]); in i2c_imx_read()
1246 /* Start I2C transfer */ in i2c_imx_xfer_common()
1253 if (!atomic && i2c_imx->adapter.bus_recovery_info) { in i2c_imx_xfer_common()
1254 i2c_recover_bus(&i2c_imx->adapter); in i2c_imx_xfer_common()
1264 if (i == num - 1) in i2c_imx_xfer_common()
1268 dev_dbg(&i2c_imx->adapter.dev, in i2c_imx_xfer_common()
1277 dev_dbg(&i2c_imx->adapter.dev, in i2c_imx_xfer_common()
1282 dev_dbg(&i2c_imx->adapter.dev, in i2c_imx_xfer_common()
1289 dev_dbg(&i2c_imx->adapter.dev, in i2c_imx_xfer_common()
1301 i2c_imx->dma && msgs[i].len >= DMA_THRESHOLD && in i2c_imx_xfer_common()
1312 /* Stop I2C transfer */ in i2c_imx_xfer_common()
1315 dev_dbg(&i2c_imx->adapter.dev, "<%s> exit with: %s: %d\n", __func__, in i2c_imx_xfer_common()
1319 if (i2c_imx->slave) in i2c_imx_xfer_common()
1331 result = pm_runtime_resume_and_get(i2c_imx->adapter.dev.parent); in i2c_imx_xfer()
1337 pm_runtime_mark_last_busy(i2c_imx->adapter.dev.parent); in i2c_imx_xfer()
1338 pm_runtime_put_autosuspend(i2c_imx->adapter.dev.parent); in i2c_imx_xfer()
1349 result = clk_enable(i2c_imx->clk); in i2c_imx_xfer_atomic()
1355 clk_disable(i2c_imx->clk); in i2c_imx_xfer_atomic()
1366 pinctrl_select_state(i2c_imx->pinctrl, i2c_imx->pinctrl_pins_gpio); in i2c_imx_prepare_recovery()
1375 pinctrl_select_state(i2c_imx->pinctrl, i2c_imx->pinctrl_pins_default); in i2c_imx_unprepare_recovery()
1388 struct i2c_bus_recovery_info *rinfo = &i2c_imx->rinfo; in i2c_imx_init_recovery_info()
1390 i2c_imx->pinctrl = devm_pinctrl_get(&pdev->dev); in i2c_imx_init_recovery_info()
1391 if (!i2c_imx->pinctrl) { in i2c_imx_init_recovery_info()
1392 dev_info(&pdev->dev, "pinctrl unavailable, bus recovery not supported\n"); in i2c_imx_init_recovery_info()
1395 if (IS_ERR(i2c_imx->pinctrl)) { in i2c_imx_init_recovery_info()
1396 dev_info(&pdev->dev, "can't get pinctrl, bus recovery not supported\n"); in i2c_imx_init_recovery_info()
1397 return PTR_ERR(i2c_imx->pinctrl); in i2c_imx_init_recovery_info()
1400 i2c_imx->pinctrl_pins_default = pinctrl_lookup_state(i2c_imx->pinctrl, in i2c_imx_init_recovery_info()
1402 i2c_imx->pinctrl_pins_gpio = pinctrl_lookup_state(i2c_imx->pinctrl, in i2c_imx_init_recovery_info()
1404 rinfo->sda_gpiod = devm_gpiod_get(&pdev->dev, "sda", GPIOD_IN); in i2c_imx_init_recovery_info()
1405 rinfo->scl_gpiod = devm_gpiod_get(&pdev->dev, "scl", GPIOD_OUT_HIGH_OPEN_DRAIN); in i2c_imx_init_recovery_info()
1407 if (PTR_ERR(rinfo->sda_gpiod) == -EPROBE_DEFER || in i2c_imx_init_recovery_info()
1408 PTR_ERR(rinfo->scl_gpiod) == -EPROBE_DEFER) { in i2c_imx_init_recovery_info()
1409 return -EPROBE_DEFER; in i2c_imx_init_recovery_info()
1410 } else if (IS_ERR(rinfo->sda_gpiod) || in i2c_imx_init_recovery_info()
1411 IS_ERR(rinfo->scl_gpiod) || in i2c_imx_init_recovery_info()
1412 IS_ERR(i2c_imx->pinctrl_pins_default) || in i2c_imx_init_recovery_info()
1413 IS_ERR(i2c_imx->pinctrl_pins_gpio)) { in i2c_imx_init_recovery_info()
1414 dev_dbg(&pdev->dev, "recovery information incomplete\n"); in i2c_imx_init_recovery_info()
1418 dev_dbg(&pdev->dev, "using scl%s for recovery\n", in i2c_imx_init_recovery_info()
1419 rinfo->sda_gpiod ? ",sda" : ""); in i2c_imx_init_recovery_info()
1421 rinfo->prepare_recovery = i2c_imx_prepare_recovery; in i2c_imx_init_recovery_info()
1422 rinfo->unprepare_recovery = i2c_imx_unprepare_recovery; in i2c_imx_init_recovery_info()
1423 rinfo->recover_bus = i2c_generic_scl_recovery; in i2c_imx_init_recovery_info()
1424 i2c_imx->adapter.bus_recovery_info = rinfo; in i2c_imx_init_recovery_info()
1447 struct imxi2c_platform_data *pdata = dev_get_platdata(&pdev->dev); in i2c_imx_probe()
1461 phy_addr = (dma_addr_t)res->start; in i2c_imx_probe()
1462 i2c_imx = devm_kzalloc(&pdev->dev, sizeof(*i2c_imx), GFP_KERNEL); in i2c_imx_probe()
1464 return -ENOMEM; in i2c_imx_probe()
1466 spin_lock_init(&i2c_imx->slave_lock); in i2c_imx_probe()
1467 hrtimer_init(&i2c_imx->slave_timer, CLOCK_MONOTONIC, HRTIMER_MODE_ABS); in i2c_imx_probe()
1468 i2c_imx->slave_timer.function = i2c_imx_slave_timeout; in i2c_imx_probe()
1470 match = device_get_match_data(&pdev->dev); in i2c_imx_probe()
1472 i2c_imx->hwdata = match; in i2c_imx_probe()
1474 i2c_imx->hwdata = (struct imx_i2c_hwdata *) in i2c_imx_probe()
1475 platform_get_device_id(pdev)->driver_data; in i2c_imx_probe()
1478 strscpy(i2c_imx->adapter.name, pdev->name, sizeof(i2c_imx->adapter.name)); in i2c_imx_probe()
1479 i2c_imx->adapter.owner = THIS_MODULE; in i2c_imx_probe()
1480 i2c_imx->adapter.algo = &i2c_imx_algo; in i2c_imx_probe()
1481 i2c_imx->adapter.dev.parent = &pdev->dev; in i2c_imx_probe()
1482 i2c_imx->adapter.nr = pdev->id; in i2c_imx_probe()
1483 i2c_imx->adapter.dev.of_node = pdev->dev.of_node; in i2c_imx_probe()
1484 i2c_imx->base = base; in i2c_imx_probe()
1485 ACPI_COMPANION_SET(&i2c_imx->adapter.dev, ACPI_COMPANION(&pdev->dev)); in i2c_imx_probe()
1487 /* Get I2C clock */ in i2c_imx_probe()
1488 i2c_imx->clk = devm_clk_get_enabled(&pdev->dev, NULL); in i2c_imx_probe()
1489 if (IS_ERR(i2c_imx->clk)) in i2c_imx_probe()
1490 return dev_err_probe(&pdev->dev, PTR_ERR(i2c_imx->clk), in i2c_imx_probe()
1491 "can't get I2C clock\n"); in i2c_imx_probe()
1494 init_waitqueue_head(&i2c_imx->queue); in i2c_imx_probe()
1497 i2c_set_adapdata(&i2c_imx->adapter, i2c_imx); in i2c_imx_probe()
1502 pm_runtime_set_autosuspend_delay(&pdev->dev, I2C_PM_TIMEOUT); in i2c_imx_probe()
1503 pm_runtime_use_autosuspend(&pdev->dev); in i2c_imx_probe()
1504 pm_runtime_set_active(&pdev->dev); in i2c_imx_probe()
1505 pm_runtime_enable(&pdev->dev); in i2c_imx_probe()
1507 ret = pm_runtime_get_sync(&pdev->dev); in i2c_imx_probe()
1512 ret = request_irq(irq, i2c_imx_isr, IRQF_SHARED, pdev->name, i2c_imx); in i2c_imx_probe()
1514 dev_err(&pdev->dev, "can't claim irq %d\n", irq); in i2c_imx_probe()
1519 i2c_imx->bitrate = I2C_MAX_STANDARD_MODE_FREQ; in i2c_imx_probe()
1520 ret = of_property_read_u32(pdev->dev.of_node, in i2c_imx_probe()
1521 "clock-frequency", &i2c_imx->bitrate); in i2c_imx_probe()
1522 if (ret < 0 && pdata && pdata->bitrate) in i2c_imx_probe()
1523 i2c_imx->bitrate = pdata->bitrate; in i2c_imx_probe()
1524 i2c_imx->clk_change_nb.notifier_call = i2c_imx_clk_notifier_call; in i2c_imx_probe()
1525 clk_notifier_register(i2c_imx->clk, &i2c_imx->clk_change_nb); in i2c_imx_probe()
1526 i2c_imx_set_clk(i2c_imx, clk_get_rate(i2c_imx->clk)); in i2c_imx_probe()
1533 if (ret == -EPROBE_DEFER) in i2c_imx_probe()
1536 /* Add I2C adapter */ in i2c_imx_probe()
1537 ret = i2c_add_numbered_adapter(&i2c_imx->adapter); in i2c_imx_probe()
1541 pm_runtime_mark_last_busy(&pdev->dev); in i2c_imx_probe()
1542 pm_runtime_put_autosuspend(&pdev->dev); in i2c_imx_probe()
1544 dev_dbg(&i2c_imx->adapter.dev, "claimed irq %d\n", irq); in i2c_imx_probe()
1545 dev_dbg(&i2c_imx->adapter.dev, "device resources: %pR\n", res); in i2c_imx_probe()
1546 dev_dbg(&i2c_imx->adapter.dev, "adapter name: \"%s\"\n", in i2c_imx_probe()
1547 i2c_imx->adapter.name); in i2c_imx_probe()
1548 dev_info(&i2c_imx->adapter.dev, "IMX I2C adapter registered\n"); in i2c_imx_probe()
1556 clk_notifier_unregister(i2c_imx->clk, &i2c_imx->clk_change_nb); in i2c_imx_probe()
1559 pm_runtime_put_noidle(&pdev->dev); in i2c_imx_probe()
1560 pm_runtime_disable(&pdev->dev); in i2c_imx_probe()
1561 pm_runtime_set_suspended(&pdev->dev); in i2c_imx_probe()
1562 pm_runtime_dont_use_autosuspend(&pdev->dev); in i2c_imx_probe()
1571 ret = pm_runtime_get_sync(&pdev->dev); in i2c_imx_remove()
1573 hrtimer_cancel(&i2c_imx->slave_timer); in i2c_imx_remove()
1576 dev_dbg(&i2c_imx->adapter.dev, "adapter removed\n"); in i2c_imx_remove()
1577 i2c_del_adapter(&i2c_imx->adapter); in i2c_imx_remove()
1579 if (i2c_imx->dma) in i2c_imx_remove()
1590 clk_notifier_unregister(i2c_imx->clk, &i2c_imx->clk_change_nb); in i2c_imx_remove()
1595 pm_runtime_put_noidle(&pdev->dev); in i2c_imx_remove()
1596 pm_runtime_disable(&pdev->dev); in i2c_imx_remove()
1603 clk_disable(i2c_imx->clk); in i2c_imx_runtime_suspend()
1613 ret = clk_enable(i2c_imx->clk); in i2c_imx_runtime_resume()
1615 dev_err(dev, "can't enable I2C clock, ret=%d\n", ret); in i2c_imx_runtime_resume()
1651 MODULE_DESCRIPTION("I2C adapter driver for IMX I2C bus");