Lines Matching refs:i2c_imx
305 static inline int is_imx1_i2c(struct imx_i2c_struct *i2c_imx)
307 return i2c_imx->hwdata->devtype == IMX1_I2C;
310 static inline int is_vf610_i2c(struct imx_i2c_struct *i2c_imx)
312 return i2c_imx->hwdata->devtype == VF610_I2C;
316 struct imx_i2c_struct *i2c_imx, unsigned int reg)
318 writeb(val, i2c_imx->base + (reg << i2c_imx->hwdata->regshift));
321 static inline unsigned char imx_i2c_read_reg(struct imx_i2c_struct *i2c_imx,
324 return readb(i2c_imx->base + (reg << i2c_imx->hwdata->regshift));
327 static void i2c_imx_clear_irq(struct imx_i2c_struct *i2c_imx, unsigned int bits)
336 temp = ~i2c_imx->hwdata->i2sr_clr_opcode ^ bits;
337 imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2SR);
341 static void i2c_imx_reset_regs(struct imx_i2c_struct *i2c_imx)
343 imx_i2c_write_reg(i2c_imx->hwdata->i2cr_ien_opcode ^ I2CR_IEN,
344 i2c_imx, IMX_I2C_I2CR);
345 i2c_imx_clear_irq(i2c_imx, I2SR_IIF | I2SR_IAL);
349 static void i2c_imx_dma_request(struct imx_i2c_struct *i2c_imx,
354 struct device *dev = &i2c_imx->adapter.dev;
370 (IMX_I2C_I2DR << i2c_imx->hwdata->regshift);
389 (IMX_I2C_I2DR << i2c_imx->hwdata->regshift);
399 i2c_imx->dma = dma;
416 struct imx_i2c_struct *i2c_imx = (struct imx_i2c_struct *)arg;
417 struct imx_i2c_dma *dma = i2c_imx->dma;
424 static int i2c_imx_dma_xfer(struct imx_i2c_struct *i2c_imx,
427 struct imx_i2c_dma *dma = i2c_imx->dma;
429 struct device *dev = &i2c_imx->adapter.dev;
449 txdesc->callback_param = i2c_imx;
467 static void i2c_imx_dma_free(struct imx_i2c_struct *i2c_imx)
469 struct imx_i2c_dma *dma = i2c_imx->dma;
483 static int i2c_imx_bus_busy(struct imx_i2c_struct *i2c_imx, int for_busy, bool atomic)
489 temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2SR);
493 i2c_imx_clear_irq(i2c_imx, I2SR_IAL);
498 i2c_imx->stopped = 0;
502 i2c_imx->stopped = 1;
506 dev_dbg(&i2c_imx->adapter.dev,
519 static int i2c_imx_trx_complete(struct imx_i2c_struct *i2c_imx, bool atomic)
522 void __iomem *addr = i2c_imx->base + (IMX_I2C_I2SR << i2c_imx->hwdata->regshift);
536 i2c_imx->i2csr = regval;
537 i2c_imx_clear_irq(i2c_imx, I2SR_IIF | I2SR_IAL);
539 wait_event_timeout(i2c_imx->queue, i2c_imx->i2csr & I2SR_IIF, HZ / 10);
542 if (unlikely(!(i2c_imx->i2csr & I2SR_IIF))) {
543 dev_dbg(&i2c_imx->adapter.dev, "<%s> Timeout\n", __func__);
548 if (i2c_imx->i2csr & I2SR_IAL) {
549 dev_dbg(&i2c_imx->adapter.dev, "<%s> Arbitration lost\n", __func__);
550 i2c_imx_clear_irq(i2c_imx, I2SR_IAL);
552 i2c_imx->i2csr = 0;
556 dev_dbg(&i2c_imx->adapter.dev, "<%s> TRX complete\n", __func__);
557 i2c_imx->i2csr = 0;
561 static int i2c_imx_acked(struct imx_i2c_struct *i2c_imx)
563 if (imx_i2c_read_reg(i2c_imx, IMX_I2C_I2SR) & I2SR_RXAK) {
564 dev_dbg(&i2c_imx->adapter.dev, "<%s> No ACK\n", __func__);
568 dev_dbg(&i2c_imx->adapter.dev, "<%s> ACK received\n", __func__);
572 static void i2c_imx_set_clk(struct imx_i2c_struct *i2c_imx,
575 struct imx_i2c_clk_pair *i2c_clk_div = i2c_imx->hwdata->clk_div;
579 if (i2c_imx->hwdata->has_err007805 && i2c_imx->bitrate > 384000) {
580 dev_dbg(&i2c_imx->adapter.dev,
582 i2c_imx->bitrate);
583 i2c_imx->bitrate = 384000;
587 if (i2c_imx->cur_clk == i2c_clk_rate)
590 i2c_imx->cur_clk = i2c_clk_rate;
592 div = DIV_ROUND_UP(i2c_clk_rate, i2c_imx->bitrate);
595 else if (div > i2c_clk_div[i2c_imx->hwdata->ndivs - 1].div)
596 i = i2c_imx->hwdata->ndivs - 1;
602 i2c_imx->ifdr = i2c_clk_div[i].val;
610 i2c_imx->disable_delay = DIV_ROUND_UP(500000U * i2c_clk_div[i].div,
614 dev_dbg(&i2c_imx->adapter.dev, "I2C_CLK=%d, REQ DIV=%d\n",
616 dev_dbg(&i2c_imx->adapter.dev, "IFDR[IC]=0x%x, REAL DIV=%d\n",
625 struct imx_i2c_struct *i2c_imx = container_of(nb,
630 i2c_imx_set_clk(i2c_imx, ndata->new_rate);
635 static int i2c_imx_start(struct imx_i2c_struct *i2c_imx, bool atomic)
640 imx_i2c_write_reg(i2c_imx->ifdr, i2c_imx, IMX_I2C_IFDR);
642 imx_i2c_write_reg(i2c_imx->hwdata->i2sr_clr_opcode, i2c_imx, IMX_I2C_I2SR);
643 imx_i2c_write_reg(i2c_imx->hwdata->i2cr_ien_opcode, i2c_imx, IMX_I2C_I2CR);
652 temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2CR);
654 imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2CR);
655 result = i2c_imx_bus_busy(i2c_imx, 1, atomic);
664 imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2CR);
668 static void i2c_imx_stop(struct imx_i2c_struct *i2c_imx, bool atomic)
672 if (!i2c_imx->stopped) {
674 temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2CR);
676 i2c_imx->stopped = 1;
678 if (i2c_imx->dma)
680 imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2CR);
682 if (is_imx1_i2c(i2c_imx)) {
687 udelay(i2c_imx->disable_delay);
690 if (!i2c_imx->stopped)
691 i2c_imx_bus_busy(i2c_imx, 0, atomic);
694 temp = i2c_imx->hwdata->i2cr_ien_opcode ^ I2CR_IEN,
695 imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2CR);
703 static void i2c_imx_enable_bus_idle(struct imx_i2c_struct *i2c_imx)
705 if (is_vf610_i2c(i2c_imx)) {
708 temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_IBIC);
710 imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_IBIC);
714 static void i2c_imx_slave_event(struct imx_i2c_struct *i2c_imx,
717 i2c_slave_event(i2c_imx->slave, event, val);
718 i2c_imx->last_slave_event = event;
721 static void i2c_imx_slave_finish_op(struct imx_i2c_struct *i2c_imx)
725 while (i2c_imx->last_slave_event != I2C_SLAVE_STOP) {
726 switch (i2c_imx->last_slave_event) {
728 i2c_imx_slave_event(i2c_imx, I2C_SLAVE_READ_PROCESSED,
735 i2c_imx_slave_event(i2c_imx, I2C_SLAVE_STOP, &val);
745 static irqreturn_t i2c_imx_slave_handle(struct imx_i2c_struct *i2c_imx,
751 i2c_imx_clear_irq(i2c_imx, I2SR_IAL);
758 i2c_imx_slave_finish_op(i2c_imx);
767 i2c_imx_slave_finish_op(i2c_imx);
769 dev_dbg(&i2c_imx->adapter.dev, "read requested");
770 i2c_imx_slave_event(i2c_imx,
775 imx_i2c_write_reg(ctl, i2c_imx, IMX_I2C_I2CR);
778 imx_i2c_write_reg(value, i2c_imx, IMX_I2C_I2DR);
780 dev_dbg(&i2c_imx->adapter.dev, "write requested");
781 i2c_imx_slave_event(i2c_imx,
786 imx_i2c_write_reg(ctl, i2c_imx, IMX_I2C_I2CR);
788 imx_i2c_read_reg(i2c_imx, IMX_I2C_I2DR);
791 value = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2DR);
792 i2c_imx_slave_event(i2c_imx,
796 imx_i2c_write_reg(ctl, i2c_imx, IMX_I2C_I2CR);
798 i2c_imx_slave_event(i2c_imx,
801 imx_i2c_write_reg(value, i2c_imx, IMX_I2C_I2DR);
804 imx_i2c_write_reg(ctl, i2c_imx, IMX_I2C_I2CR);
805 imx_i2c_read_reg(i2c_imx, IMX_I2C_I2DR);
808 i2c_imx_slave_event(i2c_imx,
811 i2c_imx_slave_finish_op(i2c_imx);
823 hrtimer_try_to_cancel(&i2c_imx->slave_timer);
824 hrtimer_forward_now(&i2c_imx->slave_timer, I2C_IMX_CHECK_DELAY);
825 hrtimer_restart(&i2c_imx->slave_timer);
831 struct imx_i2c_struct *i2c_imx = container_of(t, struct imx_i2c_struct,
836 spin_lock_irqsave(&i2c_imx->slave_lock, flags);
837 status = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2SR);
838 ctl = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2CR);
839 i2c_imx_slave_handle(i2c_imx, status, ctl);
840 spin_unlock_irqrestore(&i2c_imx->slave_lock, flags);
844 static void i2c_imx_slave_init(struct imx_i2c_struct *i2c_imx)
849 imx_i2c_write_reg((i2c_imx->slave->addr << 1), i2c_imx, IMX_I2C_IADR);
851 i2c_imx_reset_regs(i2c_imx);
854 temp = i2c_imx->hwdata->i2cr_ien_opcode;
855 imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2CR);
859 imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2CR);
861 i2c_imx_enable_bus_idle(i2c_imx);
866 struct imx_i2c_struct *i2c_imx = i2c_get_adapdata(client->adapter);
869 if (i2c_imx->slave)
872 i2c_imx->slave = client;
873 i2c_imx->last_slave_event = I2C_SLAVE_STOP;
876 ret = pm_runtime_resume_and_get(i2c_imx->adapter.dev.parent);
878 dev_err(&i2c_imx->adapter.dev, "failed to resume i2c controller");
882 i2c_imx_slave_init(i2c_imx);
889 struct imx_i2c_struct *i2c_imx = i2c_get_adapdata(client->adapter);
892 if (!i2c_imx->slave)
896 imx_i2c_write_reg(0, i2c_imx, IMX_I2C_IADR);
898 i2c_imx_reset_regs(i2c_imx);
900 i2c_imx->slave = NULL;
903 ret = pm_runtime_put_sync(i2c_imx->adapter.dev.parent);
905 dev_err(&i2c_imx->adapter.dev, "failed to suspend i2c controller");
910 static irqreturn_t i2c_imx_master_isr(struct imx_i2c_struct *i2c_imx, unsigned int status)
913 i2c_imx->i2csr = status;
914 wake_up(&i2c_imx->queue);
921 struct imx_i2c_struct *i2c_imx = dev_id;
925 spin_lock_irqsave(&i2c_imx->slave_lock, flags);
926 status = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2SR);
927 ctl = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2CR);
930 i2c_imx_clear_irq(i2c_imx, I2SR_IIF);
931 if (i2c_imx->slave) {
935 ret = i2c_imx_slave_handle(i2c_imx,
937 spin_unlock_irqrestore(&i2c_imx->slave_lock,
941 i2c_imx_slave_finish_op(i2c_imx);
943 spin_unlock_irqrestore(&i2c_imx->slave_lock, flags);
944 return i2c_imx_master_isr(i2c_imx, status);
946 spin_unlock_irqrestore(&i2c_imx->slave_lock, flags);
951 static int i2c_imx_dma_write(struct imx_i2c_struct *i2c_imx,
958 struct imx_i2c_dma *dma = i2c_imx->dma;
959 struct device *dev = &i2c_imx->adapter.dev;
965 result = i2c_imx_dma_xfer(i2c_imx, msgs);
969 temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2CR);
971 imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2CR);
977 imx_i2c_write_reg(i2c_8bit_addr_from_msg(msgs), i2c_imx, IMX_I2C_I2DR);
979 &i2c_imx->dma->cmd_complete,
988 temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2SR);
999 temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2CR);
1001 imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2CR);
1005 i2c_imx, IMX_I2C_I2DR);
1006 result = i2c_imx_trx_complete(i2c_imx, false);
1010 return i2c_imx_acked(i2c_imx);
1013 static int i2c_imx_dma_read(struct imx_i2c_struct *i2c_imx,
1020 struct imx_i2c_dma *dma = i2c_imx->dma;
1021 struct device *dev = &i2c_imx->adapter.dev;
1029 result = i2c_imx_dma_xfer(i2c_imx, msgs);
1034 &i2c_imx->dma->cmd_complete,
1043 temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2SR);
1054 temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2CR);
1056 imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2CR);
1059 temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2CR);
1061 imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2CR);
1063 msgs->buf[msgs->len-2] = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2DR);
1065 result = i2c_imx_trx_complete(i2c_imx, false);
1075 temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2CR);
1077 i2c_imx->stopped = 1;
1079 imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2CR);
1080 if (!i2c_imx->stopped)
1081 i2c_imx_bus_busy(i2c_imx, 0, false);
1090 temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2CR);
1092 imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2CR);
1094 msgs->buf[msgs->len-1] = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2DR);
1099 static int i2c_imx_write(struct imx_i2c_struct *i2c_imx, struct i2c_msg *msgs,
1104 dev_dbg(&i2c_imx->adapter.dev, "<%s> write slave address: addr=0x%x\n",
1108 imx_i2c_write_reg(i2c_8bit_addr_from_msg(msgs), i2c_imx, IMX_I2C_I2DR);
1109 result = i2c_imx_trx_complete(i2c_imx, atomic);
1112 result = i2c_imx_acked(i2c_imx);
1115 dev_dbg(&i2c_imx->adapter.dev, "<%s> write data\n", __func__);
1119 dev_dbg(&i2c_imx->adapter.dev,
1122 imx_i2c_write_reg(msgs->buf[i], i2c_imx, IMX_I2C_I2DR);
1123 result = i2c_imx_trx_complete(i2c_imx, atomic);
1126 result = i2c_imx_acked(i2c_imx);
1133 static int i2c_imx_read(struct imx_i2c_struct *i2c_imx, struct i2c_msg *msgs,
1139 int use_dma = i2c_imx->dma && msgs->flags & I2C_M_DMA_SAFE &&
1142 dev_dbg(&i2c_imx->adapter.dev,
1147 imx_i2c_write_reg(i2c_8bit_addr_from_msg(msgs), i2c_imx, IMX_I2C_I2DR);
1148 result = i2c_imx_trx_complete(i2c_imx, atomic);
1151 result = i2c_imx_acked(i2c_imx);
1155 dev_dbg(&i2c_imx->adapter.dev, "<%s> setup bus\n", __func__);
1158 temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2CR);
1169 imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2CR);
1170 imx_i2c_read_reg(i2c_imx, IMX_I2C_I2DR); /* dummy read */
1172 dev_dbg(&i2c_imx->adapter.dev, "<%s> read data\n", __func__);
1175 return i2c_imx_dma_read(i2c_imx, msgs, is_lastmsg);
1181 result = i2c_imx_trx_complete(i2c_imx, atomic);
1190 len = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2DR);
1193 dev_dbg(&i2c_imx->adapter.dev,
1204 dev_dbg(&i2c_imx->adapter.dev,
1206 temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2CR);
1208 i2c_imx->stopped = 1;
1210 imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2CR);
1211 if (!i2c_imx->stopped)
1212 i2c_imx_bus_busy(i2c_imx, 0, atomic);
1221 temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2CR);
1223 imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2CR);
1226 dev_dbg(&i2c_imx->adapter.dev,
1228 temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2CR);
1230 imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2CR);
1235 msgs->buf[i] = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2DR);
1236 dev_dbg(&i2c_imx->adapter.dev,
1249 struct imx_i2c_struct *i2c_imx = i2c_get_adapdata(adapter);
1252 result = i2c_imx_start(i2c_imx, atomic);
1258 if (!atomic && i2c_imx->adapter.bus_recovery_info) {
1259 i2c_recover_bus(&i2c_imx->adapter);
1260 result = i2c_imx_start(i2c_imx, atomic);
1273 dev_dbg(&i2c_imx->adapter.dev,
1275 temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2CR);
1277 imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2CR);
1278 result = i2c_imx_bus_busy(i2c_imx, 1, atomic);
1282 dev_dbg(&i2c_imx->adapter.dev,
1286 temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2CR);
1287 dev_dbg(&i2c_imx->adapter.dev,
1293 temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2SR);
1294 dev_dbg(&i2c_imx->adapter.dev,
1303 result = i2c_imx_read(i2c_imx, &msgs[i], is_lastmsg, atomic);
1306 i2c_imx->dma && msgs[i].len >= DMA_THRESHOLD &&
1308 result = i2c_imx_dma_write(i2c_imx, &msgs[i]);
1310 result = i2c_imx_write(i2c_imx, &msgs[i], atomic);
1318 i2c_imx_stop(i2c_imx, atomic);
1320 dev_dbg(&i2c_imx->adapter.dev, "<%s> exit with: %s: %d\n", __func__,
1324 if (i2c_imx->slave)
1325 i2c_imx_slave_init(i2c_imx);
1333 struct imx_i2c_struct *i2c_imx = i2c_get_adapdata(adapter);
1336 result = pm_runtime_resume_and_get(i2c_imx->adapter.dev.parent);
1342 pm_runtime_mark_last_busy(i2c_imx->adapter.dev.parent);
1343 pm_runtime_put_autosuspend(i2c_imx->adapter.dev.parent);
1351 struct imx_i2c_struct *i2c_imx = i2c_get_adapdata(adapter);
1354 result = clk_enable(i2c_imx->clk);
1360 clk_disable(i2c_imx->clk);
1367 struct imx_i2c_struct *i2c_imx;
1369 i2c_imx = container_of(adap, struct imx_i2c_struct, adapter);
1371 pinctrl_select_state(i2c_imx->pinctrl, i2c_imx->pinctrl_pins_gpio);
1376 struct imx_i2c_struct *i2c_imx;
1378 i2c_imx = container_of(adap, struct imx_i2c_struct, adapter);
1380 pinctrl_select_state(i2c_imx->pinctrl, i2c_imx->pinctrl_pins_default);
1390 static int i2c_imx_init_recovery_info(struct imx_i2c_struct *i2c_imx,
1393 struct i2c_bus_recovery_info *rinfo = &i2c_imx->rinfo;
1395 i2c_imx->pinctrl = devm_pinctrl_get(&pdev->dev);
1396 if (!i2c_imx->pinctrl) {
1400 if (IS_ERR(i2c_imx->pinctrl)) {
1402 return PTR_ERR(i2c_imx->pinctrl);
1405 i2c_imx->pinctrl_pins_default = pinctrl_lookup_state(i2c_imx->pinctrl,
1407 i2c_imx->pinctrl_pins_gpio = pinctrl_lookup_state(i2c_imx->pinctrl,
1417 IS_ERR(i2c_imx->pinctrl_pins_default) ||
1418 IS_ERR(i2c_imx->pinctrl_pins_gpio)) {
1429 i2c_imx->adapter.bus_recovery_info = rinfo;
1450 struct imx_i2c_struct *i2c_imx;
1467 i2c_imx = devm_kzalloc(&pdev->dev, sizeof(*i2c_imx), GFP_KERNEL);
1468 if (!i2c_imx)
1471 spin_lock_init(&i2c_imx->slave_lock);
1472 hrtimer_init(&i2c_imx->slave_timer, CLOCK_MONOTONIC, HRTIMER_MODE_ABS);
1473 i2c_imx->slave_timer.function = i2c_imx_slave_timeout;
1477 i2c_imx->hwdata = match;
1479 i2c_imx->hwdata = (struct imx_i2c_hwdata *)
1482 /* Setup i2c_imx driver structure */
1483 strscpy(i2c_imx->adapter.name, pdev->name, sizeof(i2c_imx->adapter.name));
1484 i2c_imx->adapter.owner = THIS_MODULE;
1485 i2c_imx->adapter.algo = &i2c_imx_algo;
1486 i2c_imx->adapter.dev.parent = &pdev->dev;
1487 i2c_imx->adapter.nr = pdev->id;
1488 i2c_imx->adapter.dev.of_node = pdev->dev.of_node;
1489 i2c_imx->base = base;
1490 ACPI_COMPANION_SET(&i2c_imx->adapter.dev, ACPI_COMPANION(&pdev->dev));
1493 i2c_imx->clk = devm_clk_get_enabled(&pdev->dev, NULL);
1494 if (IS_ERR(i2c_imx->clk))
1495 return dev_err_probe(&pdev->dev, PTR_ERR(i2c_imx->clk),
1499 init_waitqueue_head(&i2c_imx->queue);
1502 i2c_set_adapdata(&i2c_imx->adapter, i2c_imx);
1505 platform_set_drvdata(pdev, i2c_imx);
1517 ret = request_irq(irq, i2c_imx_isr, IRQF_SHARED, pdev->name, i2c_imx);
1524 i2c_imx->bitrate = I2C_MAX_STANDARD_MODE_FREQ;
1526 "clock-frequency", &i2c_imx->bitrate);
1528 i2c_imx->bitrate = pdata->bitrate;
1529 i2c_imx->clk_change_nb.notifier_call = i2c_imx_clk_notifier_call;
1530 clk_notifier_register(i2c_imx->clk, &i2c_imx->clk_change_nb);
1531 i2c_imx_set_clk(i2c_imx, clk_get_rate(i2c_imx->clk));
1533 i2c_imx_reset_regs(i2c_imx);
1536 ret = i2c_imx_init_recovery_info(i2c_imx, pdev);
1542 ret = i2c_add_numbered_adapter(&i2c_imx->adapter);
1549 dev_dbg(&i2c_imx->adapter.dev, "claimed irq %d\n", irq);
1550 dev_dbg(&i2c_imx->adapter.dev, "device resources: %pR\n", res);
1551 dev_dbg(&i2c_imx->adapter.dev, "adapter name: \"%s\"\n",
1552 i2c_imx->adapter.name);
1553 dev_info(&i2c_imx->adapter.dev, "IMX I2C adapter registered\n");
1556 i2c_imx_dma_request(i2c_imx, phy_addr);
1561 clk_notifier_unregister(i2c_imx->clk, &i2c_imx->clk_change_nb);
1562 free_irq(irq, i2c_imx);
1573 struct imx_i2c_struct *i2c_imx = platform_get_drvdata(pdev);
1578 hrtimer_cancel(&i2c_imx->slave_timer);
1581 dev_dbg(&i2c_imx->adapter.dev, "adapter removed\n");
1582 i2c_del_adapter(&i2c_imx->adapter);
1584 if (i2c_imx->dma)
1585 i2c_imx_dma_free(i2c_imx);
1589 imx_i2c_write_reg(0, i2c_imx, IMX_I2C_IADR);
1590 imx_i2c_write_reg(0, i2c_imx, IMX_I2C_IFDR);
1591 imx_i2c_write_reg(0, i2c_imx, IMX_I2C_I2CR);
1592 imx_i2c_write_reg(0, i2c_imx, IMX_I2C_I2SR);
1595 clk_notifier_unregister(i2c_imx->clk, &i2c_imx->clk_change_nb);
1598 free_irq(irq, i2c_imx);
1606 struct imx_i2c_struct *i2c_imx = dev_get_drvdata(dev);
1608 clk_disable(i2c_imx->clk);
1615 struct imx_i2c_struct *i2c_imx = dev_get_drvdata(dev);
1618 ret = clk_enable(i2c_imx->clk);