Lines Matching refs:i2c_imx
263 static inline int is_imx1_i2c(struct imx_i2c_struct *i2c_imx)
265 return i2c_imx->hwdata->devtype == IMX1_I2C;
269 struct imx_i2c_struct *i2c_imx, unsigned int reg)
271 writeb(val, i2c_imx->base + (reg << i2c_imx->hwdata->regshift));
274 static inline unsigned char imx_i2c_read_reg(struct imx_i2c_struct *i2c_imx,
277 return readb(i2c_imx->base + (reg << i2c_imx->hwdata->regshift));
281 static void i2c_imx_dma_request(struct imx_i2c_struct *i2c_imx,
286 struct device *dev = &i2c_imx->adapter.dev;
302 (IMX_I2C_I2DR << i2c_imx->hwdata->regshift);
321 (IMX_I2C_I2DR << i2c_imx->hwdata->regshift);
331 i2c_imx->dma = dma;
348 struct imx_i2c_struct *i2c_imx = (struct imx_i2c_struct *)arg;
349 struct imx_i2c_dma *dma = i2c_imx->dma;
356 static int i2c_imx_dma_xfer(struct imx_i2c_struct *i2c_imx,
359 struct imx_i2c_dma *dma = i2c_imx->dma;
361 struct device *dev = &i2c_imx->adapter.dev;
381 txdesc->callback_param = i2c_imx;
399 static void i2c_imx_dma_free(struct imx_i2c_struct *i2c_imx)
401 struct imx_i2c_dma *dma = i2c_imx->dma;
415 static void i2c_imx_clear_irq(struct imx_i2c_struct *i2c_imx, unsigned int bits)
424 temp = ~i2c_imx->hwdata->i2sr_clr_opcode ^ bits;
425 imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2SR);
428 static int i2c_imx_bus_busy(struct imx_i2c_struct *i2c_imx, int for_busy, bool atomic)
433 dev_dbg(&i2c_imx->adapter.dev, "<%s>\n", __func__);
436 temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2SR);
440 i2c_imx_clear_irq(i2c_imx, I2SR_IAL);
445 i2c_imx->stopped = 0;
449 i2c_imx->stopped = 1;
453 dev_dbg(&i2c_imx->adapter.dev,
466 static int i2c_imx_trx_complete(struct imx_i2c_struct *i2c_imx, bool atomic)
469 void __iomem *addr = i2c_imx->base + (IMX_I2C_I2SR << i2c_imx->hwdata->regshift);
483 i2c_imx->i2csr = regval;
484 i2c_imx_clear_irq(i2c_imx, I2SR_IIF | I2SR_IAL);
486 wait_event_timeout(i2c_imx->queue, i2c_imx->i2csr & I2SR_IIF, HZ / 10);
489 if (unlikely(!(i2c_imx->i2csr & I2SR_IIF))) {
490 dev_dbg(&i2c_imx->adapter.dev, "<%s> Timeout\n", __func__);
495 if (i2c_imx->i2csr & I2SR_IAL) {
496 dev_dbg(&i2c_imx->adapter.dev, "<%s> Arbitration lost\n", __func__);
497 i2c_imx_clear_irq(i2c_imx, I2SR_IAL);
499 i2c_imx->i2csr = 0;
503 dev_dbg(&i2c_imx->adapter.dev, "<%s> TRX complete\n", __func__);
504 i2c_imx->i2csr = 0;
508 static int i2c_imx_acked(struct imx_i2c_struct *i2c_imx)
510 if (imx_i2c_read_reg(i2c_imx, IMX_I2C_I2SR) & I2SR_RXAK) {
511 dev_dbg(&i2c_imx->adapter.dev, "<%s> No ACK\n", __func__);
515 dev_dbg(&i2c_imx->adapter.dev, "<%s> ACK received\n", __func__);
519 static void i2c_imx_set_clk(struct imx_i2c_struct *i2c_imx,
522 struct imx_i2c_clk_pair *i2c_clk_div = i2c_imx->hwdata->clk_div;
527 if (i2c_imx->cur_clk == i2c_clk_rate)
530 i2c_imx->cur_clk = i2c_clk_rate;
532 div = (i2c_clk_rate + i2c_imx->bitrate - 1) / i2c_imx->bitrate;
535 else if (div > i2c_clk_div[i2c_imx->hwdata->ndivs - 1].div)
536 i = i2c_imx->hwdata->ndivs - 1;
542 i2c_imx->ifdr = i2c_clk_div[i].val;
550 i2c_imx->disable_delay = (500000U * i2c_clk_div[i].div
554 dev_dbg(&i2c_imx->adapter.dev, "I2C_CLK=%d, REQ DIV=%d\n",
556 dev_dbg(&i2c_imx->adapter.dev, "IFDR[IC]=0x%x, REAL DIV=%d\n",
565 struct imx_i2c_struct *i2c_imx = container_of(nb,
570 i2c_imx_set_clk(i2c_imx, ndata->new_rate);
575 static int i2c_imx_start(struct imx_i2c_struct *i2c_imx, bool atomic)
580 dev_dbg(&i2c_imx->adapter.dev, "<%s>\n", __func__);
582 imx_i2c_write_reg(i2c_imx->ifdr, i2c_imx, IMX_I2C_IFDR);
584 imx_i2c_write_reg(i2c_imx->hwdata->i2sr_clr_opcode, i2c_imx, IMX_I2C_I2SR);
585 imx_i2c_write_reg(i2c_imx->hwdata->i2cr_ien_opcode, i2c_imx, IMX_I2C_I2CR);
594 temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2CR);
596 imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2CR);
597 result = i2c_imx_bus_busy(i2c_imx, 1, atomic);
606 imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2CR);
610 static void i2c_imx_stop(struct imx_i2c_struct *i2c_imx, bool atomic)
614 if (!i2c_imx->stopped) {
616 dev_dbg(&i2c_imx->adapter.dev, "<%s>\n", __func__);
617 temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2CR);
619 i2c_imx->stopped = 1;
621 if (i2c_imx->dma)
623 imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2CR);
625 if (is_imx1_i2c(i2c_imx)) {
630 udelay(i2c_imx->disable_delay);
633 if (!i2c_imx->stopped)
634 i2c_imx_bus_busy(i2c_imx, 0, atomic);
637 temp = i2c_imx->hwdata->i2cr_ien_opcode ^ I2CR_IEN,
638 imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2CR);
643 struct imx_i2c_struct *i2c_imx = dev_id;
646 temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2SR);
649 i2c_imx->i2csr = temp;
650 i2c_imx_clear_irq(i2c_imx, I2SR_IIF);
651 wake_up(&i2c_imx->queue);
658 static int i2c_imx_dma_write(struct imx_i2c_struct *i2c_imx,
665 struct imx_i2c_dma *dma = i2c_imx->dma;
666 struct device *dev = &i2c_imx->adapter.dev;
672 result = i2c_imx_dma_xfer(i2c_imx, msgs);
676 temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2CR);
678 imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2CR);
684 imx_i2c_write_reg(i2c_8bit_addr_from_msg(msgs), i2c_imx, IMX_I2C_I2DR);
686 &i2c_imx->dma->cmd_complete,
695 temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2SR);
706 temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2CR);
708 imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2CR);
712 i2c_imx, IMX_I2C_I2DR);
713 result = i2c_imx_trx_complete(i2c_imx, false);
717 return i2c_imx_acked(i2c_imx);
720 static int i2c_imx_dma_read(struct imx_i2c_struct *i2c_imx,
727 struct imx_i2c_dma *dma = i2c_imx->dma;
728 struct device *dev = &i2c_imx->adapter.dev;
736 result = i2c_imx_dma_xfer(i2c_imx, msgs);
741 &i2c_imx->dma->cmd_complete,
750 temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2SR);
761 temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2CR);
763 imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2CR);
766 temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2CR);
768 imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2CR);
770 msgs->buf[msgs->len-2] = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2DR);
772 result = i2c_imx_trx_complete(i2c_imx, false);
782 temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2CR);
784 i2c_imx->stopped = 1;
786 imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2CR);
787 if (!i2c_imx->stopped)
788 i2c_imx_bus_busy(i2c_imx, 0, false);
797 temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2CR);
799 imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2CR);
801 msgs->buf[msgs->len-1] = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2DR);
806 static int i2c_imx_write(struct imx_i2c_struct *i2c_imx, struct i2c_msg *msgs,
811 dev_dbg(&i2c_imx->adapter.dev, "<%s> write slave address: addr=0x%x\n",
815 imx_i2c_write_reg(i2c_8bit_addr_from_msg(msgs), i2c_imx, IMX_I2C_I2DR);
816 result = i2c_imx_trx_complete(i2c_imx, atomic);
819 result = i2c_imx_acked(i2c_imx);
822 dev_dbg(&i2c_imx->adapter.dev, "<%s> write data\n", __func__);
826 dev_dbg(&i2c_imx->adapter.dev,
829 imx_i2c_write_reg(msgs->buf[i], i2c_imx, IMX_I2C_I2DR);
830 result = i2c_imx_trx_complete(i2c_imx, atomic);
833 result = i2c_imx_acked(i2c_imx);
840 static int i2c_imx_read(struct imx_i2c_struct *i2c_imx, struct i2c_msg *msgs,
846 int use_dma = i2c_imx->dma && msgs->flags & I2C_M_DMA_SAFE &&
849 dev_dbg(&i2c_imx->adapter.dev,
854 imx_i2c_write_reg(i2c_8bit_addr_from_msg(msgs), i2c_imx, IMX_I2C_I2DR);
855 result = i2c_imx_trx_complete(i2c_imx, atomic);
858 result = i2c_imx_acked(i2c_imx);
862 dev_dbg(&i2c_imx->adapter.dev, "<%s> setup bus\n", __func__);
865 temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2CR);
876 imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2CR);
877 imx_i2c_read_reg(i2c_imx, IMX_I2C_I2DR); /* dummy read */
879 dev_dbg(&i2c_imx->adapter.dev, "<%s> read data\n", __func__);
882 return i2c_imx_dma_read(i2c_imx, msgs, is_lastmsg);
888 result = i2c_imx_trx_complete(i2c_imx, atomic);
897 len = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2DR);
900 dev_dbg(&i2c_imx->adapter.dev,
911 dev_dbg(&i2c_imx->adapter.dev,
913 temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2CR);
915 i2c_imx->stopped = 1;
917 imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2CR);
918 if (!i2c_imx->stopped)
919 i2c_imx_bus_busy(i2c_imx, 0, atomic);
928 temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2CR);
930 imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2CR);
933 dev_dbg(&i2c_imx->adapter.dev,
935 temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2CR);
937 imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2CR);
942 msgs->buf[i] = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2DR);
943 dev_dbg(&i2c_imx->adapter.dev,
956 struct imx_i2c_struct *i2c_imx = i2c_get_adapdata(adapter);
958 dev_dbg(&i2c_imx->adapter.dev, "<%s>\n", __func__);
961 result = i2c_imx_start(i2c_imx, atomic);
967 if (!atomic && i2c_imx->adapter.bus_recovery_info) {
968 i2c_recover_bus(&i2c_imx->adapter);
969 result = i2c_imx_start(i2c_imx, atomic);
982 dev_dbg(&i2c_imx->adapter.dev,
984 temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2CR);
986 imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2CR);
987 result = i2c_imx_bus_busy(i2c_imx, 1, atomic);
991 dev_dbg(&i2c_imx->adapter.dev,
995 temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2CR);
996 dev_dbg(&i2c_imx->adapter.dev,
1002 temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2SR);
1003 dev_dbg(&i2c_imx->adapter.dev,
1012 result = i2c_imx_read(i2c_imx, &msgs[i], is_lastmsg, atomic);
1015 i2c_imx->dma && msgs[i].len >= DMA_THRESHOLD &&
1017 result = i2c_imx_dma_write(i2c_imx, &msgs[i]);
1019 result = i2c_imx_write(i2c_imx, &msgs[i], atomic);
1027 i2c_imx_stop(i2c_imx, atomic);
1029 dev_dbg(&i2c_imx->adapter.dev, "<%s> exit with: %s: %d\n", __func__,
1038 struct imx_i2c_struct *i2c_imx = i2c_get_adapdata(adapter);
1041 result = pm_runtime_resume_and_get(i2c_imx->adapter.dev.parent);
1047 pm_runtime_mark_last_busy(i2c_imx->adapter.dev.parent);
1048 pm_runtime_put_autosuspend(i2c_imx->adapter.dev.parent);
1056 struct imx_i2c_struct *i2c_imx = i2c_get_adapdata(adapter);
1059 result = clk_enable(i2c_imx->clk);
1065 clk_disable(i2c_imx->clk);
1072 struct imx_i2c_struct *i2c_imx;
1074 i2c_imx = container_of(adap, struct imx_i2c_struct, adapter);
1076 pinctrl_select_state(i2c_imx->pinctrl, i2c_imx->pinctrl_pins_gpio);
1081 struct imx_i2c_struct *i2c_imx;
1083 i2c_imx = container_of(adap, struct imx_i2c_struct, adapter);
1085 pinctrl_select_state(i2c_imx->pinctrl, i2c_imx->pinctrl_pins_default);
1095 static int i2c_imx_init_recovery_info(struct imx_i2c_struct *i2c_imx,
1098 struct i2c_bus_recovery_info *rinfo = &i2c_imx->rinfo;
1100 i2c_imx->pinctrl = devm_pinctrl_get(&pdev->dev);
1101 if (!i2c_imx->pinctrl || IS_ERR(i2c_imx->pinctrl)) {
1103 return PTR_ERR(i2c_imx->pinctrl);
1106 i2c_imx->pinctrl_pins_default = pinctrl_lookup_state(i2c_imx->pinctrl,
1108 i2c_imx->pinctrl_pins_gpio = pinctrl_lookup_state(i2c_imx->pinctrl,
1118 IS_ERR(i2c_imx->pinctrl_pins_default) ||
1119 IS_ERR(i2c_imx->pinctrl_pins_gpio)) {
1130 i2c_imx->adapter.bus_recovery_info = rinfo;
1149 struct imx_i2c_struct *i2c_imx;
1169 i2c_imx = devm_kzalloc(&pdev->dev, sizeof(*i2c_imx), GFP_KERNEL);
1170 if (!i2c_imx)
1175 i2c_imx->hwdata = match;
1177 i2c_imx->hwdata = (struct imx_i2c_hwdata *)
1180 /* Setup i2c_imx driver structure */
1181 strlcpy(i2c_imx->adapter.name, pdev->name, sizeof(i2c_imx->adapter.name));
1182 i2c_imx->adapter.owner = THIS_MODULE;
1183 i2c_imx->adapter.algo = &i2c_imx_algo;
1184 i2c_imx->adapter.dev.parent = &pdev->dev;
1185 i2c_imx->adapter.nr = pdev->id;
1186 i2c_imx->adapter.dev.of_node = pdev->dev.of_node;
1187 i2c_imx->base = base;
1188 ACPI_COMPANION_SET(&i2c_imx->adapter.dev, ACPI_COMPANION(&pdev->dev));
1191 i2c_imx->clk = devm_clk_get(&pdev->dev, NULL);
1192 if (IS_ERR(i2c_imx->clk))
1193 return dev_err_probe(&pdev->dev, PTR_ERR(i2c_imx->clk),
1196 ret = clk_prepare_enable(i2c_imx->clk);
1203 init_waitqueue_head(&i2c_imx->queue);
1206 i2c_set_adapdata(&i2c_imx->adapter, i2c_imx);
1209 platform_set_drvdata(pdev, i2c_imx);
1222 pdev->name, i2c_imx);
1229 i2c_imx->bitrate = I2C_MAX_STANDARD_MODE_FREQ;
1231 "clock-frequency", &i2c_imx->bitrate);
1233 i2c_imx->bitrate = pdata->bitrate;
1234 i2c_imx->clk_change_nb.notifier_call = i2c_imx_clk_notifier_call;
1235 clk_notifier_register(i2c_imx->clk, &i2c_imx->clk_change_nb);
1236 i2c_imx_set_clk(i2c_imx, clk_get_rate(i2c_imx->clk));
1239 imx_i2c_write_reg(i2c_imx->hwdata->i2cr_ien_opcode ^ I2CR_IEN,
1240 i2c_imx, IMX_I2C_I2CR);
1241 imx_i2c_write_reg(i2c_imx->hwdata->i2sr_clr_opcode, i2c_imx, IMX_I2C_I2SR);
1244 ret = i2c_imx_init_recovery_info(i2c_imx, pdev);
1250 ret = i2c_add_numbered_adapter(&i2c_imx->adapter);
1257 dev_dbg(&i2c_imx->adapter.dev, "claimed irq %d\n", irq);
1258 dev_dbg(&i2c_imx->adapter.dev, "device resources: %pR\n", res);
1259 dev_dbg(&i2c_imx->adapter.dev, "adapter name: \"%s\"\n",
1260 i2c_imx->adapter.name);
1261 dev_info(&i2c_imx->adapter.dev, "IMX I2C adapter registered\n");
1264 i2c_imx_dma_request(i2c_imx, phy_addr);
1269 clk_notifier_unregister(i2c_imx->clk, &i2c_imx->clk_change_nb);
1270 free_irq(irq, i2c_imx);
1276 clk_disable_unprepare(i2c_imx->clk);
1282 struct imx_i2c_struct *i2c_imx = platform_get_drvdata(pdev);
1288 dev_dbg(&i2c_imx->adapter.dev, "adapter removed\n");
1289 i2c_del_adapter(&i2c_imx->adapter);
1291 if (i2c_imx->dma)
1292 i2c_imx_dma_free(i2c_imx);
1296 imx_i2c_write_reg(0, i2c_imx, IMX_I2C_IADR);
1297 imx_i2c_write_reg(0, i2c_imx, IMX_I2C_IFDR);
1298 imx_i2c_write_reg(0, i2c_imx, IMX_I2C_I2CR);
1299 imx_i2c_write_reg(0, i2c_imx, IMX_I2C_I2SR);
1300 clk_disable(i2c_imx->clk);
1303 clk_notifier_unregister(i2c_imx->clk, &i2c_imx->clk_change_nb);
1306 free_irq(irq, i2c_imx);
1308 clk_unprepare(i2c_imx->clk);
1318 struct imx_i2c_struct *i2c_imx = dev_get_drvdata(dev);
1320 clk_disable(i2c_imx->clk);
1327 struct imx_i2c_struct *i2c_imx = dev_get_drvdata(dev);
1330 ret = clk_enable(i2c_imx->clk);