Lines Matching refs:i2c

411 static void img_i2c_writel(struct img_i2c *i2c, u32 offset, u32 value)  in img_i2c_writel()  argument
413 writel(value, i2c->base + offset); in img_i2c_writel()
416 static u32 img_i2c_readl(struct img_i2c *i2c, u32 offset) in img_i2c_readl() argument
418 return readl(i2c->base + offset); in img_i2c_readl()
433 static void img_i2c_wr_rd_fence(struct img_i2c *i2c) in img_i2c_wr_rd_fence() argument
435 if (i2c->need_wr_rd_fence) { in img_i2c_wr_rd_fence()
436 img_i2c_writel(i2c, SCB_CORE_REV_REG, 0); in img_i2c_wr_rd_fence()
437 img_i2c_writel(i2c, SCB_CORE_REV_REG, 0); in img_i2c_wr_rd_fence()
441 static void img_i2c_switch_mode(struct img_i2c *i2c, enum img_i2c_mode mode) in img_i2c_switch_mode() argument
443 i2c->mode = mode; in img_i2c_switch_mode()
444 i2c->int_enable = img_i2c_int_enable_by_mode[mode]; in img_i2c_switch_mode()
445 i2c->line_status = 0; in img_i2c_switch_mode()
448 static void img_i2c_raw_op(struct img_i2c *i2c) in img_i2c_raw_op() argument
450 i2c->raw_timeout = 0; in img_i2c_raw_op()
451 img_i2c_writel(i2c, SCB_OVERRIDE_REG, in img_i2c_raw_op()
457 ((i2c->at_cur_cmd & OVERRIDE_CMD_MASK) << OVERRIDE_CMD_SHIFT) | in img_i2c_raw_op()
458 (i2c->at_cur_data << OVERRIDE_DATA_SHIFT)); in img_i2c_raw_op()
469 static void img_i2c_atomic_op(struct img_i2c *i2c, int cmd, u8 data) in img_i2c_atomic_op() argument
471 i2c->at_cur_cmd = cmd; in img_i2c_atomic_op()
472 i2c->at_cur_data = data; in img_i2c_atomic_op()
475 if (cmd == CMD_GEN_DATA && i2c->mode == MODE_ATOMIC) { in img_i2c_atomic_op()
476 u32 line_status = img_i2c_readl(i2c, SCB_STATUS_REG); in img_i2c_atomic_op()
480 img_i2c_switch_mode(i2c, MODE_RAW); in img_i2c_atomic_op()
481 img_i2c_raw_op(i2c); in img_i2c_atomic_op()
486 dev_dbg(i2c->adap.dev.parent, in img_i2c_atomic_op()
489 i2c->at_t_done = (cmd == CMD_RET_DATA || cmd == CMD_RET_ACK); in img_i2c_atomic_op()
490 i2c->at_slave_event = false; in img_i2c_atomic_op()
491 i2c->line_status = 0; in img_i2c_atomic_op()
493 img_i2c_writel(i2c, SCB_OVERRIDE_REG, in img_i2c_atomic_op()
501 static void img_i2c_atomic_start(struct img_i2c *i2c) in img_i2c_atomic_start() argument
503 img_i2c_switch_mode(i2c, MODE_ATOMIC); in img_i2c_atomic_start()
504 img_i2c_writel(i2c, SCB_INT_MASK_REG, i2c->int_enable); in img_i2c_atomic_start()
505 img_i2c_atomic_op(i2c, CMD_GEN_START, 0x00); in img_i2c_atomic_start()
508 static void img_i2c_soft_reset(struct img_i2c *i2c) in img_i2c_soft_reset() argument
510 i2c->t_halt = false; in img_i2c_soft_reset()
511 img_i2c_writel(i2c, SCB_CONTROL_REG, 0); in img_i2c_soft_reset()
512 img_i2c_writel(i2c, SCB_CONTROL_REG, in img_i2c_soft_reset()
517 static void img_i2c_transaction_halt(struct img_i2c *i2c, bool t_halt) in img_i2c_transaction_halt() argument
521 if (i2c->t_halt == t_halt) in img_i2c_transaction_halt()
523 i2c->t_halt = t_halt; in img_i2c_transaction_halt()
524 val = img_i2c_readl(i2c, SCB_CONTROL_REG); in img_i2c_transaction_halt()
529 img_i2c_writel(i2c, SCB_CONTROL_REG, val); in img_i2c_transaction_halt()
533 static void img_i2c_read_fifo(struct img_i2c *i2c) in img_i2c_read_fifo() argument
535 while (i2c->msg.len) { in img_i2c_read_fifo()
539 fifo_status = img_i2c_readl(i2c, SCB_FIFO_STATUS_REG); in img_i2c_read_fifo()
543 data = img_i2c_readl(i2c, SCB_READ_DATA_REG); in img_i2c_read_fifo()
544 *i2c->msg.buf = data; in img_i2c_read_fifo()
546 img_i2c_writel(i2c, SCB_READ_FIFO_REG, 0xff); in img_i2c_read_fifo()
547 img_i2c_wr_rd_fence(i2c); in img_i2c_read_fifo()
548 i2c->msg.len--; in img_i2c_read_fifo()
549 i2c->msg.buf++; in img_i2c_read_fifo()
554 static void img_i2c_write_fifo(struct img_i2c *i2c) in img_i2c_write_fifo() argument
556 while (i2c->msg.len) { in img_i2c_write_fifo()
559 fifo_status = img_i2c_readl(i2c, SCB_FIFO_STATUS_REG); in img_i2c_write_fifo()
563 img_i2c_writel(i2c, SCB_WRITE_DATA_REG, *i2c->msg.buf); in img_i2c_write_fifo()
564 img_i2c_wr_rd_fence(i2c); in img_i2c_write_fifo()
565 i2c->msg.len--; in img_i2c_write_fifo()
566 i2c->msg.buf++; in img_i2c_write_fifo()
570 if (!i2c->msg.len) in img_i2c_write_fifo()
571 i2c->int_enable &= ~INT_FIFO_EMPTYING; in img_i2c_write_fifo()
575 static void img_i2c_read(struct img_i2c *i2c) in img_i2c_read() argument
577 img_i2c_switch_mode(i2c, MODE_AUTOMATIC); in img_i2c_read()
578 if (!i2c->last_msg) in img_i2c_read()
579 i2c->int_enable |= INT_SLAVE_EVENT; in img_i2c_read()
581 img_i2c_writel(i2c, SCB_INT_MASK_REG, i2c->int_enable); in img_i2c_read()
582 img_i2c_writel(i2c, SCB_READ_ADDR_REG, i2c->msg.addr); in img_i2c_read()
583 img_i2c_writel(i2c, SCB_READ_COUNT_REG, i2c->msg.len); in img_i2c_read()
585 img_i2c_transaction_halt(i2c, false); in img_i2c_read()
586 mod_timer(&i2c->check_timer, jiffies + msecs_to_jiffies(1)); in img_i2c_read()
590 static void img_i2c_write(struct img_i2c *i2c) in img_i2c_write() argument
592 img_i2c_switch_mode(i2c, MODE_AUTOMATIC); in img_i2c_write()
593 if (!i2c->last_msg) in img_i2c_write()
594 i2c->int_enable |= INT_SLAVE_EVENT; in img_i2c_write()
596 img_i2c_writel(i2c, SCB_WRITE_ADDR_REG, i2c->msg.addr); in img_i2c_write()
597 img_i2c_writel(i2c, SCB_WRITE_COUNT_REG, i2c->msg.len); in img_i2c_write()
599 img_i2c_transaction_halt(i2c, false); in img_i2c_write()
600 mod_timer(&i2c->check_timer, jiffies + msecs_to_jiffies(1)); in img_i2c_write()
601 img_i2c_write_fifo(i2c); in img_i2c_write()
604 img_i2c_writel(i2c, SCB_INT_MASK_REG, i2c->int_enable); in img_i2c_write()
612 static void img_i2c_complete_transaction(struct img_i2c *i2c, int status) in img_i2c_complete_transaction() argument
614 img_i2c_switch_mode(i2c, MODE_INACTIVE); in img_i2c_complete_transaction()
616 i2c->msg_status = status; in img_i2c_complete_transaction()
617 img_i2c_transaction_halt(i2c, false); in img_i2c_complete_transaction()
619 complete(&i2c->msg_complete); in img_i2c_complete_transaction()
622 static unsigned int img_i2c_raw_atomic_delay_handler(struct img_i2c *i2c, in img_i2c_raw_atomic_delay_handler() argument
626 img_i2c_atomic_op(i2c, i2c->at_cur_cmd, i2c->at_cur_data); in img_i2c_raw_atomic_delay_handler()
627 img_i2c_switch_mode(i2c, MODE_ATOMIC); in img_i2c_raw_atomic_delay_handler()
631 static unsigned int img_i2c_raw(struct img_i2c *i2c, u32 int_status, in img_i2c_raw() argument
635 if (i2c->raw_timeout == 0) in img_i2c_raw()
636 return img_i2c_raw_atomic_delay_handler(i2c, in img_i2c_raw()
638 --i2c->raw_timeout; in img_i2c_raw()
643 static unsigned int img_i2c_sequence(struct img_i2c *i2c, u32 int_status) in img_i2c_sequence() argument
656 i2c->at_slave_event = true; in img_i2c_sequence()
658 i2c->at_t_done = true; in img_i2c_sequence()
660 if (!i2c->at_slave_event || !i2c->at_t_done) in img_i2c_sequence()
664 if (i2c->at_cur_cmd >= 0 && in img_i2c_sequence()
665 i2c->at_cur_cmd < ARRAY_SIZE(continue_bits)) { in img_i2c_sequence()
666 unsigned int cont_bits = continue_bits[i2c->at_cur_cmd]; in img_i2c_sequence()
670 if (!(i2c->line_status & cont_bits)) in img_i2c_sequence()
676 next_cmd = *i2c->seq; in img_i2c_sequence()
679 img_i2c_writel(i2c, SCB_OVERRIDE_REG, 0); in img_i2c_sequence()
684 ++i2c->seq; in img_i2c_sequence()
685 next_data = *i2c->seq; in img_i2c_sequence()
687 ++i2c->seq; in img_i2c_sequence()
688 img_i2c_atomic_op(i2c, next_cmd, next_data); in img_i2c_sequence()
693 static void img_i2c_reset_start(struct img_i2c *i2c) in img_i2c_reset_start() argument
696 img_i2c_switch_mode(i2c, MODE_SEQUENCE); in img_i2c_reset_start()
697 img_i2c_writel(i2c, SCB_INT_MASK_REG, i2c->int_enable); in img_i2c_reset_start()
698 i2c->seq = img_i2c_reset_seq; in img_i2c_reset_start()
699 i2c->at_slave_event = true; in img_i2c_reset_start()
700 i2c->at_t_done = true; in img_i2c_reset_start()
701 i2c->at_cur_cmd = -1; in img_i2c_reset_start()
704 img_i2c_sequence(i2c, 0); in img_i2c_reset_start()
707 static void img_i2c_stop_start(struct img_i2c *i2c) in img_i2c_stop_start() argument
710 img_i2c_switch_mode(i2c, MODE_SEQUENCE); in img_i2c_stop_start()
711 img_i2c_writel(i2c, SCB_INT_MASK_REG, i2c->int_enable); in img_i2c_stop_start()
712 i2c->seq = img_i2c_stop_seq; in img_i2c_stop_start()
713 i2c->at_slave_event = true; in img_i2c_stop_start()
714 i2c->at_t_done = true; in img_i2c_stop_start()
715 i2c->at_cur_cmd = -1; in img_i2c_stop_start()
718 img_i2c_sequence(i2c, 0); in img_i2c_stop_start()
721 static unsigned int img_i2c_atomic(struct img_i2c *i2c, in img_i2c_atomic() argument
729 i2c->at_slave_event = true; in img_i2c_atomic()
731 i2c->at_t_done = true; in img_i2c_atomic()
733 if (!i2c->at_slave_event || !i2c->at_t_done) in img_i2c_atomic()
735 if (i2c->line_status & LINESTAT_ABORT_DET) { in img_i2c_atomic()
736 dev_dbg(i2c->adap.dev.parent, "abort condition detected\n"); in img_i2c_atomic()
738 i2c->msg_status = -EIO; in img_i2c_atomic()
743 switch (i2c->at_cur_cmd) { in img_i2c_atomic()
746 next_data = (i2c->msg.addr << 1); in img_i2c_atomic()
747 if (i2c->msg.flags & I2C_M_RD) in img_i2c_atomic()
751 if (i2c->line_status & LINESTAT_INPUT_HELD_V) in img_i2c_atomic()
755 if (i2c->line_status & LINESTAT_ACK_DET) { in img_i2c_atomic()
756 if (i2c->msg.len == 0) { in img_i2c_atomic()
758 } else if (i2c->msg.flags & I2C_M_RD) { in img_i2c_atomic()
762 next_data = *i2c->msg.buf; in img_i2c_atomic()
763 --i2c->msg.len; in img_i2c_atomic()
764 ++i2c->msg.buf; in img_i2c_atomic()
766 } else if (i2c->line_status & LINESTAT_NACK_DET) { in img_i2c_atomic()
767 i2c->msg_status = -EIO; in img_i2c_atomic()
772 if (i2c->line_status & LINESTAT_INPUT_HELD_V) { in img_i2c_atomic()
773 *i2c->msg.buf = (i2c->line_status & in img_i2c_atomic()
776 --i2c->msg.len; in img_i2c_atomic()
777 ++i2c->msg.buf; in img_i2c_atomic()
778 if (i2c->msg.len) in img_i2c_atomic()
785 if (i2c->line_status & LINESTAT_ACK_DET) { in img_i2c_atomic()
788 i2c->msg_status = -EIO; in img_i2c_atomic()
796 img_i2c_writel(i2c, SCB_OVERRIDE_REG, 0); in img_i2c_atomic()
799 dev_err(i2c->adap.dev.parent, "bad atomic command %d\n", in img_i2c_atomic()
800 i2c->at_cur_cmd); in img_i2c_atomic()
801 i2c->msg_status = -EIO; in img_i2c_atomic()
809 if (next_cmd == CMD_GEN_STOP && !i2c->msg_status && in img_i2c_atomic()
810 !i2c->last_msg) in img_i2c_atomic()
812 img_i2c_atomic_op(i2c, next_cmd, next_data); in img_i2c_atomic()
823 struct img_i2c *i2c = (struct img_i2c *)arg; in img_i2c_check_timer() local
827 spin_lock_irqsave(&i2c->lock, flags); in img_i2c_check_timer()
828 line_status = img_i2c_readl(i2c, SCB_STATUS_REG); in img_i2c_check_timer()
832 dev_dbg(i2c->adap.dev.parent, in img_i2c_check_timer()
835 img_i2c_writel(i2c, SCB_INT_MASK_REG, in img_i2c_check_timer()
836 i2c->int_enable | INT_SLAVE_EVENT); in img_i2c_check_timer()
839 spin_unlock_irqrestore(&i2c->lock, flags); in img_i2c_check_timer()
842 static unsigned int img_i2c_auto(struct img_i2c *i2c, in img_i2c_auto() argument
850 dev_dbg(i2c->adap.dev.parent, "abort condition detected\n"); in img_i2c_auto()
852 if ((i2c->msg.flags & I2C_M_RD) && in img_i2c_auto()
854 img_i2c_read_fifo(i2c); in img_i2c_auto()
856 i2c->msg_status = -EIO; in img_i2c_auto()
857 img_i2c_stop_start(i2c); in img_i2c_auto()
862 if (!i2c->last_msg && i2c->line_status & LINESTAT_START_BIT_DET) { in img_i2c_auto()
863 img_i2c_transaction_halt(i2c, true); in img_i2c_auto()
865 i2c->int_enable &= ~INT_SLAVE_EVENT; in img_i2c_auto()
868 mod_timer(&i2c->check_timer, jiffies + msecs_to_jiffies(1)); in img_i2c_auto()
870 if (i2c->msg.flags & I2C_M_RD) { in img_i2c_auto()
872 img_i2c_read_fifo(i2c); in img_i2c_auto()
873 if (i2c->msg.len == 0) in img_i2c_auto()
886 i2c->msg.len == 0) in img_i2c_auto()
888 img_i2c_write_fifo(i2c); in img_i2c_auto()
897 struct img_i2c *i2c = (struct img_i2c *)dev_id; in img_i2c_isr() local
903 int_status = img_i2c_readl(i2c, SCB_INT_STATUS_REG); in img_i2c_isr()
905 img_i2c_writel(i2c, SCB_INT_CLEAR_REG, int_status); in img_i2c_isr()
911 line_status = img_i2c_readl(i2c, SCB_STATUS_REG); in img_i2c_isr()
913 img_i2c_writel(i2c, SCB_CLEAR_REG, in img_i2c_isr()
916 img_i2c_wr_rd_fence(i2c); in img_i2c_isr()
919 spin_lock(&i2c->lock); in img_i2c_isr()
922 i2c->line_status &= ~LINESTAT_INPUT_DATA; in img_i2c_isr()
923 i2c->line_status |= line_status; in img_i2c_isr()
933 dev_crit(i2c->adap.dev.parent, in img_i2c_isr()
935 (i2c->msg.flags & I2C_M_RD) ? "reading" : "writing", in img_i2c_isr()
936 i2c->msg.addr); in img_i2c_isr()
941 if (i2c->mode == MODE_ATOMIC) in img_i2c_isr()
942 hret = img_i2c_atomic(i2c, int_status, line_status); in img_i2c_isr()
943 else if (i2c->mode == MODE_AUTOMATIC) in img_i2c_isr()
944 hret = img_i2c_auto(i2c, int_status, line_status); in img_i2c_isr()
945 else if (i2c->mode == MODE_SEQUENCE) in img_i2c_isr()
946 hret = img_i2c_sequence(i2c, int_status); in img_i2c_isr()
947 else if (i2c->mode == MODE_WAITSTOP && (int_status & INT_SLAVE_EVENT) && in img_i2c_isr()
950 else if (i2c->mode == MODE_RAW) in img_i2c_isr()
951 hret = img_i2c_raw(i2c, int_status, line_status); in img_i2c_isr()
956 img_i2c_writel(i2c, SCB_INT_CLEAR_REG, int_status & INT_LEVEL); in img_i2c_isr()
964 if (!i2c->last_msg || i2c->line_status & LINESTAT_STOP_BIT_DET) in img_i2c_isr()
967 img_i2c_switch_mode(i2c, MODE_WAITSTOP); in img_i2c_isr()
974 img_i2c_complete_transaction(i2c, status); in img_i2c_isr()
976 img_i2c_switch_mode(i2c, MODE_FATAL); in img_i2c_isr()
980 img_i2c_writel(i2c, SCB_INT_MASK_REG, i2c->int_enable); in img_i2c_isr()
982 spin_unlock(&i2c->lock); in img_i2c_isr()
988 static int img_i2c_reset_bus(struct img_i2c *i2c) in img_i2c_reset_bus() argument
993 spin_lock_irqsave(&i2c->lock, flags); in img_i2c_reset_bus()
994 reinit_completion(&i2c->msg_complete); in img_i2c_reset_bus()
995 img_i2c_reset_start(i2c); in img_i2c_reset_bus()
996 spin_unlock_irqrestore(&i2c->lock, flags); in img_i2c_reset_bus()
998 time_left = wait_for_completion_timeout(&i2c->msg_complete, in img_i2c_reset_bus()
1008 struct img_i2c *i2c = i2c_get_adapdata(adap); in img_i2c_xfer() local
1013 if (i2c->mode == MODE_SUSPEND) { in img_i2c_xfer()
1018 if (i2c->mode == MODE_FATAL) in img_i2c_xfer()
1038 ret = clk_prepare_enable(i2c->scb_clk); in img_i2c_xfer()
1046 spin_lock_irqsave(&i2c->lock, flags); in img_i2c_xfer()
1052 i2c->msg = *msg; in img_i2c_xfer()
1053 i2c->msg_status = 0; in img_i2c_xfer()
1062 i2c->last_msg = (i == num - 1); in img_i2c_xfer()
1063 reinit_completion(&i2c->msg_complete); in img_i2c_xfer()
1066 img_i2c_atomic_start(i2c); in img_i2c_xfer()
1068 img_i2c_read(i2c); in img_i2c_xfer()
1070 img_i2c_write(i2c); in img_i2c_xfer()
1071 spin_unlock_irqrestore(&i2c->lock, flags); in img_i2c_xfer()
1073 time_left = wait_for_completion_timeout(&i2c->msg_complete, in img_i2c_xfer()
1075 del_timer_sync(&i2c->check_timer); in img_i2c_xfer()
1079 i2c->msg_status = -ETIMEDOUT; in img_i2c_xfer()
1083 if (i2c->msg_status) in img_i2c_xfer()
1087 clk_disable_unprepare(i2c->scb_clk); in img_i2c_xfer()
1089 return i2c->msg_status ? i2c->msg_status : num; in img_i2c_xfer()
1102 static int img_i2c_init(struct img_i2c *i2c) in img_i2c_init() argument
1109 ret = clk_prepare_enable(i2c->scb_clk); in img_i2c_init()
1113 rev = img_i2c_readl(i2c, SCB_CORE_REV_REG); in img_i2c_init()
1115 dev_info(i2c->adap.dev.parent, in img_i2c_init()
1119 clk_disable_unprepare(i2c->scb_clk); in img_i2c_init()
1124 i2c->need_wr_rd_fence = true; in img_i2c_init()
1125 dev_info(i2c->adap.dev.parent, "fence quirk enabled"); in img_i2c_init()
1128 bitrate_khz = i2c->bitrate / 1000; in img_i2c_init()
1129 clk_khz = clk_get_rate(i2c->scb_clk) / 1000; in img_i2c_init()
1134 if (i2c->bitrate <= timings[i].max_bitrate) { in img_i2c_init()
1174 img_i2c_writel(i2c, SCB_CLK_SET_REG, data); in img_i2c_init()
1195 img_i2c_writel(i2c, SCB_TIME_TCKH_REG, data); in img_i2c_init()
1205 img_i2c_writel(i2c, SCB_TIME_TCKL_REG, data); in img_i2c_init()
1216 img_i2c_writel(i2c, SCB_TIME_TSDH_REG, data); in img_i2c_init()
1225 img_i2c_writel(i2c, SCB_TIME_TPL_REG, data); in img_i2c_init()
1231 img_i2c_writel(i2c, SCB_TIME_TPH_REG, data); in img_i2c_init()
1234 img_i2c_writel(i2c, SCB_TIME_TSDL_REG, data + tsdh + 2); in img_i2c_init()
1240 img_i2c_writel(i2c, SCB_TIME_TP2S_REG, data); in img_i2c_init()
1242 img_i2c_writel(i2c, SCB_TIME_TBI_REG, TIMEOUT_TBI); in img_i2c_init()
1243 img_i2c_writel(i2c, SCB_TIME_TSL_REG, TIMEOUT_TSL); in img_i2c_init()
1244 img_i2c_writel(i2c, SCB_TIME_TDL_REG, TIMEOUT_TDL); in img_i2c_init()
1247 img_i2c_soft_reset(i2c); in img_i2c_init()
1250 img_i2c_writel(i2c, SCB_INT_MASK_REG, 0); in img_i2c_init()
1253 img_i2c_writel(i2c, SCB_INT_CLEAR_REG, ~0); in img_i2c_init()
1256 img_i2c_writel(i2c, SCB_CLEAR_REG, ~0); in img_i2c_init()
1259 img_i2c_writel(i2c, SCB_INT_MASK_REG, i2c->int_enable); in img_i2c_init()
1262 ret = img_i2c_reset_bus(i2c); in img_i2c_init()
1264 clk_disable_unprepare(i2c->scb_clk); in img_i2c_init()
1272 struct img_i2c *i2c; in img_i2c_probe() local
1277 i2c = devm_kzalloc(&pdev->dev, sizeof(struct img_i2c), GFP_KERNEL); in img_i2c_probe()
1278 if (!i2c) in img_i2c_probe()
1282 i2c->base = devm_ioremap_resource(&pdev->dev, res); in img_i2c_probe()
1283 if (IS_ERR(i2c->base)) in img_i2c_probe()
1284 return PTR_ERR(i2c->base); in img_i2c_probe()
1292 i2c->sys_clk = devm_clk_get(&pdev->dev, "sys"); in img_i2c_probe()
1293 if (IS_ERR(i2c->sys_clk)) { in img_i2c_probe()
1295 return PTR_ERR(i2c->sys_clk); in img_i2c_probe()
1298 i2c->scb_clk = devm_clk_get(&pdev->dev, "scb"); in img_i2c_probe()
1299 if (IS_ERR(i2c->scb_clk)) { in img_i2c_probe()
1301 return PTR_ERR(i2c->scb_clk); in img_i2c_probe()
1305 pdev->name, i2c); in img_i2c_probe()
1312 init_timer(&i2c->check_timer); in img_i2c_probe()
1313 i2c->check_timer.function = img_i2c_check_timer; in img_i2c_probe()
1314 i2c->check_timer.data = (unsigned long)i2c; in img_i2c_probe()
1316 i2c->bitrate = timings[0].max_bitrate; in img_i2c_probe()
1318 i2c->bitrate = val; in img_i2c_probe()
1320 i2c_set_adapdata(&i2c->adap, i2c); in img_i2c_probe()
1321 i2c->adap.dev.parent = &pdev->dev; in img_i2c_probe()
1322 i2c->adap.dev.of_node = node; in img_i2c_probe()
1323 i2c->adap.owner = THIS_MODULE; in img_i2c_probe()
1324 i2c->adap.algo = &img_i2c_algo; in img_i2c_probe()
1325 i2c->adap.retries = 5; in img_i2c_probe()
1326 i2c->adap.nr = pdev->id; in img_i2c_probe()
1327 snprintf(i2c->adap.name, sizeof(i2c->adap.name), "IMG SCB I2C"); in img_i2c_probe()
1329 img_i2c_switch_mode(i2c, MODE_INACTIVE); in img_i2c_probe()
1330 spin_lock_init(&i2c->lock); in img_i2c_probe()
1331 init_completion(&i2c->msg_complete); in img_i2c_probe()
1333 platform_set_drvdata(pdev, i2c); in img_i2c_probe()
1335 ret = clk_prepare_enable(i2c->sys_clk); in img_i2c_probe()
1339 ret = img_i2c_init(i2c); in img_i2c_probe()
1343 ret = i2c_add_numbered_adapter(&i2c->adap); in img_i2c_probe()
1352 clk_disable_unprepare(i2c->sys_clk); in img_i2c_probe()
1358 struct img_i2c *i2c = platform_get_drvdata(dev); in img_i2c_remove() local
1360 i2c_del_adapter(&i2c->adap); in img_i2c_remove()
1361 clk_disable_unprepare(i2c->sys_clk); in img_i2c_remove()
1369 struct img_i2c *i2c = dev_get_drvdata(dev); in img_i2c_suspend() local
1371 img_i2c_switch_mode(i2c, MODE_SUSPEND); in img_i2c_suspend()
1373 clk_disable_unprepare(i2c->sys_clk); in img_i2c_suspend()
1380 struct img_i2c *i2c = dev_get_drvdata(dev); in img_i2c_resume() local
1383 ret = clk_prepare_enable(i2c->sys_clk); in img_i2c_resume()
1387 img_i2c_init(i2c); in img_i2c_resume()