Lines Matching refs:i2c

409 static void img_i2c_writel(struct img_i2c *i2c, u32 offset, u32 value)  in img_i2c_writel()  argument
411 writel(value, i2c->base + offset); in img_i2c_writel()
414 static u32 img_i2c_readl(struct img_i2c *i2c, u32 offset) in img_i2c_readl() argument
416 return readl(i2c->base + offset); in img_i2c_readl()
431 static void img_i2c_wr_rd_fence(struct img_i2c *i2c) in img_i2c_wr_rd_fence() argument
433 if (i2c->need_wr_rd_fence) { in img_i2c_wr_rd_fence()
434 img_i2c_writel(i2c, SCB_CORE_REV_REG, 0); in img_i2c_wr_rd_fence()
435 img_i2c_writel(i2c, SCB_CORE_REV_REG, 0); in img_i2c_wr_rd_fence()
439 static void img_i2c_switch_mode(struct img_i2c *i2c, enum img_i2c_mode mode) in img_i2c_switch_mode() argument
441 i2c->mode = mode; in img_i2c_switch_mode()
442 i2c->int_enable = img_i2c_int_enable_by_mode[mode]; in img_i2c_switch_mode()
443 i2c->line_status = 0; in img_i2c_switch_mode()
446 static void img_i2c_raw_op(struct img_i2c *i2c) in img_i2c_raw_op() argument
448 i2c->raw_timeout = 0; in img_i2c_raw_op()
449 img_i2c_writel(i2c, SCB_OVERRIDE_REG, in img_i2c_raw_op()
455 ((i2c->at_cur_cmd & OVERRIDE_CMD_MASK) << OVERRIDE_CMD_SHIFT) | in img_i2c_raw_op()
456 (i2c->at_cur_data << OVERRIDE_DATA_SHIFT)); in img_i2c_raw_op()
467 static void img_i2c_atomic_op(struct img_i2c *i2c, int cmd, u8 data) in img_i2c_atomic_op() argument
469 i2c->at_cur_cmd = cmd; in img_i2c_atomic_op()
470 i2c->at_cur_data = data; in img_i2c_atomic_op()
473 if (cmd == CMD_GEN_DATA && i2c->mode == MODE_ATOMIC) { in img_i2c_atomic_op()
474 u32 line_status = img_i2c_readl(i2c, SCB_STATUS_REG); in img_i2c_atomic_op()
478 img_i2c_switch_mode(i2c, MODE_RAW); in img_i2c_atomic_op()
479 img_i2c_raw_op(i2c); in img_i2c_atomic_op()
484 dev_dbg(i2c->adap.dev.parent, in img_i2c_atomic_op()
487 i2c->at_t_done = (cmd == CMD_RET_DATA || cmd == CMD_RET_ACK); in img_i2c_atomic_op()
488 i2c->at_slave_event = false; in img_i2c_atomic_op()
489 i2c->line_status = 0; in img_i2c_atomic_op()
491 img_i2c_writel(i2c, SCB_OVERRIDE_REG, in img_i2c_atomic_op()
499 static void img_i2c_atomic_start(struct img_i2c *i2c) in img_i2c_atomic_start() argument
501 img_i2c_switch_mode(i2c, MODE_ATOMIC); in img_i2c_atomic_start()
502 img_i2c_writel(i2c, SCB_INT_MASK_REG, i2c->int_enable); in img_i2c_atomic_start()
503 img_i2c_atomic_op(i2c, CMD_GEN_START, 0x00); in img_i2c_atomic_start()
506 static void img_i2c_soft_reset(struct img_i2c *i2c) in img_i2c_soft_reset() argument
508 i2c->t_halt = false; in img_i2c_soft_reset()
509 img_i2c_writel(i2c, SCB_CONTROL_REG, 0); in img_i2c_soft_reset()
510 img_i2c_writel(i2c, SCB_CONTROL_REG, in img_i2c_soft_reset()
515 static void img_i2c_transaction_halt(struct img_i2c *i2c, bool t_halt) in img_i2c_transaction_halt() argument
519 if (i2c->t_halt == t_halt) in img_i2c_transaction_halt()
521 i2c->t_halt = t_halt; in img_i2c_transaction_halt()
522 val = img_i2c_readl(i2c, SCB_CONTROL_REG); in img_i2c_transaction_halt()
527 img_i2c_writel(i2c, SCB_CONTROL_REG, val); in img_i2c_transaction_halt()
531 static void img_i2c_read_fifo(struct img_i2c *i2c) in img_i2c_read_fifo() argument
533 while (i2c->msg.len) { in img_i2c_read_fifo()
537 img_i2c_wr_rd_fence(i2c); in img_i2c_read_fifo()
538 fifo_status = img_i2c_readl(i2c, SCB_FIFO_STATUS_REG); in img_i2c_read_fifo()
542 data = img_i2c_readl(i2c, SCB_READ_DATA_REG); in img_i2c_read_fifo()
543 *i2c->msg.buf = data; in img_i2c_read_fifo()
545 img_i2c_writel(i2c, SCB_READ_FIFO_REG, 0xff); in img_i2c_read_fifo()
546 i2c->msg.len--; in img_i2c_read_fifo()
547 i2c->msg.buf++; in img_i2c_read_fifo()
552 static void img_i2c_write_fifo(struct img_i2c *i2c) in img_i2c_write_fifo() argument
554 while (i2c->msg.len) { in img_i2c_write_fifo()
557 img_i2c_wr_rd_fence(i2c); in img_i2c_write_fifo()
558 fifo_status = img_i2c_readl(i2c, SCB_FIFO_STATUS_REG); in img_i2c_write_fifo()
562 img_i2c_writel(i2c, SCB_WRITE_DATA_REG, *i2c->msg.buf); in img_i2c_write_fifo()
563 i2c->msg.len--; in img_i2c_write_fifo()
564 i2c->msg.buf++; in img_i2c_write_fifo()
568 if (!i2c->msg.len) in img_i2c_write_fifo()
569 i2c->int_enable &= ~INT_FIFO_EMPTYING; in img_i2c_write_fifo()
573 static void img_i2c_read(struct img_i2c *i2c) in img_i2c_read() argument
575 img_i2c_switch_mode(i2c, MODE_AUTOMATIC); in img_i2c_read()
576 if (!i2c->last_msg) in img_i2c_read()
577 i2c->int_enable |= INT_SLAVE_EVENT; in img_i2c_read()
579 img_i2c_writel(i2c, SCB_INT_MASK_REG, i2c->int_enable); in img_i2c_read()
580 img_i2c_writel(i2c, SCB_READ_ADDR_REG, i2c->msg.addr); in img_i2c_read()
581 img_i2c_writel(i2c, SCB_READ_COUNT_REG, i2c->msg.len); in img_i2c_read()
583 img_i2c_transaction_halt(i2c, false); in img_i2c_read()
584 mod_timer(&i2c->check_timer, jiffies + msecs_to_jiffies(1)); in img_i2c_read()
588 static void img_i2c_write(struct img_i2c *i2c) in img_i2c_write() argument
590 img_i2c_switch_mode(i2c, MODE_AUTOMATIC); in img_i2c_write()
591 if (!i2c->last_msg) in img_i2c_write()
592 i2c->int_enable |= INT_SLAVE_EVENT; in img_i2c_write()
594 img_i2c_writel(i2c, SCB_WRITE_ADDR_REG, i2c->msg.addr); in img_i2c_write()
595 img_i2c_writel(i2c, SCB_WRITE_COUNT_REG, i2c->msg.len); in img_i2c_write()
597 img_i2c_transaction_halt(i2c, false); in img_i2c_write()
598 mod_timer(&i2c->check_timer, jiffies + msecs_to_jiffies(1)); in img_i2c_write()
599 img_i2c_write_fifo(i2c); in img_i2c_write()
602 img_i2c_writel(i2c, SCB_INT_MASK_REG, i2c->int_enable); in img_i2c_write()
610 static void img_i2c_complete_transaction(struct img_i2c *i2c, int status) in img_i2c_complete_transaction() argument
612 img_i2c_switch_mode(i2c, MODE_INACTIVE); in img_i2c_complete_transaction()
614 i2c->msg_status = status; in img_i2c_complete_transaction()
615 img_i2c_transaction_halt(i2c, false); in img_i2c_complete_transaction()
617 complete(&i2c->msg_complete); in img_i2c_complete_transaction()
620 static unsigned int img_i2c_raw_atomic_delay_handler(struct img_i2c *i2c, in img_i2c_raw_atomic_delay_handler() argument
624 img_i2c_atomic_op(i2c, i2c->at_cur_cmd, i2c->at_cur_data); in img_i2c_raw_atomic_delay_handler()
625 img_i2c_switch_mode(i2c, MODE_ATOMIC); in img_i2c_raw_atomic_delay_handler()
629 static unsigned int img_i2c_raw(struct img_i2c *i2c, u32 int_status, in img_i2c_raw() argument
633 if (i2c->raw_timeout == 0) in img_i2c_raw()
634 return img_i2c_raw_atomic_delay_handler(i2c, in img_i2c_raw()
636 --i2c->raw_timeout; in img_i2c_raw()
641 static unsigned int img_i2c_sequence(struct img_i2c *i2c, u32 int_status) in img_i2c_sequence() argument
654 i2c->at_slave_event = true; in img_i2c_sequence()
656 i2c->at_t_done = true; in img_i2c_sequence()
658 if (!i2c->at_slave_event || !i2c->at_t_done) in img_i2c_sequence()
662 if (i2c->at_cur_cmd >= 0 && in img_i2c_sequence()
663 i2c->at_cur_cmd < ARRAY_SIZE(continue_bits)) { in img_i2c_sequence()
664 unsigned int cont_bits = continue_bits[i2c->at_cur_cmd]; in img_i2c_sequence()
668 if (!(i2c->line_status & cont_bits)) in img_i2c_sequence()
674 next_cmd = *i2c->seq; in img_i2c_sequence()
677 img_i2c_writel(i2c, SCB_OVERRIDE_REG, 0); in img_i2c_sequence()
682 ++i2c->seq; in img_i2c_sequence()
683 next_data = *i2c->seq; in img_i2c_sequence()
685 ++i2c->seq; in img_i2c_sequence()
686 img_i2c_atomic_op(i2c, next_cmd, next_data); in img_i2c_sequence()
691 static void img_i2c_reset_start(struct img_i2c *i2c) in img_i2c_reset_start() argument
694 img_i2c_switch_mode(i2c, MODE_SEQUENCE); in img_i2c_reset_start()
695 img_i2c_writel(i2c, SCB_INT_MASK_REG, i2c->int_enable); in img_i2c_reset_start()
696 i2c->seq = img_i2c_reset_seq; in img_i2c_reset_start()
697 i2c->at_slave_event = true; in img_i2c_reset_start()
698 i2c->at_t_done = true; in img_i2c_reset_start()
699 i2c->at_cur_cmd = -1; in img_i2c_reset_start()
702 img_i2c_sequence(i2c, 0); in img_i2c_reset_start()
705 static void img_i2c_stop_start(struct img_i2c *i2c) in img_i2c_stop_start() argument
708 img_i2c_switch_mode(i2c, MODE_SEQUENCE); in img_i2c_stop_start()
709 img_i2c_writel(i2c, SCB_INT_MASK_REG, i2c->int_enable); in img_i2c_stop_start()
710 i2c->seq = img_i2c_stop_seq; in img_i2c_stop_start()
711 i2c->at_slave_event = true; in img_i2c_stop_start()
712 i2c->at_t_done = true; in img_i2c_stop_start()
713 i2c->at_cur_cmd = -1; in img_i2c_stop_start()
716 img_i2c_sequence(i2c, 0); in img_i2c_stop_start()
719 static unsigned int img_i2c_atomic(struct img_i2c *i2c, in img_i2c_atomic() argument
727 i2c->at_slave_event = true; in img_i2c_atomic()
729 i2c->at_t_done = true; in img_i2c_atomic()
731 if (!i2c->at_slave_event || !i2c->at_t_done) in img_i2c_atomic()
733 if (i2c->line_status & LINESTAT_ABORT_DET) { in img_i2c_atomic()
734 dev_dbg(i2c->adap.dev.parent, "abort condition detected\n"); in img_i2c_atomic()
736 i2c->msg_status = -EIO; in img_i2c_atomic()
741 switch (i2c->at_cur_cmd) { in img_i2c_atomic()
744 next_data = (i2c->msg.addr << 1); in img_i2c_atomic()
745 if (i2c->msg.flags & I2C_M_RD) in img_i2c_atomic()
749 if (i2c->line_status & LINESTAT_INPUT_HELD_V) in img_i2c_atomic()
753 if (i2c->line_status & LINESTAT_ACK_DET) { in img_i2c_atomic()
754 if (i2c->msg.len == 0) { in img_i2c_atomic()
756 } else if (i2c->msg.flags & I2C_M_RD) { in img_i2c_atomic()
760 next_data = *i2c->msg.buf; in img_i2c_atomic()
761 --i2c->msg.len; in img_i2c_atomic()
762 ++i2c->msg.buf; in img_i2c_atomic()
764 } else if (i2c->line_status & LINESTAT_NACK_DET) { in img_i2c_atomic()
765 i2c->msg_status = -EIO; in img_i2c_atomic()
770 if (i2c->line_status & LINESTAT_INPUT_HELD_V) { in img_i2c_atomic()
771 *i2c->msg.buf = (i2c->line_status & in img_i2c_atomic()
774 --i2c->msg.len; in img_i2c_atomic()
775 ++i2c->msg.buf; in img_i2c_atomic()
776 if (i2c->msg.len) in img_i2c_atomic()
783 if (i2c->line_status & LINESTAT_ACK_DET) { in img_i2c_atomic()
786 i2c->msg_status = -EIO; in img_i2c_atomic()
794 img_i2c_writel(i2c, SCB_OVERRIDE_REG, 0); in img_i2c_atomic()
797 dev_err(i2c->adap.dev.parent, "bad atomic command %d\n", in img_i2c_atomic()
798 i2c->at_cur_cmd); in img_i2c_atomic()
799 i2c->msg_status = -EIO; in img_i2c_atomic()
807 if (next_cmd == CMD_GEN_STOP && !i2c->msg_status && in img_i2c_atomic()
808 !i2c->last_msg) in img_i2c_atomic()
810 img_i2c_atomic_op(i2c, next_cmd, next_data); in img_i2c_atomic()
821 struct img_i2c *i2c = (struct img_i2c *)arg; in img_i2c_check_timer() local
825 spin_lock_irqsave(&i2c->lock, flags); in img_i2c_check_timer()
826 line_status = img_i2c_readl(i2c, SCB_STATUS_REG); in img_i2c_check_timer()
830 dev_dbg(i2c->adap.dev.parent, in img_i2c_check_timer()
833 img_i2c_writel(i2c, SCB_INT_MASK_REG, in img_i2c_check_timer()
834 i2c->int_enable | INT_SLAVE_EVENT); in img_i2c_check_timer()
837 spin_unlock_irqrestore(&i2c->lock, flags); in img_i2c_check_timer()
840 static unsigned int img_i2c_auto(struct img_i2c *i2c, in img_i2c_auto() argument
848 dev_dbg(i2c->adap.dev.parent, "abort condition detected\n"); in img_i2c_auto()
850 if ((i2c->msg.flags & I2C_M_RD) && in img_i2c_auto()
852 img_i2c_read_fifo(i2c); in img_i2c_auto()
854 i2c->msg_status = -EIO; in img_i2c_auto()
855 img_i2c_stop_start(i2c); in img_i2c_auto()
860 if (!i2c->last_msg && line_status & LINESTAT_START_BIT_DET) { in img_i2c_auto()
861 img_i2c_transaction_halt(i2c, true); in img_i2c_auto()
863 i2c->int_enable &= ~INT_SLAVE_EVENT; in img_i2c_auto()
866 mod_timer(&i2c->check_timer, jiffies + msecs_to_jiffies(1)); in img_i2c_auto()
868 if (i2c->msg.flags & I2C_M_RD) { in img_i2c_auto()
870 img_i2c_read_fifo(i2c); in img_i2c_auto()
871 if (i2c->msg.len == 0) in img_i2c_auto()
884 i2c->msg.len == 0) in img_i2c_auto()
886 img_i2c_write_fifo(i2c); in img_i2c_auto()
895 struct img_i2c *i2c = (struct img_i2c *)dev_id; in img_i2c_isr() local
901 int_status = img_i2c_readl(i2c, SCB_INT_STATUS_REG); in img_i2c_isr()
903 img_i2c_writel(i2c, SCB_INT_CLEAR_REG, int_status); in img_i2c_isr()
909 line_status = img_i2c_readl(i2c, SCB_STATUS_REG); in img_i2c_isr()
911 img_i2c_writel(i2c, SCB_CLEAR_REG, in img_i2c_isr()
914 img_i2c_wr_rd_fence(i2c); in img_i2c_isr()
917 spin_lock(&i2c->lock); in img_i2c_isr()
920 i2c->line_status &= ~LINESTAT_INPUT_DATA; in img_i2c_isr()
921 i2c->line_status |= line_status; in img_i2c_isr()
931 dev_crit(i2c->adap.dev.parent, in img_i2c_isr()
933 (i2c->msg.flags & I2C_M_RD) ? "reading" : "writing", in img_i2c_isr()
934 i2c->msg.addr); in img_i2c_isr()
939 if (i2c->mode == MODE_ATOMIC) in img_i2c_isr()
940 hret = img_i2c_atomic(i2c, int_status, line_status); in img_i2c_isr()
941 else if (i2c->mode == MODE_AUTOMATIC) in img_i2c_isr()
942 hret = img_i2c_auto(i2c, int_status, line_status); in img_i2c_isr()
943 else if (i2c->mode == MODE_SEQUENCE) in img_i2c_isr()
944 hret = img_i2c_sequence(i2c, int_status); in img_i2c_isr()
945 else if (i2c->mode == MODE_WAITSTOP && (int_status & INT_SLAVE_EVENT) && in img_i2c_isr()
948 else if (i2c->mode == MODE_RAW) in img_i2c_isr()
949 hret = img_i2c_raw(i2c, int_status, line_status); in img_i2c_isr()
954 img_i2c_writel(i2c, SCB_INT_CLEAR_REG, int_status & INT_LEVEL); in img_i2c_isr()
962 if (!i2c->last_msg || i2c->line_status & LINESTAT_STOP_BIT_DET) in img_i2c_isr()
965 img_i2c_switch_mode(i2c, MODE_WAITSTOP); in img_i2c_isr()
972 img_i2c_complete_transaction(i2c, status); in img_i2c_isr()
974 img_i2c_switch_mode(i2c, MODE_FATAL); in img_i2c_isr()
978 img_i2c_writel(i2c, SCB_INT_MASK_REG, i2c->int_enable); in img_i2c_isr()
980 spin_unlock(&i2c->lock); in img_i2c_isr()
986 static int img_i2c_reset_bus(struct img_i2c *i2c) in img_i2c_reset_bus() argument
991 spin_lock_irqsave(&i2c->lock, flags); in img_i2c_reset_bus()
992 reinit_completion(&i2c->msg_complete); in img_i2c_reset_bus()
993 img_i2c_reset_start(i2c); in img_i2c_reset_bus()
994 spin_unlock_irqrestore(&i2c->lock, flags); in img_i2c_reset_bus()
996 time_left = wait_for_completion_timeout(&i2c->msg_complete, in img_i2c_reset_bus()
1006 struct img_i2c *i2c = i2c_get_adapdata(adap); in img_i2c_xfer() local
1011 if (i2c->mode == MODE_SUSPEND) { in img_i2c_xfer()
1016 if (i2c->mode == MODE_FATAL) in img_i2c_xfer()
1036 ret = clk_prepare_enable(i2c->scb_clk); in img_i2c_xfer()
1044 spin_lock_irqsave(&i2c->lock, flags); in img_i2c_xfer()
1050 i2c->msg = *msg; in img_i2c_xfer()
1051 i2c->msg_status = 0; in img_i2c_xfer()
1060 i2c->last_msg = (i == num - 1); in img_i2c_xfer()
1061 reinit_completion(&i2c->msg_complete); in img_i2c_xfer()
1069 img_i2c_writel(i2c, SCB_INT_CLEAR_REG, ~0); in img_i2c_xfer()
1070 img_i2c_writel(i2c, SCB_CLEAR_REG, ~0); in img_i2c_xfer()
1073 img_i2c_atomic_start(i2c); in img_i2c_xfer()
1075 img_i2c_read(i2c); in img_i2c_xfer()
1077 img_i2c_write(i2c); in img_i2c_xfer()
1078 spin_unlock_irqrestore(&i2c->lock, flags); in img_i2c_xfer()
1080 time_left = wait_for_completion_timeout(&i2c->msg_complete, in img_i2c_xfer()
1082 del_timer_sync(&i2c->check_timer); in img_i2c_xfer()
1086 i2c->msg_status = -ETIMEDOUT; in img_i2c_xfer()
1090 if (i2c->msg_status) in img_i2c_xfer()
1094 clk_disable_unprepare(i2c->scb_clk); in img_i2c_xfer()
1096 return i2c->msg_status ? i2c->msg_status : num; in img_i2c_xfer()
1109 static int img_i2c_init(struct img_i2c *i2c) in img_i2c_init() argument
1116 ret = clk_prepare_enable(i2c->scb_clk); in img_i2c_init()
1120 rev = img_i2c_readl(i2c, SCB_CORE_REV_REG); in img_i2c_init()
1122 dev_info(i2c->adap.dev.parent, in img_i2c_init()
1126 clk_disable_unprepare(i2c->scb_clk); in img_i2c_init()
1131 i2c->need_wr_rd_fence = true; in img_i2c_init()
1136 if (i2c->bitrate <= timings[i].max_bitrate) { in img_i2c_init()
1141 if (i2c->bitrate > timings[ARRAY_SIZE(timings) - 1].max_bitrate) { in img_i2c_init()
1142 dev_warn(i2c->adap.dev.parent, in img_i2c_init()
1144 i2c->bitrate, in img_i2c_init()
1147 i2c->bitrate = timing.max_bitrate; in img_i2c_init()
1150 bitrate_khz = i2c->bitrate / 1000; in img_i2c_init()
1151 clk_khz = clk_get_rate(i2c->scb_clk) / 1000; in img_i2c_init()
1187 img_i2c_writel(i2c, SCB_CLK_SET_REG, data); in img_i2c_init()
1219 img_i2c_writel(i2c, SCB_TIME_TCKH_REG, tckh); in img_i2c_init()
1220 img_i2c_writel(i2c, SCB_TIME_TCKL_REG, tckl); in img_i2c_init()
1229 img_i2c_writel(i2c, SCB_TIME_TSDH_REG, data); in img_i2c_init()
1238 img_i2c_writel(i2c, SCB_TIME_TPL_REG, data); in img_i2c_init()
1244 img_i2c_writel(i2c, SCB_TIME_TPH_REG, data); in img_i2c_init()
1247 img_i2c_writel(i2c, SCB_TIME_TSDL_REG, data + tsdh + 2); in img_i2c_init()
1253 img_i2c_writel(i2c, SCB_TIME_TP2S_REG, data); in img_i2c_init()
1255 img_i2c_writel(i2c, SCB_TIME_TBI_REG, TIMEOUT_TBI); in img_i2c_init()
1256 img_i2c_writel(i2c, SCB_TIME_TSL_REG, TIMEOUT_TSL); in img_i2c_init()
1257 img_i2c_writel(i2c, SCB_TIME_TDL_REG, TIMEOUT_TDL); in img_i2c_init()
1260 img_i2c_soft_reset(i2c); in img_i2c_init()
1263 img_i2c_writel(i2c, SCB_INT_MASK_REG, 0); in img_i2c_init()
1266 img_i2c_writel(i2c, SCB_INT_CLEAR_REG, ~0); in img_i2c_init()
1269 img_i2c_writel(i2c, SCB_CLEAR_REG, ~0); in img_i2c_init()
1272 img_i2c_writel(i2c, SCB_INT_MASK_REG, i2c->int_enable); in img_i2c_init()
1275 ret = img_i2c_reset_bus(i2c); in img_i2c_init()
1277 clk_disable_unprepare(i2c->scb_clk); in img_i2c_init()
1285 struct img_i2c *i2c; in img_i2c_probe() local
1290 i2c = devm_kzalloc(&pdev->dev, sizeof(struct img_i2c), GFP_KERNEL); in img_i2c_probe()
1291 if (!i2c) in img_i2c_probe()
1295 i2c->base = devm_ioremap_resource(&pdev->dev, res); in img_i2c_probe()
1296 if (IS_ERR(i2c->base)) in img_i2c_probe()
1297 return PTR_ERR(i2c->base); in img_i2c_probe()
1305 i2c->sys_clk = devm_clk_get(&pdev->dev, "sys"); in img_i2c_probe()
1306 if (IS_ERR(i2c->sys_clk)) { in img_i2c_probe()
1308 return PTR_ERR(i2c->sys_clk); in img_i2c_probe()
1311 i2c->scb_clk = devm_clk_get(&pdev->dev, "scb"); in img_i2c_probe()
1312 if (IS_ERR(i2c->scb_clk)) { in img_i2c_probe()
1314 return PTR_ERR(i2c->scb_clk); in img_i2c_probe()
1318 pdev->name, i2c); in img_i2c_probe()
1325 init_timer(&i2c->check_timer); in img_i2c_probe()
1326 i2c->check_timer.function = img_i2c_check_timer; in img_i2c_probe()
1327 i2c->check_timer.data = (unsigned long)i2c; in img_i2c_probe()
1329 i2c->bitrate = timings[0].max_bitrate; in img_i2c_probe()
1331 i2c->bitrate = val; in img_i2c_probe()
1333 i2c_set_adapdata(&i2c->adap, i2c); in img_i2c_probe()
1334 i2c->adap.dev.parent = &pdev->dev; in img_i2c_probe()
1335 i2c->adap.dev.of_node = node; in img_i2c_probe()
1336 i2c->adap.owner = THIS_MODULE; in img_i2c_probe()
1337 i2c->adap.algo = &img_i2c_algo; in img_i2c_probe()
1338 i2c->adap.retries = 5; in img_i2c_probe()
1339 i2c->adap.nr = pdev->id; in img_i2c_probe()
1340 snprintf(i2c->adap.name, sizeof(i2c->adap.name), "IMG SCB I2C"); in img_i2c_probe()
1342 img_i2c_switch_mode(i2c, MODE_INACTIVE); in img_i2c_probe()
1343 spin_lock_init(&i2c->lock); in img_i2c_probe()
1344 init_completion(&i2c->msg_complete); in img_i2c_probe()
1346 platform_set_drvdata(pdev, i2c); in img_i2c_probe()
1348 ret = clk_prepare_enable(i2c->sys_clk); in img_i2c_probe()
1352 ret = img_i2c_init(i2c); in img_i2c_probe()
1356 ret = i2c_add_numbered_adapter(&i2c->adap); in img_i2c_probe()
1365 clk_disable_unprepare(i2c->sys_clk); in img_i2c_probe()
1371 struct img_i2c *i2c = platform_get_drvdata(dev); in img_i2c_remove() local
1373 i2c_del_adapter(&i2c->adap); in img_i2c_remove()
1374 clk_disable_unprepare(i2c->sys_clk); in img_i2c_remove()
1382 struct img_i2c *i2c = dev_get_drvdata(dev); in img_i2c_suspend() local
1384 img_i2c_switch_mode(i2c, MODE_SUSPEND); in img_i2c_suspend()
1386 clk_disable_unprepare(i2c->sys_clk); in img_i2c_suspend()
1393 struct img_i2c *i2c = dev_get_drvdata(dev); in img_i2c_resume() local
1396 ret = clk_prepare_enable(i2c->sys_clk); in img_i2c_resume()
1400 img_i2c_init(i2c); in img_i2c_resume()