Lines Matching refs:i2c_imx
272 static inline int is_imx1_i2c(struct imx_i2c_struct *i2c_imx) in is_imx1_i2c() argument
274 return i2c_imx->hwdata->devtype == IMX1_I2C; in is_imx1_i2c()
277 static inline int is_vf610_i2c(struct imx_i2c_struct *i2c_imx) in is_vf610_i2c() argument
279 return i2c_imx->hwdata->devtype == VF610_I2C; in is_vf610_i2c()
283 struct imx_i2c_struct *i2c_imx, unsigned int reg) in imx_i2c_write_reg() argument
285 writeb(val, i2c_imx->base + (reg << i2c_imx->hwdata->regshift)); in imx_i2c_write_reg()
288 static inline unsigned char imx_i2c_read_reg(struct imx_i2c_struct *i2c_imx, in imx_i2c_read_reg() argument
291 return readb(i2c_imx->base + (reg << i2c_imx->hwdata->regshift)); in imx_i2c_read_reg()
294 static void i2c_imx_clear_irq(struct imx_i2c_struct *i2c_imx, unsigned int bits) in i2c_imx_clear_irq() argument
303 temp = ~i2c_imx->hwdata->i2sr_clr_opcode ^ bits; in i2c_imx_clear_irq()
304 imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2SR); in i2c_imx_clear_irq()
308 static void i2c_imx_reset_regs(struct imx_i2c_struct *i2c_imx) in i2c_imx_reset_regs() argument
310 imx_i2c_write_reg(i2c_imx->hwdata->i2cr_ien_opcode ^ I2CR_IEN, in i2c_imx_reset_regs()
311 i2c_imx, IMX_I2C_I2CR); in i2c_imx_reset_regs()
312 i2c_imx_clear_irq(i2c_imx, I2SR_IIF | I2SR_IAL); in i2c_imx_reset_regs()
316 static void i2c_imx_dma_request(struct imx_i2c_struct *i2c_imx, in i2c_imx_dma_request() argument
321 struct device *dev = &i2c_imx->adapter.dev; in i2c_imx_dma_request()
337 (IMX_I2C_I2DR << i2c_imx->hwdata->regshift); in i2c_imx_dma_request()
356 (IMX_I2C_I2DR << i2c_imx->hwdata->regshift); in i2c_imx_dma_request()
366 i2c_imx->dma = dma; in i2c_imx_dma_request()
383 struct imx_i2c_struct *i2c_imx = (struct imx_i2c_struct *)arg; in i2c_imx_dma_callback() local
384 struct imx_i2c_dma *dma = i2c_imx->dma; in i2c_imx_dma_callback()
391 static int i2c_imx_dma_xfer(struct imx_i2c_struct *i2c_imx, in i2c_imx_dma_xfer() argument
394 struct imx_i2c_dma *dma = i2c_imx->dma; in i2c_imx_dma_xfer()
396 struct device *dev = &i2c_imx->adapter.dev; in i2c_imx_dma_xfer()
416 txdesc->callback_param = i2c_imx; in i2c_imx_dma_xfer()
434 static void i2c_imx_dma_free(struct imx_i2c_struct *i2c_imx) in i2c_imx_dma_free() argument
436 struct imx_i2c_dma *dma = i2c_imx->dma; in i2c_imx_dma_free()
450 static int i2c_imx_bus_busy(struct imx_i2c_struct *i2c_imx, int for_busy, bool atomic) in i2c_imx_bus_busy() argument
456 temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2SR); in i2c_imx_bus_busy()
460 i2c_imx_clear_irq(i2c_imx, I2SR_IAL); in i2c_imx_bus_busy()
465 i2c_imx->stopped = 0; in i2c_imx_bus_busy()
469 i2c_imx->stopped = 1; in i2c_imx_bus_busy()
473 dev_dbg(&i2c_imx->adapter.dev, in i2c_imx_bus_busy()
486 static int i2c_imx_trx_complete(struct imx_i2c_struct *i2c_imx, bool atomic) in i2c_imx_trx_complete() argument
489 void __iomem *addr = i2c_imx->base + (IMX_I2C_I2SR << i2c_imx->hwdata->regshift); in i2c_imx_trx_complete()
503 i2c_imx->i2csr = regval; in i2c_imx_trx_complete()
504 i2c_imx_clear_irq(i2c_imx, I2SR_IIF | I2SR_IAL); in i2c_imx_trx_complete()
506 wait_event_timeout(i2c_imx->queue, i2c_imx->i2csr & I2SR_IIF, HZ / 10); in i2c_imx_trx_complete()
509 if (unlikely(!(i2c_imx->i2csr & I2SR_IIF))) { in i2c_imx_trx_complete()
510 dev_dbg(&i2c_imx->adapter.dev, "<%s> Timeout\n", __func__); in i2c_imx_trx_complete()
515 if (i2c_imx->i2csr & I2SR_IAL) { in i2c_imx_trx_complete()
516 dev_dbg(&i2c_imx->adapter.dev, "<%s> Arbitration lost\n", __func__); in i2c_imx_trx_complete()
517 i2c_imx_clear_irq(i2c_imx, I2SR_IAL); in i2c_imx_trx_complete()
519 i2c_imx->i2csr = 0; in i2c_imx_trx_complete()
523 dev_dbg(&i2c_imx->adapter.dev, "<%s> TRX complete\n", __func__); in i2c_imx_trx_complete()
524 i2c_imx->i2csr = 0; in i2c_imx_trx_complete()
528 static int i2c_imx_acked(struct imx_i2c_struct *i2c_imx) in i2c_imx_acked() argument
530 if (imx_i2c_read_reg(i2c_imx, IMX_I2C_I2SR) & I2SR_RXAK) { in i2c_imx_acked()
531 dev_dbg(&i2c_imx->adapter.dev, "<%s> No ACK\n", __func__); in i2c_imx_acked()
535 dev_dbg(&i2c_imx->adapter.dev, "<%s> ACK received\n", __func__); in i2c_imx_acked()
539 static void i2c_imx_set_clk(struct imx_i2c_struct *i2c_imx, in i2c_imx_set_clk() argument
542 struct imx_i2c_clk_pair *i2c_clk_div = i2c_imx->hwdata->clk_div; in i2c_imx_set_clk()
547 if (i2c_imx->cur_clk == i2c_clk_rate) in i2c_imx_set_clk()
550 i2c_imx->cur_clk = i2c_clk_rate; in i2c_imx_set_clk()
552 div = DIV_ROUND_UP(i2c_clk_rate, i2c_imx->bitrate); in i2c_imx_set_clk()
555 else if (div > i2c_clk_div[i2c_imx->hwdata->ndivs - 1].div) in i2c_imx_set_clk()
556 i = i2c_imx->hwdata->ndivs - 1; in i2c_imx_set_clk()
562 i2c_imx->ifdr = i2c_clk_div[i].val; in i2c_imx_set_clk()
570 i2c_imx->disable_delay = DIV_ROUND_UP(500000U * i2c_clk_div[i].div, in i2c_imx_set_clk()
574 dev_dbg(&i2c_imx->adapter.dev, "I2C_CLK=%d, REQ DIV=%d\n", in i2c_imx_set_clk()
576 dev_dbg(&i2c_imx->adapter.dev, "IFDR[IC]=0x%x, REAL DIV=%d\n", in i2c_imx_set_clk()
585 struct imx_i2c_struct *i2c_imx = container_of(nb, in i2c_imx_clk_notifier_call() local
590 i2c_imx_set_clk(i2c_imx, ndata->new_rate); in i2c_imx_clk_notifier_call()
595 static int i2c_imx_start(struct imx_i2c_struct *i2c_imx, bool atomic) in i2c_imx_start() argument
600 imx_i2c_write_reg(i2c_imx->ifdr, i2c_imx, IMX_I2C_IFDR); in i2c_imx_start()
602 imx_i2c_write_reg(i2c_imx->hwdata->i2sr_clr_opcode, i2c_imx, IMX_I2C_I2SR); in i2c_imx_start()
603 imx_i2c_write_reg(i2c_imx->hwdata->i2cr_ien_opcode, i2c_imx, IMX_I2C_I2CR); in i2c_imx_start()
612 temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2CR); in i2c_imx_start()
614 imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2CR); in i2c_imx_start()
615 result = i2c_imx_bus_busy(i2c_imx, 1, atomic); in i2c_imx_start()
624 imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2CR); in i2c_imx_start()
628 static void i2c_imx_stop(struct imx_i2c_struct *i2c_imx, bool atomic) in i2c_imx_stop() argument
632 if (!i2c_imx->stopped) { in i2c_imx_stop()
634 temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2CR); in i2c_imx_stop()
636 i2c_imx->stopped = 1; in i2c_imx_stop()
638 if (i2c_imx->dma) in i2c_imx_stop()
640 imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2CR); in i2c_imx_stop()
642 if (is_imx1_i2c(i2c_imx)) { in i2c_imx_stop()
647 udelay(i2c_imx->disable_delay); in i2c_imx_stop()
650 if (!i2c_imx->stopped) in i2c_imx_stop()
651 i2c_imx_bus_busy(i2c_imx, 0, atomic); in i2c_imx_stop()
654 temp = i2c_imx->hwdata->i2cr_ien_opcode ^ I2CR_IEN, in i2c_imx_stop()
655 imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2CR); in i2c_imx_stop()
663 static void i2c_imx_enable_bus_idle(struct imx_i2c_struct *i2c_imx) in i2c_imx_enable_bus_idle() argument
665 if (is_vf610_i2c(i2c_imx)) { in i2c_imx_enable_bus_idle()
668 temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_IBIC); in i2c_imx_enable_bus_idle()
670 imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_IBIC); in i2c_imx_enable_bus_idle()
674 static void i2c_imx_slave_event(struct imx_i2c_struct *i2c_imx, in i2c_imx_slave_event() argument
677 i2c_slave_event(i2c_imx->slave, event, val); in i2c_imx_slave_event()
678 i2c_imx->last_slave_event = event; in i2c_imx_slave_event()
681 static void i2c_imx_slave_finish_op(struct imx_i2c_struct *i2c_imx) in i2c_imx_slave_finish_op() argument
685 while (i2c_imx->last_slave_event != I2C_SLAVE_STOP) { in i2c_imx_slave_finish_op()
686 switch (i2c_imx->last_slave_event) { in i2c_imx_slave_finish_op()
688 i2c_imx_slave_event(i2c_imx, I2C_SLAVE_READ_PROCESSED, in i2c_imx_slave_finish_op()
695 i2c_imx_slave_event(i2c_imx, I2C_SLAVE_STOP, &val); in i2c_imx_slave_finish_op()
704 static irqreturn_t i2c_imx_slave_isr(struct imx_i2c_struct *i2c_imx, in i2c_imx_slave_isr() argument
710 i2c_imx_clear_irq(i2c_imx, I2SR_IAL); in i2c_imx_slave_isr()
716 i2c_imx_slave_finish_op(i2c_imx); in i2c_imx_slave_isr()
718 dev_dbg(&i2c_imx->adapter.dev, "read requested"); in i2c_imx_slave_isr()
719 i2c_imx_slave_event(i2c_imx, in i2c_imx_slave_isr()
724 imx_i2c_write_reg(ctl, i2c_imx, IMX_I2C_I2CR); in i2c_imx_slave_isr()
727 imx_i2c_write_reg(value, i2c_imx, IMX_I2C_I2DR); in i2c_imx_slave_isr()
729 dev_dbg(&i2c_imx->adapter.dev, "write requested"); in i2c_imx_slave_isr()
730 i2c_imx_slave_event(i2c_imx, in i2c_imx_slave_isr()
735 imx_i2c_write_reg(ctl, i2c_imx, IMX_I2C_I2CR); in i2c_imx_slave_isr()
737 imx_i2c_read_reg(i2c_imx, IMX_I2C_I2DR); in i2c_imx_slave_isr()
741 value = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2DR); in i2c_imx_slave_isr()
742 i2c_imx_slave_event(i2c_imx, in i2c_imx_slave_isr()
745 dev_dbg(&i2c_imx->adapter.dev, in i2c_imx_slave_isr()
747 i2c_imx_slave_event(i2c_imx, in i2c_imx_slave_isr()
752 imx_i2c_write_reg(ctl, i2c_imx, IMX_I2C_I2CR); in i2c_imx_slave_isr()
754 i2c_imx_slave_event(i2c_imx, in i2c_imx_slave_isr()
757 imx_i2c_write_reg(value, i2c_imx, IMX_I2C_I2DR); in i2c_imx_slave_isr()
760 imx_i2c_write_reg(ctl, i2c_imx, IMX_I2C_I2CR); in i2c_imx_slave_isr()
761 imx_i2c_read_reg(i2c_imx, IMX_I2C_I2DR); in i2c_imx_slave_isr()
767 static void i2c_imx_slave_init(struct imx_i2c_struct *i2c_imx) in i2c_imx_slave_init() argument
772 imx_i2c_write_reg((i2c_imx->slave->addr << 1), i2c_imx, IMX_I2C_IADR); in i2c_imx_slave_init()
774 i2c_imx_reset_regs(i2c_imx); in i2c_imx_slave_init()
777 temp = i2c_imx->hwdata->i2cr_ien_opcode; in i2c_imx_slave_init()
778 imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2CR); in i2c_imx_slave_init()
782 imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2CR); in i2c_imx_slave_init()
784 i2c_imx_enable_bus_idle(i2c_imx); in i2c_imx_slave_init()
789 struct imx_i2c_struct *i2c_imx = i2c_get_adapdata(client->adapter); in i2c_imx_reg_slave() local
792 if (i2c_imx->slave) in i2c_imx_reg_slave()
795 i2c_imx->slave = client; in i2c_imx_reg_slave()
796 i2c_imx->last_slave_event = I2C_SLAVE_STOP; in i2c_imx_reg_slave()
799 ret = pm_runtime_resume_and_get(i2c_imx->adapter.dev.parent); in i2c_imx_reg_slave()
801 dev_err(&i2c_imx->adapter.dev, "failed to resume i2c controller"); in i2c_imx_reg_slave()
805 i2c_imx_slave_init(i2c_imx); in i2c_imx_reg_slave()
812 struct imx_i2c_struct *i2c_imx = i2c_get_adapdata(client->adapter); in i2c_imx_unreg_slave() local
815 if (!i2c_imx->slave) in i2c_imx_unreg_slave()
819 imx_i2c_write_reg(0, i2c_imx, IMX_I2C_IADR); in i2c_imx_unreg_slave()
821 i2c_imx_reset_regs(i2c_imx); in i2c_imx_unreg_slave()
823 i2c_imx->slave = NULL; in i2c_imx_unreg_slave()
826 ret = pm_runtime_put_sync(i2c_imx->adapter.dev.parent); in i2c_imx_unreg_slave()
828 dev_err(&i2c_imx->adapter.dev, "failed to suspend i2c controller"); in i2c_imx_unreg_slave()
833 static irqreturn_t i2c_imx_master_isr(struct imx_i2c_struct *i2c_imx, unsigned int status) in i2c_imx_master_isr() argument
836 i2c_imx->i2csr = status; in i2c_imx_master_isr()
837 wake_up(&i2c_imx->queue); in i2c_imx_master_isr()
844 struct imx_i2c_struct *i2c_imx = dev_id; in i2c_imx_isr() local
847 status = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2SR); in i2c_imx_isr()
848 ctl = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2CR); in i2c_imx_isr()
851 i2c_imx_clear_irq(i2c_imx, I2SR_IIF); in i2c_imx_isr()
852 if (i2c_imx->slave) { in i2c_imx_isr()
854 return i2c_imx_slave_isr(i2c_imx, status, ctl); in i2c_imx_isr()
855 } else if (i2c_imx->last_slave_event != in i2c_imx_isr()
857 i2c_imx_slave_finish_op(i2c_imx); in i2c_imx_isr()
860 return i2c_imx_master_isr(i2c_imx, status); in i2c_imx_isr()
866 static int i2c_imx_dma_write(struct imx_i2c_struct *i2c_imx, in i2c_imx_dma_write() argument
873 struct imx_i2c_dma *dma = i2c_imx->dma; in i2c_imx_dma_write()
874 struct device *dev = &i2c_imx->adapter.dev; in i2c_imx_dma_write()
880 result = i2c_imx_dma_xfer(i2c_imx, msgs); in i2c_imx_dma_write()
884 temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2CR); in i2c_imx_dma_write()
886 imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2CR); in i2c_imx_dma_write()
892 imx_i2c_write_reg(i2c_8bit_addr_from_msg(msgs), i2c_imx, IMX_I2C_I2DR); in i2c_imx_dma_write()
894 &i2c_imx->dma->cmd_complete, in i2c_imx_dma_write()
903 temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2SR); in i2c_imx_dma_write()
914 temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2CR); in i2c_imx_dma_write()
916 imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2CR); in i2c_imx_dma_write()
920 i2c_imx, IMX_I2C_I2DR); in i2c_imx_dma_write()
921 result = i2c_imx_trx_complete(i2c_imx, false); in i2c_imx_dma_write()
925 return i2c_imx_acked(i2c_imx); in i2c_imx_dma_write()
928 static int i2c_imx_dma_read(struct imx_i2c_struct *i2c_imx, in i2c_imx_dma_read() argument
935 struct imx_i2c_dma *dma = i2c_imx->dma; in i2c_imx_dma_read()
936 struct device *dev = &i2c_imx->adapter.dev; in i2c_imx_dma_read()
944 result = i2c_imx_dma_xfer(i2c_imx, msgs); in i2c_imx_dma_read()
949 &i2c_imx->dma->cmd_complete, in i2c_imx_dma_read()
958 temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2SR); in i2c_imx_dma_read()
969 temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2CR); in i2c_imx_dma_read()
971 imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2CR); in i2c_imx_dma_read()
974 temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2CR); in i2c_imx_dma_read()
976 imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2CR); in i2c_imx_dma_read()
978 msgs->buf[msgs->len-2] = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2DR); in i2c_imx_dma_read()
980 result = i2c_imx_trx_complete(i2c_imx, false); in i2c_imx_dma_read()
990 temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2CR); in i2c_imx_dma_read()
992 i2c_imx->stopped = 1; in i2c_imx_dma_read()
994 imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2CR); in i2c_imx_dma_read()
995 if (!i2c_imx->stopped) in i2c_imx_dma_read()
996 i2c_imx_bus_busy(i2c_imx, 0, false); in i2c_imx_dma_read()
1005 temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2CR); in i2c_imx_dma_read()
1007 imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2CR); in i2c_imx_dma_read()
1009 msgs->buf[msgs->len-1] = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2DR); in i2c_imx_dma_read()
1014 static int i2c_imx_write(struct imx_i2c_struct *i2c_imx, struct i2c_msg *msgs, in i2c_imx_write() argument
1019 dev_dbg(&i2c_imx->adapter.dev, "<%s> write slave address: addr=0x%x\n", in i2c_imx_write()
1023 imx_i2c_write_reg(i2c_8bit_addr_from_msg(msgs), i2c_imx, IMX_I2C_I2DR); in i2c_imx_write()
1024 result = i2c_imx_trx_complete(i2c_imx, atomic); in i2c_imx_write()
1027 result = i2c_imx_acked(i2c_imx); in i2c_imx_write()
1030 dev_dbg(&i2c_imx->adapter.dev, "<%s> write data\n", __func__); in i2c_imx_write()
1034 dev_dbg(&i2c_imx->adapter.dev, in i2c_imx_write()
1037 imx_i2c_write_reg(msgs->buf[i], i2c_imx, IMX_I2C_I2DR); in i2c_imx_write()
1038 result = i2c_imx_trx_complete(i2c_imx, atomic); in i2c_imx_write()
1041 result = i2c_imx_acked(i2c_imx); in i2c_imx_write()
1048 static int i2c_imx_read(struct imx_i2c_struct *i2c_imx, struct i2c_msg *msgs, in i2c_imx_read() argument
1054 int use_dma = i2c_imx->dma && msgs->len >= DMA_THRESHOLD && !block_data; in i2c_imx_read()
1056 dev_dbg(&i2c_imx->adapter.dev, in i2c_imx_read()
1061 imx_i2c_write_reg(i2c_8bit_addr_from_msg(msgs), i2c_imx, IMX_I2C_I2DR); in i2c_imx_read()
1062 result = i2c_imx_trx_complete(i2c_imx, atomic); in i2c_imx_read()
1065 result = i2c_imx_acked(i2c_imx); in i2c_imx_read()
1069 dev_dbg(&i2c_imx->adapter.dev, "<%s> setup bus\n", __func__); in i2c_imx_read()
1072 temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2CR); in i2c_imx_read()
1083 imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2CR); in i2c_imx_read()
1084 imx_i2c_read_reg(i2c_imx, IMX_I2C_I2DR); /* dummy read */ in i2c_imx_read()
1086 dev_dbg(&i2c_imx->adapter.dev, "<%s> read data\n", __func__); in i2c_imx_read()
1089 return i2c_imx_dma_read(i2c_imx, msgs, is_lastmsg); in i2c_imx_read()
1095 result = i2c_imx_trx_complete(i2c_imx, atomic); in i2c_imx_read()
1104 len = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2DR); in i2c_imx_read()
1107 dev_dbg(&i2c_imx->adapter.dev, in i2c_imx_read()
1118 dev_dbg(&i2c_imx->adapter.dev, in i2c_imx_read()
1120 temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2CR); in i2c_imx_read()
1122 i2c_imx->stopped = 1; in i2c_imx_read()
1124 imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2CR); in i2c_imx_read()
1125 if (!i2c_imx->stopped) in i2c_imx_read()
1126 i2c_imx_bus_busy(i2c_imx, 0, atomic); in i2c_imx_read()
1135 temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2CR); in i2c_imx_read()
1137 imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2CR); in i2c_imx_read()
1140 dev_dbg(&i2c_imx->adapter.dev, in i2c_imx_read()
1142 temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2CR); in i2c_imx_read()
1144 imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2CR); in i2c_imx_read()
1149 msgs->buf[i] = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2DR); in i2c_imx_read()
1150 dev_dbg(&i2c_imx->adapter.dev, in i2c_imx_read()
1163 struct imx_i2c_struct *i2c_imx = i2c_get_adapdata(adapter); in i2c_imx_xfer_common() local
1166 result = i2c_imx_start(i2c_imx, atomic); in i2c_imx_xfer_common()
1172 if (!atomic && i2c_imx->adapter.bus_recovery_info) { in i2c_imx_xfer_common()
1173 i2c_recover_bus(&i2c_imx->adapter); in i2c_imx_xfer_common()
1174 result = i2c_imx_start(i2c_imx, atomic); in i2c_imx_xfer_common()
1187 dev_dbg(&i2c_imx->adapter.dev, in i2c_imx_xfer_common()
1189 temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2CR); in i2c_imx_xfer_common()
1191 imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2CR); in i2c_imx_xfer_common()
1192 result = i2c_imx_bus_busy(i2c_imx, 1, atomic); in i2c_imx_xfer_common()
1196 dev_dbg(&i2c_imx->adapter.dev, in i2c_imx_xfer_common()
1200 temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2CR); in i2c_imx_xfer_common()
1201 dev_dbg(&i2c_imx->adapter.dev, in i2c_imx_xfer_common()
1207 temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2SR); in i2c_imx_xfer_common()
1208 dev_dbg(&i2c_imx->adapter.dev, in i2c_imx_xfer_common()
1217 result = i2c_imx_read(i2c_imx, &msgs[i], is_lastmsg, atomic); in i2c_imx_xfer_common()
1220 i2c_imx->dma && msgs[i].len >= DMA_THRESHOLD) in i2c_imx_xfer_common()
1221 result = i2c_imx_dma_write(i2c_imx, &msgs[i]); in i2c_imx_xfer_common()
1223 result = i2c_imx_write(i2c_imx, &msgs[i], atomic); in i2c_imx_xfer_common()
1231 i2c_imx_stop(i2c_imx, atomic); in i2c_imx_xfer_common()
1233 dev_dbg(&i2c_imx->adapter.dev, "<%s> exit with: %s: %d\n", __func__, in i2c_imx_xfer_common()
1237 if (i2c_imx->slave) in i2c_imx_xfer_common()
1238 i2c_imx_slave_init(i2c_imx); in i2c_imx_xfer_common()
1246 struct imx_i2c_struct *i2c_imx = i2c_get_adapdata(adapter); in i2c_imx_xfer() local
1249 result = pm_runtime_resume_and_get(i2c_imx->adapter.dev.parent); in i2c_imx_xfer()
1255 pm_runtime_mark_last_busy(i2c_imx->adapter.dev.parent); in i2c_imx_xfer()
1256 pm_runtime_put_autosuspend(i2c_imx->adapter.dev.parent); in i2c_imx_xfer()
1264 struct imx_i2c_struct *i2c_imx = i2c_get_adapdata(adapter); in i2c_imx_xfer_atomic() local
1267 result = clk_enable(i2c_imx->clk); in i2c_imx_xfer_atomic()
1273 clk_disable(i2c_imx->clk); in i2c_imx_xfer_atomic()
1280 struct imx_i2c_struct *i2c_imx; in i2c_imx_prepare_recovery() local
1282 i2c_imx = container_of(adap, struct imx_i2c_struct, adapter); in i2c_imx_prepare_recovery()
1284 pinctrl_select_state(i2c_imx->pinctrl, i2c_imx->pinctrl_pins_gpio); in i2c_imx_prepare_recovery()
1289 struct imx_i2c_struct *i2c_imx; in i2c_imx_unprepare_recovery() local
1291 i2c_imx = container_of(adap, struct imx_i2c_struct, adapter); in i2c_imx_unprepare_recovery()
1293 pinctrl_select_state(i2c_imx->pinctrl, i2c_imx->pinctrl_pins_default); in i2c_imx_unprepare_recovery()
1303 static int i2c_imx_init_recovery_info(struct imx_i2c_struct *i2c_imx, in i2c_imx_init_recovery_info() argument
1306 struct i2c_bus_recovery_info *rinfo = &i2c_imx->rinfo; in i2c_imx_init_recovery_info()
1308 i2c_imx->pinctrl = devm_pinctrl_get(&pdev->dev); in i2c_imx_init_recovery_info()
1309 if (!i2c_imx->pinctrl || IS_ERR(i2c_imx->pinctrl)) { in i2c_imx_init_recovery_info()
1311 return PTR_ERR(i2c_imx->pinctrl); in i2c_imx_init_recovery_info()
1314 i2c_imx->pinctrl_pins_default = pinctrl_lookup_state(i2c_imx->pinctrl, in i2c_imx_init_recovery_info()
1316 i2c_imx->pinctrl_pins_gpio = pinctrl_lookup_state(i2c_imx->pinctrl, in i2c_imx_init_recovery_info()
1326 IS_ERR(i2c_imx->pinctrl_pins_default) || in i2c_imx_init_recovery_info()
1327 IS_ERR(i2c_imx->pinctrl_pins_gpio)) { in i2c_imx_init_recovery_info()
1338 i2c_imx->adapter.bus_recovery_info = rinfo; in i2c_imx_init_recovery_info()
1359 struct imx_i2c_struct *i2c_imx; in i2c_imx_probe() local
1377 i2c_imx = devm_kzalloc(&pdev->dev, sizeof(*i2c_imx), GFP_KERNEL); in i2c_imx_probe()
1378 if (!i2c_imx) in i2c_imx_probe()
1383 i2c_imx->hwdata = match; in i2c_imx_probe()
1385 i2c_imx->hwdata = (struct imx_i2c_hwdata *) in i2c_imx_probe()
1389 strscpy(i2c_imx->adapter.name, pdev->name, sizeof(i2c_imx->adapter.name)); in i2c_imx_probe()
1390 i2c_imx->adapter.owner = THIS_MODULE; in i2c_imx_probe()
1391 i2c_imx->adapter.algo = &i2c_imx_algo; in i2c_imx_probe()
1392 i2c_imx->adapter.dev.parent = &pdev->dev; in i2c_imx_probe()
1393 i2c_imx->adapter.nr = pdev->id; in i2c_imx_probe()
1394 i2c_imx->adapter.dev.of_node = pdev->dev.of_node; in i2c_imx_probe()
1395 i2c_imx->base = base; in i2c_imx_probe()
1396 ACPI_COMPANION_SET(&i2c_imx->adapter.dev, ACPI_COMPANION(&pdev->dev)); in i2c_imx_probe()
1399 i2c_imx->clk = devm_clk_get(&pdev->dev, NULL); in i2c_imx_probe()
1400 if (IS_ERR(i2c_imx->clk)) in i2c_imx_probe()
1401 return dev_err_probe(&pdev->dev, PTR_ERR(i2c_imx->clk), in i2c_imx_probe()
1404 ret = clk_prepare_enable(i2c_imx->clk); in i2c_imx_probe()
1411 init_waitqueue_head(&i2c_imx->queue); in i2c_imx_probe()
1414 i2c_set_adapdata(&i2c_imx->adapter, i2c_imx); in i2c_imx_probe()
1417 platform_set_drvdata(pdev, i2c_imx); in i2c_imx_probe()
1430 pdev->name, i2c_imx); in i2c_imx_probe()
1437 i2c_imx->bitrate = I2C_MAX_STANDARD_MODE_FREQ; in i2c_imx_probe()
1439 "clock-frequency", &i2c_imx->bitrate); in i2c_imx_probe()
1441 i2c_imx->bitrate = pdata->bitrate; in i2c_imx_probe()
1442 i2c_imx->clk_change_nb.notifier_call = i2c_imx_clk_notifier_call; in i2c_imx_probe()
1443 clk_notifier_register(i2c_imx->clk, &i2c_imx->clk_change_nb); in i2c_imx_probe()
1444 i2c_imx_set_clk(i2c_imx, clk_get_rate(i2c_imx->clk)); in i2c_imx_probe()
1446 i2c_imx_reset_regs(i2c_imx); in i2c_imx_probe()
1449 ret = i2c_imx_init_recovery_info(i2c_imx, pdev); in i2c_imx_probe()
1455 ret = i2c_add_numbered_adapter(&i2c_imx->adapter); in i2c_imx_probe()
1462 dev_dbg(&i2c_imx->adapter.dev, "claimed irq %d\n", irq); in i2c_imx_probe()
1463 dev_dbg(&i2c_imx->adapter.dev, "device resources: %pR\n", res); in i2c_imx_probe()
1464 dev_dbg(&i2c_imx->adapter.dev, "adapter name: \"%s\"\n", in i2c_imx_probe()
1465 i2c_imx->adapter.name); in i2c_imx_probe()
1466 dev_info(&i2c_imx->adapter.dev, "IMX I2C adapter registered\n"); in i2c_imx_probe()
1469 i2c_imx_dma_request(i2c_imx, phy_addr); in i2c_imx_probe()
1474 clk_notifier_unregister(i2c_imx->clk, &i2c_imx->clk_change_nb); in i2c_imx_probe()
1475 free_irq(irq, i2c_imx); in i2c_imx_probe()
1481 clk_disable_unprepare(i2c_imx->clk); in i2c_imx_probe()
1487 struct imx_i2c_struct *i2c_imx = platform_get_drvdata(pdev); in i2c_imx_remove() local
1495 dev_dbg(&i2c_imx->adapter.dev, "adapter removed\n"); in i2c_imx_remove()
1496 i2c_del_adapter(&i2c_imx->adapter); in i2c_imx_remove()
1498 if (i2c_imx->dma) in i2c_imx_remove()
1499 i2c_imx_dma_free(i2c_imx); in i2c_imx_remove()
1502 imx_i2c_write_reg(0, i2c_imx, IMX_I2C_IADR); in i2c_imx_remove()
1503 imx_i2c_write_reg(0, i2c_imx, IMX_I2C_IFDR); in i2c_imx_remove()
1504 imx_i2c_write_reg(0, i2c_imx, IMX_I2C_I2CR); in i2c_imx_remove()
1505 imx_i2c_write_reg(0, i2c_imx, IMX_I2C_I2SR); in i2c_imx_remove()
1507 clk_notifier_unregister(i2c_imx->clk, &i2c_imx->clk_change_nb); in i2c_imx_remove()
1510 free_irq(irq, i2c_imx); in i2c_imx_remove()
1511 clk_disable_unprepare(i2c_imx->clk); in i2c_imx_remove()
1521 struct imx_i2c_struct *i2c_imx = dev_get_drvdata(dev); in i2c_imx_runtime_suspend() local
1523 clk_disable(i2c_imx->clk); in i2c_imx_runtime_suspend()
1530 struct imx_i2c_struct *i2c_imx = dev_get_drvdata(dev); in i2c_imx_runtime_resume() local
1533 ret = clk_enable(i2c_imx->clk); in i2c_imx_runtime_resume()