Lines Matching refs:i2c_imx

306 static inline int is_imx1_i2c(struct imx_i2c_struct *i2c_imx)  in is_imx1_i2c()  argument
308 return i2c_imx->hwdata->devtype == IMX1_I2C; in is_imx1_i2c()
311 static inline int is_vf610_i2c(struct imx_i2c_struct *i2c_imx) in is_vf610_i2c() argument
313 return i2c_imx->hwdata->devtype == VF610_I2C; in is_vf610_i2c()
317 struct imx_i2c_struct *i2c_imx, unsigned int reg) in imx_i2c_write_reg() argument
319 writeb(val, i2c_imx->base + (reg << i2c_imx->hwdata->regshift)); in imx_i2c_write_reg()
322 static inline unsigned char imx_i2c_read_reg(struct imx_i2c_struct *i2c_imx, in imx_i2c_read_reg() argument
325 return readb(i2c_imx->base + (reg << i2c_imx->hwdata->regshift)); in imx_i2c_read_reg()
328 static void i2c_imx_clear_irq(struct imx_i2c_struct *i2c_imx, unsigned int bits) in i2c_imx_clear_irq() argument
337 temp = ~i2c_imx->hwdata->i2sr_clr_opcode ^ bits; in i2c_imx_clear_irq()
338 imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2SR); in i2c_imx_clear_irq()
342 static void i2c_imx_reset_regs(struct imx_i2c_struct *i2c_imx) in i2c_imx_reset_regs() argument
344 imx_i2c_write_reg(i2c_imx->hwdata->i2cr_ien_opcode ^ I2CR_IEN, in i2c_imx_reset_regs()
345 i2c_imx, IMX_I2C_I2CR); in i2c_imx_reset_regs()
346 i2c_imx_clear_irq(i2c_imx, I2SR_IIF | I2SR_IAL); in i2c_imx_reset_regs()
350 static void i2c_imx_dma_request(struct imx_i2c_struct *i2c_imx, in i2c_imx_dma_request() argument
355 struct device *dev = &i2c_imx->adapter.dev; in i2c_imx_dma_request()
371 (IMX_I2C_I2DR << i2c_imx->hwdata->regshift); in i2c_imx_dma_request()
390 (IMX_I2C_I2DR << i2c_imx->hwdata->regshift); in i2c_imx_dma_request()
400 i2c_imx->dma = dma; in i2c_imx_dma_request()
417 struct imx_i2c_struct *i2c_imx = (struct imx_i2c_struct *)arg; in i2c_imx_dma_callback() local
418 struct imx_i2c_dma *dma = i2c_imx->dma; in i2c_imx_dma_callback()
425 static int i2c_imx_dma_xfer(struct imx_i2c_struct *i2c_imx, in i2c_imx_dma_xfer() argument
428 struct imx_i2c_dma *dma = i2c_imx->dma; in i2c_imx_dma_xfer()
430 struct device *dev = &i2c_imx->adapter.dev; in i2c_imx_dma_xfer()
450 txdesc->callback_param = i2c_imx; in i2c_imx_dma_xfer()
468 static void i2c_imx_dma_free(struct imx_i2c_struct *i2c_imx) in i2c_imx_dma_free() argument
470 struct imx_i2c_dma *dma = i2c_imx->dma; in i2c_imx_dma_free()
484 static int i2c_imx_bus_busy(struct imx_i2c_struct *i2c_imx, int for_busy, bool atomic) in i2c_imx_bus_busy() argument
490 temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2SR); in i2c_imx_bus_busy()
494 i2c_imx_clear_irq(i2c_imx, I2SR_IAL); in i2c_imx_bus_busy()
499 i2c_imx->stopped = 0; in i2c_imx_bus_busy()
503 i2c_imx->stopped = 1; in i2c_imx_bus_busy()
507 dev_dbg(&i2c_imx->adapter.dev, in i2c_imx_bus_busy()
520 static int i2c_imx_trx_complete(struct imx_i2c_struct *i2c_imx, bool atomic) in i2c_imx_trx_complete() argument
523 void __iomem *addr = i2c_imx->base + (IMX_I2C_I2SR << i2c_imx->hwdata->regshift); in i2c_imx_trx_complete()
537 i2c_imx->i2csr = regval; in i2c_imx_trx_complete()
538 i2c_imx_clear_irq(i2c_imx, I2SR_IIF | I2SR_IAL); in i2c_imx_trx_complete()
540 wait_event_timeout(i2c_imx->queue, i2c_imx->i2csr & I2SR_IIF, HZ / 10); in i2c_imx_trx_complete()
543 if (unlikely(!(i2c_imx->i2csr & I2SR_IIF))) { in i2c_imx_trx_complete()
544 dev_dbg(&i2c_imx->adapter.dev, "<%s> Timeout\n", __func__); in i2c_imx_trx_complete()
549 if (i2c_imx->i2csr & I2SR_IAL) { in i2c_imx_trx_complete()
550 dev_dbg(&i2c_imx->adapter.dev, "<%s> Arbitration lost\n", __func__); in i2c_imx_trx_complete()
551 i2c_imx_clear_irq(i2c_imx, I2SR_IAL); in i2c_imx_trx_complete()
553 i2c_imx->i2csr = 0; in i2c_imx_trx_complete()
557 dev_dbg(&i2c_imx->adapter.dev, "<%s> TRX complete\n", __func__); in i2c_imx_trx_complete()
558 i2c_imx->i2csr = 0; in i2c_imx_trx_complete()
562 static int i2c_imx_acked(struct imx_i2c_struct *i2c_imx) in i2c_imx_acked() argument
564 if (imx_i2c_read_reg(i2c_imx, IMX_I2C_I2SR) & I2SR_RXAK) { in i2c_imx_acked()
565 dev_dbg(&i2c_imx->adapter.dev, "<%s> No ACK\n", __func__); in i2c_imx_acked()
569 dev_dbg(&i2c_imx->adapter.dev, "<%s> ACK received\n", __func__); in i2c_imx_acked()
573 static void i2c_imx_set_clk(struct imx_i2c_struct *i2c_imx, in i2c_imx_set_clk() argument
576 struct imx_i2c_clk_pair *i2c_clk_div = i2c_imx->hwdata->clk_div; in i2c_imx_set_clk()
580 if (i2c_imx->hwdata->has_err007805 && i2c_imx->bitrate > 384000) { in i2c_imx_set_clk()
581 dev_dbg(&i2c_imx->adapter.dev, in i2c_imx_set_clk()
583 i2c_imx->bitrate); in i2c_imx_set_clk()
584 i2c_imx->bitrate = 384000; in i2c_imx_set_clk()
588 if (i2c_imx->cur_clk == i2c_clk_rate) in i2c_imx_set_clk()
591 i2c_imx->cur_clk = i2c_clk_rate; in i2c_imx_set_clk()
593 div = DIV_ROUND_UP(i2c_clk_rate, i2c_imx->bitrate); in i2c_imx_set_clk()
596 else if (div > i2c_clk_div[i2c_imx->hwdata->ndivs - 1].div) in i2c_imx_set_clk()
597 i = i2c_imx->hwdata->ndivs - 1; in i2c_imx_set_clk()
603 i2c_imx->ifdr = i2c_clk_div[i].val; in i2c_imx_set_clk()
611 i2c_imx->disable_delay = DIV_ROUND_UP(500000U * i2c_clk_div[i].div, in i2c_imx_set_clk()
615 dev_dbg(&i2c_imx->adapter.dev, "I2C_CLK=%d, REQ DIV=%d\n", in i2c_imx_set_clk()
617 dev_dbg(&i2c_imx->adapter.dev, "IFDR[IC]=0x%x, REAL DIV=%d\n", in i2c_imx_set_clk()
626 struct imx_i2c_struct *i2c_imx = container_of(nb, in i2c_imx_clk_notifier_call() local
631 i2c_imx_set_clk(i2c_imx, ndata->new_rate); in i2c_imx_clk_notifier_call()
636 static int i2c_imx_start(struct imx_i2c_struct *i2c_imx, bool atomic) in i2c_imx_start() argument
641 imx_i2c_write_reg(i2c_imx->ifdr, i2c_imx, IMX_I2C_IFDR); in i2c_imx_start()
643 imx_i2c_write_reg(i2c_imx->hwdata->i2sr_clr_opcode, i2c_imx, IMX_I2C_I2SR); in i2c_imx_start()
644 imx_i2c_write_reg(i2c_imx->hwdata->i2cr_ien_opcode, i2c_imx, IMX_I2C_I2CR); in i2c_imx_start()
653 temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2CR); in i2c_imx_start()
655 imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2CR); in i2c_imx_start()
656 result = i2c_imx_bus_busy(i2c_imx, 1, atomic); in i2c_imx_start()
665 imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2CR); in i2c_imx_start()
669 static void i2c_imx_stop(struct imx_i2c_struct *i2c_imx, bool atomic) in i2c_imx_stop() argument
673 if (!i2c_imx->stopped) { in i2c_imx_stop()
675 temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2CR); in i2c_imx_stop()
677 i2c_imx->stopped = 1; in i2c_imx_stop()
679 if (i2c_imx->dma) in i2c_imx_stop()
681 imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2CR); in i2c_imx_stop()
683 if (is_imx1_i2c(i2c_imx)) { in i2c_imx_stop()
688 udelay(i2c_imx->disable_delay); in i2c_imx_stop()
691 if (!i2c_imx->stopped) in i2c_imx_stop()
692 i2c_imx_bus_busy(i2c_imx, 0, atomic); in i2c_imx_stop()
695 temp = i2c_imx->hwdata->i2cr_ien_opcode ^ I2CR_IEN, in i2c_imx_stop()
696 imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2CR); in i2c_imx_stop()
704 static void i2c_imx_enable_bus_idle(struct imx_i2c_struct *i2c_imx) in i2c_imx_enable_bus_idle() argument
706 if (is_vf610_i2c(i2c_imx)) { in i2c_imx_enable_bus_idle()
709 temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_IBIC); in i2c_imx_enable_bus_idle()
711 imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_IBIC); in i2c_imx_enable_bus_idle()
715 static void i2c_imx_slave_event(struct imx_i2c_struct *i2c_imx, in i2c_imx_slave_event() argument
718 i2c_slave_event(i2c_imx->slave, event, val); in i2c_imx_slave_event()
719 i2c_imx->last_slave_event = event; in i2c_imx_slave_event()
722 static void i2c_imx_slave_finish_op(struct imx_i2c_struct *i2c_imx) in i2c_imx_slave_finish_op() argument
726 while (i2c_imx->last_slave_event != I2C_SLAVE_STOP) { in i2c_imx_slave_finish_op()
727 switch (i2c_imx->last_slave_event) { in i2c_imx_slave_finish_op()
729 i2c_imx_slave_event(i2c_imx, I2C_SLAVE_READ_PROCESSED, in i2c_imx_slave_finish_op()
736 i2c_imx_slave_event(i2c_imx, I2C_SLAVE_STOP, &val); in i2c_imx_slave_finish_op()
746 static irqreturn_t i2c_imx_slave_handle(struct imx_i2c_struct *i2c_imx, in i2c_imx_slave_handle() argument
752 i2c_imx_clear_irq(i2c_imx, I2SR_IAL); in i2c_imx_slave_handle()
759 i2c_imx_slave_finish_op(i2c_imx); in i2c_imx_slave_handle()
768 i2c_imx_slave_finish_op(i2c_imx); in i2c_imx_slave_handle()
770 dev_dbg(&i2c_imx->adapter.dev, "read requested"); in i2c_imx_slave_handle()
771 i2c_imx_slave_event(i2c_imx, in i2c_imx_slave_handle()
776 imx_i2c_write_reg(ctl, i2c_imx, IMX_I2C_I2CR); in i2c_imx_slave_handle()
779 imx_i2c_write_reg(value, i2c_imx, IMX_I2C_I2DR); in i2c_imx_slave_handle()
781 dev_dbg(&i2c_imx->adapter.dev, "write requested"); in i2c_imx_slave_handle()
782 i2c_imx_slave_event(i2c_imx, in i2c_imx_slave_handle()
787 imx_i2c_write_reg(ctl, i2c_imx, IMX_I2C_I2CR); in i2c_imx_slave_handle()
789 imx_i2c_read_reg(i2c_imx, IMX_I2C_I2DR); in i2c_imx_slave_handle()
792 value = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2DR); in i2c_imx_slave_handle()
793 i2c_imx_slave_event(i2c_imx, in i2c_imx_slave_handle()
797 imx_i2c_write_reg(ctl, i2c_imx, IMX_I2C_I2CR); in i2c_imx_slave_handle()
799 i2c_imx_slave_event(i2c_imx, in i2c_imx_slave_handle()
802 imx_i2c_write_reg(value, i2c_imx, IMX_I2C_I2DR); in i2c_imx_slave_handle()
805 imx_i2c_write_reg(ctl, i2c_imx, IMX_I2C_I2CR); in i2c_imx_slave_handle()
806 imx_i2c_read_reg(i2c_imx, IMX_I2C_I2DR); in i2c_imx_slave_handle()
807 i2c_imx_slave_finish_op(i2c_imx); in i2c_imx_slave_handle()
819 hrtimer_try_to_cancel(&i2c_imx->slave_timer); in i2c_imx_slave_handle()
820 hrtimer_forward_now(&i2c_imx->slave_timer, I2C_IMX_CHECK_DELAY); in i2c_imx_slave_handle()
821 hrtimer_restart(&i2c_imx->slave_timer); in i2c_imx_slave_handle()
827 struct imx_i2c_struct *i2c_imx = container_of(t, struct imx_i2c_struct, in i2c_imx_slave_timeout() local
832 spin_lock_irqsave(&i2c_imx->slave_lock, flags); in i2c_imx_slave_timeout()
833 status = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2SR); in i2c_imx_slave_timeout()
834 ctl = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2CR); in i2c_imx_slave_timeout()
835 i2c_imx_slave_handle(i2c_imx, status, ctl); in i2c_imx_slave_timeout()
836 spin_unlock_irqrestore(&i2c_imx->slave_lock, flags); in i2c_imx_slave_timeout()
840 static void i2c_imx_slave_init(struct imx_i2c_struct *i2c_imx) in i2c_imx_slave_init() argument
845 imx_i2c_write_reg((i2c_imx->slave->addr << 1), i2c_imx, IMX_I2C_IADR); in i2c_imx_slave_init()
847 i2c_imx_reset_regs(i2c_imx); in i2c_imx_slave_init()
850 temp = i2c_imx->hwdata->i2cr_ien_opcode; in i2c_imx_slave_init()
851 imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2CR); in i2c_imx_slave_init()
855 imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2CR); in i2c_imx_slave_init()
857 i2c_imx_enable_bus_idle(i2c_imx); in i2c_imx_slave_init()
862 struct imx_i2c_struct *i2c_imx = i2c_get_adapdata(client->adapter); in i2c_imx_reg_slave() local
865 if (i2c_imx->slave) in i2c_imx_reg_slave()
868 i2c_imx->slave = client; in i2c_imx_reg_slave()
869 i2c_imx->last_slave_event = I2C_SLAVE_STOP; in i2c_imx_reg_slave()
872 ret = pm_runtime_resume_and_get(i2c_imx->adapter.dev.parent); in i2c_imx_reg_slave()
874 dev_err(&i2c_imx->adapter.dev, "failed to resume i2c controller"); in i2c_imx_reg_slave()
878 i2c_imx_slave_init(i2c_imx); in i2c_imx_reg_slave()
885 struct imx_i2c_struct *i2c_imx = i2c_get_adapdata(client->adapter); in i2c_imx_unreg_slave() local
888 if (!i2c_imx->slave) in i2c_imx_unreg_slave()
892 imx_i2c_write_reg(0, i2c_imx, IMX_I2C_IADR); in i2c_imx_unreg_slave()
894 i2c_imx_reset_regs(i2c_imx); in i2c_imx_unreg_slave()
896 i2c_imx->slave = NULL; in i2c_imx_unreg_slave()
899 ret = pm_runtime_put_sync(i2c_imx->adapter.dev.parent); in i2c_imx_unreg_slave()
901 dev_err(&i2c_imx->adapter.dev, "failed to suspend i2c controller"); in i2c_imx_unreg_slave()
906 static irqreturn_t i2c_imx_master_isr(struct imx_i2c_struct *i2c_imx, unsigned int status) in i2c_imx_master_isr() argument
909 i2c_imx->i2csr = status; in i2c_imx_master_isr()
910 wake_up(&i2c_imx->queue); in i2c_imx_master_isr()
917 struct imx_i2c_struct *i2c_imx = dev_id; in i2c_imx_isr() local
921 spin_lock_irqsave(&i2c_imx->slave_lock, flags); in i2c_imx_isr()
922 status = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2SR); in i2c_imx_isr()
923 ctl = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2CR); in i2c_imx_isr()
926 i2c_imx_clear_irq(i2c_imx, I2SR_IIF); in i2c_imx_isr()
927 if (i2c_imx->slave) { in i2c_imx_isr()
931 ret = i2c_imx_slave_handle(i2c_imx, in i2c_imx_isr()
933 spin_unlock_irqrestore(&i2c_imx->slave_lock, in i2c_imx_isr()
937 i2c_imx_slave_finish_op(i2c_imx); in i2c_imx_isr()
939 spin_unlock_irqrestore(&i2c_imx->slave_lock, flags); in i2c_imx_isr()
940 return i2c_imx_master_isr(i2c_imx, status); in i2c_imx_isr()
942 spin_unlock_irqrestore(&i2c_imx->slave_lock, flags); in i2c_imx_isr()
947 static int i2c_imx_dma_write(struct imx_i2c_struct *i2c_imx, in i2c_imx_dma_write() argument
954 struct imx_i2c_dma *dma = i2c_imx->dma; in i2c_imx_dma_write()
955 struct device *dev = &i2c_imx->adapter.dev; in i2c_imx_dma_write()
961 result = i2c_imx_dma_xfer(i2c_imx, msgs); in i2c_imx_dma_write()
965 temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2CR); in i2c_imx_dma_write()
967 imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2CR); in i2c_imx_dma_write()
973 imx_i2c_write_reg(i2c_8bit_addr_from_msg(msgs), i2c_imx, IMX_I2C_I2DR); in i2c_imx_dma_write()
975 &i2c_imx->dma->cmd_complete, in i2c_imx_dma_write()
984 temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2SR); in i2c_imx_dma_write()
995 temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2CR); in i2c_imx_dma_write()
997 imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2CR); in i2c_imx_dma_write()
1001 i2c_imx, IMX_I2C_I2DR); in i2c_imx_dma_write()
1002 result = i2c_imx_trx_complete(i2c_imx, false); in i2c_imx_dma_write()
1006 return i2c_imx_acked(i2c_imx); in i2c_imx_dma_write()
1009 static int i2c_imx_dma_read(struct imx_i2c_struct *i2c_imx, in i2c_imx_dma_read() argument
1016 struct imx_i2c_dma *dma = i2c_imx->dma; in i2c_imx_dma_read()
1017 struct device *dev = &i2c_imx->adapter.dev; in i2c_imx_dma_read()
1025 result = i2c_imx_dma_xfer(i2c_imx, msgs); in i2c_imx_dma_read()
1030 &i2c_imx->dma->cmd_complete, in i2c_imx_dma_read()
1039 temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2SR); in i2c_imx_dma_read()
1050 temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2CR); in i2c_imx_dma_read()
1052 imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2CR); in i2c_imx_dma_read()
1055 temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2CR); in i2c_imx_dma_read()
1057 imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2CR); in i2c_imx_dma_read()
1059 msgs->buf[msgs->len-2] = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2DR); in i2c_imx_dma_read()
1061 result = i2c_imx_trx_complete(i2c_imx, false); in i2c_imx_dma_read()
1071 temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2CR); in i2c_imx_dma_read()
1073 i2c_imx->stopped = 1; in i2c_imx_dma_read()
1075 imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2CR); in i2c_imx_dma_read()
1076 if (!i2c_imx->stopped) in i2c_imx_dma_read()
1077 i2c_imx_bus_busy(i2c_imx, 0, false); in i2c_imx_dma_read()
1086 temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2CR); in i2c_imx_dma_read()
1088 imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2CR); in i2c_imx_dma_read()
1090 msgs->buf[msgs->len-1] = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2DR); in i2c_imx_dma_read()
1095 static int i2c_imx_write(struct imx_i2c_struct *i2c_imx, struct i2c_msg *msgs, in i2c_imx_write() argument
1100 dev_dbg(&i2c_imx->adapter.dev, "<%s> write slave address: addr=0x%x\n", in i2c_imx_write()
1104 imx_i2c_write_reg(i2c_8bit_addr_from_msg(msgs), i2c_imx, IMX_I2C_I2DR); in i2c_imx_write()
1105 result = i2c_imx_trx_complete(i2c_imx, atomic); in i2c_imx_write()
1108 result = i2c_imx_acked(i2c_imx); in i2c_imx_write()
1111 dev_dbg(&i2c_imx->adapter.dev, "<%s> write data\n", __func__); in i2c_imx_write()
1115 dev_dbg(&i2c_imx->adapter.dev, in i2c_imx_write()
1118 imx_i2c_write_reg(msgs->buf[i], i2c_imx, IMX_I2C_I2DR); in i2c_imx_write()
1119 result = i2c_imx_trx_complete(i2c_imx, atomic); in i2c_imx_write()
1122 result = i2c_imx_acked(i2c_imx); in i2c_imx_write()
1129 static int i2c_imx_read(struct imx_i2c_struct *i2c_imx, struct i2c_msg *msgs, in i2c_imx_read() argument
1135 int use_dma = i2c_imx->dma && msgs->flags & I2C_M_DMA_SAFE && in i2c_imx_read()
1138 dev_dbg(&i2c_imx->adapter.dev, in i2c_imx_read()
1143 imx_i2c_write_reg(i2c_8bit_addr_from_msg(msgs), i2c_imx, IMX_I2C_I2DR); in i2c_imx_read()
1144 result = i2c_imx_trx_complete(i2c_imx, atomic); in i2c_imx_read()
1147 result = i2c_imx_acked(i2c_imx); in i2c_imx_read()
1151 dev_dbg(&i2c_imx->adapter.dev, "<%s> setup bus\n", __func__); in i2c_imx_read()
1154 temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2CR); in i2c_imx_read()
1165 imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2CR); in i2c_imx_read()
1166 imx_i2c_read_reg(i2c_imx, IMX_I2C_I2DR); /* dummy read */ in i2c_imx_read()
1168 dev_dbg(&i2c_imx->adapter.dev, "<%s> read data\n", __func__); in i2c_imx_read()
1171 return i2c_imx_dma_read(i2c_imx, msgs, is_lastmsg); in i2c_imx_read()
1177 result = i2c_imx_trx_complete(i2c_imx, atomic); in i2c_imx_read()
1186 len = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2DR); in i2c_imx_read()
1189 dev_dbg(&i2c_imx->adapter.dev, in i2c_imx_read()
1200 dev_dbg(&i2c_imx->adapter.dev, in i2c_imx_read()
1202 temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2CR); in i2c_imx_read()
1204 i2c_imx->stopped = 1; in i2c_imx_read()
1206 imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2CR); in i2c_imx_read()
1207 if (!i2c_imx->stopped) in i2c_imx_read()
1208 i2c_imx_bus_busy(i2c_imx, 0, atomic); in i2c_imx_read()
1217 temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2CR); in i2c_imx_read()
1219 imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2CR); in i2c_imx_read()
1222 dev_dbg(&i2c_imx->adapter.dev, in i2c_imx_read()
1224 temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2CR); in i2c_imx_read()
1226 imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2CR); in i2c_imx_read()
1231 msgs->buf[i] = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2DR); in i2c_imx_read()
1232 dev_dbg(&i2c_imx->adapter.dev, in i2c_imx_read()
1245 struct imx_i2c_struct *i2c_imx = i2c_get_adapdata(adapter); in i2c_imx_xfer_common() local
1248 result = i2c_imx_start(i2c_imx, atomic); in i2c_imx_xfer_common()
1254 if (!atomic && i2c_imx->adapter.bus_recovery_info) { in i2c_imx_xfer_common()
1255 i2c_recover_bus(&i2c_imx->adapter); in i2c_imx_xfer_common()
1256 result = i2c_imx_start(i2c_imx, atomic); in i2c_imx_xfer_common()
1269 dev_dbg(&i2c_imx->adapter.dev, in i2c_imx_xfer_common()
1271 temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2CR); in i2c_imx_xfer_common()
1273 imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2CR); in i2c_imx_xfer_common()
1274 result = i2c_imx_bus_busy(i2c_imx, 1, atomic); in i2c_imx_xfer_common()
1278 dev_dbg(&i2c_imx->adapter.dev, in i2c_imx_xfer_common()
1282 temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2CR); in i2c_imx_xfer_common()
1283 dev_dbg(&i2c_imx->adapter.dev, in i2c_imx_xfer_common()
1289 temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2SR); in i2c_imx_xfer_common()
1290 dev_dbg(&i2c_imx->adapter.dev, in i2c_imx_xfer_common()
1299 result = i2c_imx_read(i2c_imx, &msgs[i], is_lastmsg, atomic); in i2c_imx_xfer_common()
1302 i2c_imx->dma && msgs[i].len >= DMA_THRESHOLD && in i2c_imx_xfer_common()
1304 result = i2c_imx_dma_write(i2c_imx, &msgs[i]); in i2c_imx_xfer_common()
1306 result = i2c_imx_write(i2c_imx, &msgs[i], atomic); in i2c_imx_xfer_common()
1314 i2c_imx_stop(i2c_imx, atomic); in i2c_imx_xfer_common()
1316 dev_dbg(&i2c_imx->adapter.dev, "<%s> exit with: %s: %d\n", __func__, in i2c_imx_xfer_common()
1320 if (i2c_imx->slave) in i2c_imx_xfer_common()
1321 i2c_imx_slave_init(i2c_imx); in i2c_imx_xfer_common()
1329 struct imx_i2c_struct *i2c_imx = i2c_get_adapdata(adapter); in i2c_imx_xfer() local
1332 result = pm_runtime_resume_and_get(i2c_imx->adapter.dev.parent); in i2c_imx_xfer()
1338 pm_runtime_mark_last_busy(i2c_imx->adapter.dev.parent); in i2c_imx_xfer()
1339 pm_runtime_put_autosuspend(i2c_imx->adapter.dev.parent); in i2c_imx_xfer()
1347 struct imx_i2c_struct *i2c_imx = i2c_get_adapdata(adapter); in i2c_imx_xfer_atomic() local
1350 result = clk_enable(i2c_imx->clk); in i2c_imx_xfer_atomic()
1356 clk_disable(i2c_imx->clk); in i2c_imx_xfer_atomic()
1363 struct imx_i2c_struct *i2c_imx; in i2c_imx_prepare_recovery() local
1365 i2c_imx = container_of(adap, struct imx_i2c_struct, adapter); in i2c_imx_prepare_recovery()
1367 pinctrl_select_state(i2c_imx->pinctrl, i2c_imx->pinctrl_pins_gpio); in i2c_imx_prepare_recovery()
1372 struct imx_i2c_struct *i2c_imx; in i2c_imx_unprepare_recovery() local
1374 i2c_imx = container_of(adap, struct imx_i2c_struct, adapter); in i2c_imx_unprepare_recovery()
1376 pinctrl_select_state(i2c_imx->pinctrl, i2c_imx->pinctrl_pins_default); in i2c_imx_unprepare_recovery()
1386 static int i2c_imx_init_recovery_info(struct imx_i2c_struct *i2c_imx, in i2c_imx_init_recovery_info() argument
1389 struct i2c_bus_recovery_info *rinfo = &i2c_imx->rinfo; in i2c_imx_init_recovery_info()
1391 i2c_imx->pinctrl = devm_pinctrl_get(&pdev->dev); in i2c_imx_init_recovery_info()
1392 if (!i2c_imx->pinctrl || IS_ERR(i2c_imx->pinctrl)) { in i2c_imx_init_recovery_info()
1394 return PTR_ERR(i2c_imx->pinctrl); in i2c_imx_init_recovery_info()
1397 i2c_imx->pinctrl_pins_default = pinctrl_lookup_state(i2c_imx->pinctrl, in i2c_imx_init_recovery_info()
1399 i2c_imx->pinctrl_pins_gpio = pinctrl_lookup_state(i2c_imx->pinctrl, in i2c_imx_init_recovery_info()
1409 IS_ERR(i2c_imx->pinctrl_pins_default) || in i2c_imx_init_recovery_info()
1410 IS_ERR(i2c_imx->pinctrl_pins_gpio)) { in i2c_imx_init_recovery_info()
1421 i2c_imx->adapter.bus_recovery_info = rinfo; in i2c_imx_init_recovery_info()
1442 struct imx_i2c_struct *i2c_imx; in i2c_imx_probe() local
1460 i2c_imx = devm_kzalloc(&pdev->dev, sizeof(*i2c_imx), GFP_KERNEL); in i2c_imx_probe()
1461 if (!i2c_imx) in i2c_imx_probe()
1464 spin_lock_init(&i2c_imx->slave_lock); in i2c_imx_probe()
1465 hrtimer_init(&i2c_imx->slave_timer, CLOCK_MONOTONIC, HRTIMER_MODE_ABS); in i2c_imx_probe()
1466 i2c_imx->slave_timer.function = i2c_imx_slave_timeout; in i2c_imx_probe()
1470 i2c_imx->hwdata = match; in i2c_imx_probe()
1472 i2c_imx->hwdata = (struct imx_i2c_hwdata *) in i2c_imx_probe()
1476 strscpy(i2c_imx->adapter.name, pdev->name, sizeof(i2c_imx->adapter.name)); in i2c_imx_probe()
1477 i2c_imx->adapter.owner = THIS_MODULE; in i2c_imx_probe()
1478 i2c_imx->adapter.algo = &i2c_imx_algo; in i2c_imx_probe()
1479 i2c_imx->adapter.dev.parent = &pdev->dev; in i2c_imx_probe()
1480 i2c_imx->adapter.nr = pdev->id; in i2c_imx_probe()
1481 i2c_imx->adapter.dev.of_node = pdev->dev.of_node; in i2c_imx_probe()
1482 i2c_imx->base = base; in i2c_imx_probe()
1483 ACPI_COMPANION_SET(&i2c_imx->adapter.dev, ACPI_COMPANION(&pdev->dev)); in i2c_imx_probe()
1486 i2c_imx->clk = devm_clk_get(&pdev->dev, NULL); in i2c_imx_probe()
1487 if (IS_ERR(i2c_imx->clk)) in i2c_imx_probe()
1488 return dev_err_probe(&pdev->dev, PTR_ERR(i2c_imx->clk), in i2c_imx_probe()
1491 ret = clk_prepare_enable(i2c_imx->clk); in i2c_imx_probe()
1498 init_waitqueue_head(&i2c_imx->queue); in i2c_imx_probe()
1501 i2c_set_adapdata(&i2c_imx->adapter, i2c_imx); in i2c_imx_probe()
1504 platform_set_drvdata(pdev, i2c_imx); in i2c_imx_probe()
1517 pdev->name, i2c_imx); in i2c_imx_probe()
1524 i2c_imx->bitrate = I2C_MAX_STANDARD_MODE_FREQ; in i2c_imx_probe()
1526 "clock-frequency", &i2c_imx->bitrate); in i2c_imx_probe()
1528 i2c_imx->bitrate = pdata->bitrate; in i2c_imx_probe()
1529 i2c_imx->clk_change_nb.notifier_call = i2c_imx_clk_notifier_call; in i2c_imx_probe()
1530 clk_notifier_register(i2c_imx->clk, &i2c_imx->clk_change_nb); in i2c_imx_probe()
1531 i2c_imx_set_clk(i2c_imx, clk_get_rate(i2c_imx->clk)); in i2c_imx_probe()
1533 i2c_imx_reset_regs(i2c_imx); in i2c_imx_probe()
1536 ret = i2c_imx_init_recovery_info(i2c_imx, pdev); in i2c_imx_probe()
1542 ret = i2c_add_numbered_adapter(&i2c_imx->adapter); in i2c_imx_probe()
1549 dev_dbg(&i2c_imx->adapter.dev, "claimed irq %d\n", irq); in i2c_imx_probe()
1550 dev_dbg(&i2c_imx->adapter.dev, "device resources: %pR\n", res); in i2c_imx_probe()
1551 dev_dbg(&i2c_imx->adapter.dev, "adapter name: \"%s\"\n", in i2c_imx_probe()
1552 i2c_imx->adapter.name); in i2c_imx_probe()
1553 dev_info(&i2c_imx->adapter.dev, "IMX I2C adapter registered\n"); in i2c_imx_probe()
1556 i2c_imx_dma_request(i2c_imx, phy_addr); in i2c_imx_probe()
1561 clk_notifier_unregister(i2c_imx->clk, &i2c_imx->clk_change_nb); in i2c_imx_probe()
1562 free_irq(irq, i2c_imx); in i2c_imx_probe()
1568 clk_disable_unprepare(i2c_imx->clk); in i2c_imx_probe()
1574 struct imx_i2c_struct *i2c_imx = platform_get_drvdata(pdev); in i2c_imx_remove() local
1579 hrtimer_cancel(&i2c_imx->slave_timer); in i2c_imx_remove()
1582 dev_dbg(&i2c_imx->adapter.dev, "adapter removed\n"); in i2c_imx_remove()
1583 i2c_del_adapter(&i2c_imx->adapter); in i2c_imx_remove()
1585 if (i2c_imx->dma) in i2c_imx_remove()
1586 i2c_imx_dma_free(i2c_imx); in i2c_imx_remove()
1590 imx_i2c_write_reg(0, i2c_imx, IMX_I2C_IADR); in i2c_imx_remove()
1591 imx_i2c_write_reg(0, i2c_imx, IMX_I2C_IFDR); in i2c_imx_remove()
1592 imx_i2c_write_reg(0, i2c_imx, IMX_I2C_I2CR); in i2c_imx_remove()
1593 imx_i2c_write_reg(0, i2c_imx, IMX_I2C_I2SR); in i2c_imx_remove()
1594 clk_disable(i2c_imx->clk); in i2c_imx_remove()
1597 clk_notifier_unregister(i2c_imx->clk, &i2c_imx->clk_change_nb); in i2c_imx_remove()
1600 free_irq(irq, i2c_imx); in i2c_imx_remove()
1602 clk_unprepare(i2c_imx->clk); in i2c_imx_remove()
1612 struct imx_i2c_struct *i2c_imx = dev_get_drvdata(dev); in i2c_imx_runtime_suspend() local
1614 clk_disable(i2c_imx->clk); in i2c_imx_runtime_suspend()
1621 struct imx_i2c_struct *i2c_imx = dev_get_drvdata(dev); in i2c_imx_runtime_resume() local
1624 ret = clk_enable(i2c_imx->clk); in i2c_imx_runtime_resume()