Lines Matching refs:dev
188 struct device *dev; member
195 void (*set_mpu_wkup_lat)(struct device *dev,
285 static void __omap_i2c_init(struct omap_i2c_dev *dev) in __omap_i2c_init() argument
288 omap_i2c_write_reg(dev, OMAP_I2C_CON_REG, 0); in __omap_i2c_init()
291 omap_i2c_write_reg(dev, OMAP_I2C_PSC_REG, dev->pscstate); in __omap_i2c_init()
294 omap_i2c_write_reg(dev, OMAP_I2C_SCLL_REG, dev->scllstate); in __omap_i2c_init()
295 omap_i2c_write_reg(dev, OMAP_I2C_SCLH_REG, dev->sclhstate); in __omap_i2c_init()
296 if (dev->rev >= OMAP_I2C_REV_ON_3430_3530) in __omap_i2c_init()
297 omap_i2c_write_reg(dev, OMAP_I2C_WE_REG, dev->westate); in __omap_i2c_init()
300 omap_i2c_write_reg(dev, OMAP_I2C_CON_REG, OMAP_I2C_CON_EN); in __omap_i2c_init()
312 if (dev->iestate) in __omap_i2c_init()
313 omap_i2c_write_reg(dev, OMAP_I2C_IE_REG, dev->iestate); in __omap_i2c_init()
316 static int omap_i2c_reset(struct omap_i2c_dev *dev) in omap_i2c_reset() argument
321 if (dev->rev >= OMAP_I2C_OMAP1_REV_2) { in omap_i2c_reset()
322 sysc = omap_i2c_read_reg(dev, OMAP_I2C_SYSC_REG); in omap_i2c_reset()
325 omap_i2c_write_reg(dev, OMAP_I2C_CON_REG, in omap_i2c_reset()
326 omap_i2c_read_reg(dev, OMAP_I2C_CON_REG) & in omap_i2c_reset()
329 omap_i2c_write_reg(dev, OMAP_I2C_SYSC_REG, SYSC_SOFTRESET_MASK); in omap_i2c_reset()
333 omap_i2c_write_reg(dev, OMAP_I2C_CON_REG, OMAP_I2C_CON_EN); in omap_i2c_reset()
334 while (!(omap_i2c_read_reg(dev, OMAP_I2C_SYSS_REG) & in omap_i2c_reset()
337 dev_warn(dev->dev, "timeout waiting " in omap_i2c_reset()
345 omap_i2c_write_reg(dev, OMAP_I2C_SYSC_REG, sysc); in omap_i2c_reset()
347 if (dev->rev > OMAP_I2C_REV_ON_3430_3530) { in omap_i2c_reset()
349 dev->bb_valid = 0; in omap_i2c_reset()
356 static int omap_i2c_init(struct omap_i2c_dev *dev) in omap_i2c_init() argument
364 if (dev->rev >= OMAP_I2C_REV_ON_3430_3530) { in omap_i2c_init()
370 dev->westate = OMAP_I2C_WE_ALL; in omap_i2c_init()
373 if (dev->flags & OMAP_I2C_FLAG_ALWAYS_ARMXOR_CLK) { in omap_i2c_init()
380 fclk = clk_get(dev->dev, "fck"); in omap_i2c_init()
397 if (!(dev->flags & OMAP_I2C_FLAG_SIMPLE_CLOCK)) { in omap_i2c_init()
405 if (dev->speed > 400 || in omap_i2c_init()
406 dev->flags & OMAP_I2C_FLAG_FORCE_19200_INT_CLK) in omap_i2c_init()
408 else if (dev->speed > 100) in omap_i2c_init()
412 fclk = clk_get(dev->dev, "fck"); in omap_i2c_init()
421 if (dev->speed > 400) { in omap_i2c_init()
430 scl = fclk_rate / dev->speed; in omap_i2c_init()
433 } else if (dev->speed > 100) { in omap_i2c_init()
437 scl = internal_clk / dev->speed; in omap_i2c_init()
442 fsscll = internal_clk / (dev->speed * 2) - 7; in omap_i2c_init()
443 fssclh = internal_clk / (dev->speed * 2) - 5; in omap_i2c_init()
452 scll = fclk_rate / (dev->speed * 2) - 7 + psc; in omap_i2c_init()
453 sclh = fclk_rate / (dev->speed * 2) - 7 + psc; in omap_i2c_init()
456 dev->iestate = (OMAP_I2C_IE_XRDY | OMAP_I2C_IE_RRDY | in omap_i2c_init()
458 OMAP_I2C_IE_AL) | ((dev->fifo_size) ? in omap_i2c_init()
461 dev->pscstate = psc; in omap_i2c_init()
462 dev->scllstate = scll; in omap_i2c_init()
463 dev->sclhstate = sclh; in omap_i2c_init()
465 if (dev->rev <= OMAP_I2C_REV_ON_3430_3530) { in omap_i2c_init()
467 dev->bb_valid = 1; in omap_i2c_init()
470 __omap_i2c_init(dev); in omap_i2c_init()
478 static int omap_i2c_wait_for_bb(struct omap_i2c_dev *dev) in omap_i2c_wait_for_bb() argument
483 while (omap_i2c_read_reg(dev, OMAP_I2C_STAT_REG) & OMAP_I2C_STAT_BB) { in omap_i2c_wait_for_bb()
485 dev_warn(dev->dev, "timeout waiting for bus ready\n"); in omap_i2c_wait_for_bb()
522 static int omap_i2c_wait_for_bb_valid(struct omap_i2c_dev *dev) in omap_i2c_wait_for_bb_valid() argument
529 if (dev->bb_valid) in omap_i2c_wait_for_bb_valid()
534 stat = omap_i2c_read_reg(dev, OMAP_I2C_STAT_REG); in omap_i2c_wait_for_bb_valid()
547 systest = omap_i2c_read_reg(dev, OMAP_I2C_SYSTEST_REG); in omap_i2c_wait_for_bb_valid()
568 dev_warn(dev->dev, "timeout waiting for bus ready\n"); in omap_i2c_wait_for_bb_valid()
575 dev->bb_valid = 1; in omap_i2c_wait_for_bb_valid()
579 static void omap_i2c_resize_fifo(struct omap_i2c_dev *dev, u8 size, bool is_rx) in omap_i2c_resize_fifo() argument
583 if (dev->flags & OMAP_I2C_FLAG_NO_FIFO) in omap_i2c_resize_fifo()
593 dev->threshold = clamp(size, (u8) 1, dev->fifo_size); in omap_i2c_resize_fifo()
595 buf = omap_i2c_read_reg(dev, OMAP_I2C_BUF_REG); in omap_i2c_resize_fifo()
600 buf |= ((dev->threshold - 1) << 8) | OMAP_I2C_BUF_RXFIF_CLR; in omap_i2c_resize_fifo()
604 buf |= (dev->threshold - 1) | OMAP_I2C_BUF_TXFIF_CLR; in omap_i2c_resize_fifo()
607 omap_i2c_write_reg(dev, OMAP_I2C_BUF_REG, buf); in omap_i2c_resize_fifo()
609 if (dev->rev < OMAP_I2C_REV_ON_3630) in omap_i2c_resize_fifo()
610 dev->b_hw = 1; /* Enable hardware fixes */ in omap_i2c_resize_fifo()
613 if (dev->set_mpu_wkup_lat != NULL) in omap_i2c_resize_fifo()
614 dev->latency = (1000000 * dev->threshold) / in omap_i2c_resize_fifo()
615 (1000 * dev->speed / 8); in omap_i2c_resize_fifo()
624 struct omap_i2c_dev *dev = i2c_get_adapdata(adap); in omap_i2c_xfer_msg() local
628 dev_dbg(dev->dev, "addr: 0x%04x, len: %d, flags: 0x%x, stop: %d\n", in omap_i2c_xfer_msg()
634 dev->receiver = !!(msg->flags & I2C_M_RD); in omap_i2c_xfer_msg()
635 omap_i2c_resize_fifo(dev, msg->len, dev->receiver); in omap_i2c_xfer_msg()
637 omap_i2c_write_reg(dev, OMAP_I2C_SA_REG, msg->addr); in omap_i2c_xfer_msg()
640 dev->buf = msg->buf; in omap_i2c_xfer_msg()
641 dev->buf_len = msg->len; in omap_i2c_xfer_msg()
646 omap_i2c_write_reg(dev, OMAP_I2C_CNT_REG, dev->buf_len); in omap_i2c_xfer_msg()
649 w = omap_i2c_read_reg(dev, OMAP_I2C_BUF_REG); in omap_i2c_xfer_msg()
651 omap_i2c_write_reg(dev, OMAP_I2C_BUF_REG, w); in omap_i2c_xfer_msg()
653 reinit_completion(&dev->cmd_complete); in omap_i2c_xfer_msg()
654 dev->cmd_err = 0; in omap_i2c_xfer_msg()
659 if (dev->speed > 400) in omap_i2c_xfer_msg()
669 if (!dev->b_hw && stop) in omap_i2c_xfer_msg()
676 omap_i2c_write_reg(dev, OMAP_I2C_CON_REG, w); in omap_i2c_xfer_msg()
681 if (dev->b_hw && stop) { in omap_i2c_xfer_msg()
683 u16 con = omap_i2c_read_reg(dev, OMAP_I2C_CON_REG); in omap_i2c_xfer_msg()
685 con = omap_i2c_read_reg(dev, OMAP_I2C_CON_REG); in omap_i2c_xfer_msg()
689 dev_err(dev->dev, "controller timed out " in omap_i2c_xfer_msg()
698 omap_i2c_write_reg(dev, OMAP_I2C_CON_REG, w); in omap_i2c_xfer_msg()
705 timeout = wait_for_completion_timeout(&dev->cmd_complete, in omap_i2c_xfer_msg()
708 dev_err(dev->dev, "controller timed out\n"); in omap_i2c_xfer_msg()
709 omap_i2c_reset(dev); in omap_i2c_xfer_msg()
710 __omap_i2c_init(dev); in omap_i2c_xfer_msg()
714 if (likely(!dev->cmd_err)) in omap_i2c_xfer_msg()
718 if (dev->cmd_err & (OMAP_I2C_STAT_ROVR | OMAP_I2C_STAT_XUDF)) { in omap_i2c_xfer_msg()
719 omap_i2c_reset(dev); in omap_i2c_xfer_msg()
720 __omap_i2c_init(dev); in omap_i2c_xfer_msg()
724 if (dev->cmd_err & OMAP_I2C_STAT_AL) in omap_i2c_xfer_msg()
727 if (dev->cmd_err & OMAP_I2C_STAT_NACK) { in omap_i2c_xfer_msg()
731 w = omap_i2c_read_reg(dev, OMAP_I2C_CON_REG); in omap_i2c_xfer_msg()
733 omap_i2c_write_reg(dev, OMAP_I2C_CON_REG, w); in omap_i2c_xfer_msg()
747 struct omap_i2c_dev *dev = i2c_get_adapdata(adap); in omap_i2c_xfer() local
751 r = pm_runtime_get_sync(dev->dev); in omap_i2c_xfer()
755 r = omap_i2c_wait_for_bb_valid(dev); in omap_i2c_xfer()
759 r = omap_i2c_wait_for_bb(dev); in omap_i2c_xfer()
763 if (dev->set_mpu_wkup_lat != NULL) in omap_i2c_xfer()
764 dev->set_mpu_wkup_lat(dev->dev, dev->latency); in omap_i2c_xfer()
775 omap_i2c_wait_for_bb(dev); in omap_i2c_xfer()
777 if (dev->set_mpu_wkup_lat != NULL) in omap_i2c_xfer()
778 dev->set_mpu_wkup_lat(dev->dev, -1); in omap_i2c_xfer()
781 pm_runtime_mark_last_busy(dev->dev); in omap_i2c_xfer()
782 pm_runtime_put_autosuspend(dev->dev); in omap_i2c_xfer()
794 omap_i2c_complete_cmd(struct omap_i2c_dev *dev, u16 err) in omap_i2c_complete_cmd() argument
796 dev->cmd_err |= err; in omap_i2c_complete_cmd()
797 complete(&dev->cmd_complete); in omap_i2c_complete_cmd()
801 omap_i2c_ack_stat(struct omap_i2c_dev *dev, u16 stat) in omap_i2c_ack_stat() argument
803 omap_i2c_write_reg(dev, OMAP_I2C_STAT_REG, stat); in omap_i2c_ack_stat()
806 static inline void i2c_omap_errata_i207(struct omap_i2c_dev *dev, u16 stat) in i2c_omap_errata_i207() argument
817 omap_i2c_ack_stat(dev, OMAP_I2C_STAT_RDR); in i2c_omap_errata_i207()
820 if (!(omap_i2c_read_reg(dev, OMAP_I2C_STAT_REG) in i2c_omap_errata_i207()
824 if (omap_i2c_read_reg(dev, OMAP_I2C_STAT_REG) in i2c_omap_errata_i207()
826 omap_i2c_ack_stat(dev, OMAP_I2C_STAT_RDR); in i2c_omap_errata_i207()
827 dev_dbg(dev->dev, "RDR when bus is busy.\n"); in i2c_omap_errata_i207()
840 struct omap_i2c_dev *dev = dev_id; in omap_i2c_omap1_isr() local
843 if (pm_runtime_suspended(dev->dev)) in omap_i2c_omap1_isr()
846 iv = omap_i2c_read_reg(dev, OMAP_I2C_IV_REG); in omap_i2c_omap1_isr()
851 dev_err(dev->dev, "Arbitration lost\n"); in omap_i2c_omap1_isr()
852 omap_i2c_complete_cmd(dev, OMAP_I2C_STAT_AL); in omap_i2c_omap1_isr()
855 omap_i2c_complete_cmd(dev, OMAP_I2C_STAT_NACK); in omap_i2c_omap1_isr()
856 omap_i2c_write_reg(dev, OMAP_I2C_CON_REG, OMAP_I2C_CON_STP); in omap_i2c_omap1_isr()
859 omap_i2c_complete_cmd(dev, 0); in omap_i2c_omap1_isr()
862 if (dev->buf_len) { in omap_i2c_omap1_isr()
863 w = omap_i2c_read_reg(dev, OMAP_I2C_DATA_REG); in omap_i2c_omap1_isr()
864 *dev->buf++ = w; in omap_i2c_omap1_isr()
865 dev->buf_len--; in omap_i2c_omap1_isr()
866 if (dev->buf_len) { in omap_i2c_omap1_isr()
867 *dev->buf++ = w >> 8; in omap_i2c_omap1_isr()
868 dev->buf_len--; in omap_i2c_omap1_isr()
871 dev_err(dev->dev, "RRDY IRQ while no data requested\n"); in omap_i2c_omap1_isr()
874 if (dev->buf_len) { in omap_i2c_omap1_isr()
875 w = *dev->buf++; in omap_i2c_omap1_isr()
876 dev->buf_len--; in omap_i2c_omap1_isr()
877 if (dev->buf_len) { in omap_i2c_omap1_isr()
878 w |= *dev->buf++ << 8; in omap_i2c_omap1_isr()
879 dev->buf_len--; in omap_i2c_omap1_isr()
881 omap_i2c_write_reg(dev, OMAP_I2C_DATA_REG, w); in omap_i2c_omap1_isr()
883 dev_err(dev->dev, "XRDY IRQ while no data to send\n"); in omap_i2c_omap1_isr()
900 static int errata_omap3_i462(struct omap_i2c_dev *dev) in errata_omap3_i462() argument
906 stat = omap_i2c_read_reg(dev, OMAP_I2C_STAT_REG); in errata_omap3_i462()
911 omap_i2c_ack_stat(dev, (OMAP_I2C_STAT_XRDY | in errata_omap3_i462()
914 dev->cmd_err |= OMAP_I2C_STAT_NACK; in errata_omap3_i462()
915 omap_i2c_ack_stat(dev, OMAP_I2C_STAT_NACK); in errata_omap3_i462()
919 dev_err(dev->dev, "Arbitration lost\n"); in errata_omap3_i462()
920 dev->cmd_err |= OMAP_I2C_STAT_AL; in errata_omap3_i462()
921 omap_i2c_ack_stat(dev, OMAP_I2C_STAT_AL); in errata_omap3_i462()
931 dev_err(dev->dev, "timeout waiting on XUDF bit\n"); in errata_omap3_i462()
938 static void omap_i2c_receive_data(struct omap_i2c_dev *dev, u8 num_bytes, in omap_i2c_receive_data() argument
944 w = omap_i2c_read_reg(dev, OMAP_I2C_DATA_REG); in omap_i2c_receive_data()
945 *dev->buf++ = w; in omap_i2c_receive_data()
946 dev->buf_len--; in omap_i2c_receive_data()
952 if (dev->flags & OMAP_I2C_FLAG_16BIT_DATA_REG) { in omap_i2c_receive_data()
953 *dev->buf++ = w >> 8; in omap_i2c_receive_data()
954 dev->buf_len--; in omap_i2c_receive_data()
959 static int omap_i2c_transmit_data(struct omap_i2c_dev *dev, u8 num_bytes, in omap_i2c_transmit_data() argument
965 w = *dev->buf++; in omap_i2c_transmit_data()
966 dev->buf_len--; in omap_i2c_transmit_data()
972 if (dev->flags & OMAP_I2C_FLAG_16BIT_DATA_REG) { in omap_i2c_transmit_data()
973 w |= *dev->buf++ << 8; in omap_i2c_transmit_data()
974 dev->buf_len--; in omap_i2c_transmit_data()
977 if (dev->errata & I2C_OMAP_ERRATA_I462) { in omap_i2c_transmit_data()
980 ret = errata_omap3_i462(dev); in omap_i2c_transmit_data()
985 omap_i2c_write_reg(dev, OMAP_I2C_DATA_REG, w); in omap_i2c_transmit_data()
994 struct omap_i2c_dev *dev = dev_id; in omap_i2c_isr() local
999 spin_lock(&dev->lock); in omap_i2c_isr()
1000 mask = omap_i2c_read_reg(dev, OMAP_I2C_IE_REG); in omap_i2c_isr()
1001 stat = omap_i2c_read_reg(dev, OMAP_I2C_STAT_REG); in omap_i2c_isr()
1006 spin_unlock(&dev->lock); in omap_i2c_isr()
1014 struct omap_i2c_dev *dev = dev_id; in omap_i2c_isr_thread() local
1020 spin_lock_irqsave(&dev->lock, flags); in omap_i2c_isr_thread()
1022 bits = omap_i2c_read_reg(dev, OMAP_I2C_IE_REG); in omap_i2c_isr_thread()
1023 stat = omap_i2c_read_reg(dev, OMAP_I2C_STAT_REG); in omap_i2c_isr_thread()
1027 if (dev->receiver) in omap_i2c_isr_thread()
1037 dev_dbg(dev->dev, "IRQ (ISR = 0x%04x)\n", stat); in omap_i2c_isr_thread()
1039 dev_warn(dev->dev, "Too much work in one IRQ\n"); in omap_i2c_isr_thread()
1045 omap_i2c_ack_stat(dev, OMAP_I2C_STAT_NACK); in omap_i2c_isr_thread()
1049 dev_err(dev->dev, "Arbitration lost\n"); in omap_i2c_isr_thread()
1051 omap_i2c_ack_stat(dev, OMAP_I2C_STAT_AL); in omap_i2c_isr_thread()
1058 omap_i2c_ack_stat(dev, OMAP_I2C_STAT_ARDY); in omap_i2c_isr_thread()
1062 omap_i2c_ack_stat(dev, (OMAP_I2C_STAT_RRDY | in omap_i2c_isr_thread()
1073 if (dev->fifo_size) in omap_i2c_isr_thread()
1074 num_bytes = dev->buf_len; in omap_i2c_isr_thread()
1076 if (dev->errata & I2C_OMAP_ERRATA_I207) { in omap_i2c_isr_thread()
1077 i2c_omap_errata_i207(dev, stat); in omap_i2c_isr_thread()
1078 num_bytes = (omap_i2c_read_reg(dev, in omap_i2c_isr_thread()
1082 omap_i2c_receive_data(dev, num_bytes, true); in omap_i2c_isr_thread()
1083 omap_i2c_ack_stat(dev, OMAP_I2C_STAT_RDR); in omap_i2c_isr_thread()
1090 if (dev->threshold) in omap_i2c_isr_thread()
1091 num_bytes = dev->threshold; in omap_i2c_isr_thread()
1093 omap_i2c_receive_data(dev, num_bytes, false); in omap_i2c_isr_thread()
1094 omap_i2c_ack_stat(dev, OMAP_I2C_STAT_RRDY); in omap_i2c_isr_thread()
1102 if (dev->fifo_size) in omap_i2c_isr_thread()
1103 num_bytes = dev->buf_len; in omap_i2c_isr_thread()
1105 ret = omap_i2c_transmit_data(dev, num_bytes, true); in omap_i2c_isr_thread()
1109 omap_i2c_ack_stat(dev, OMAP_I2C_STAT_XDR); in omap_i2c_isr_thread()
1117 if (dev->threshold) in omap_i2c_isr_thread()
1118 num_bytes = dev->threshold; in omap_i2c_isr_thread()
1120 ret = omap_i2c_transmit_data(dev, num_bytes, false); in omap_i2c_isr_thread()
1124 omap_i2c_ack_stat(dev, OMAP_I2C_STAT_XRDY); in omap_i2c_isr_thread()
1129 dev_err(dev->dev, "Receive overrun\n"); in omap_i2c_isr_thread()
1131 omap_i2c_ack_stat(dev, OMAP_I2C_STAT_ROVR); in omap_i2c_isr_thread()
1136 dev_err(dev->dev, "Transmit underflow\n"); in omap_i2c_isr_thread()
1138 omap_i2c_ack_stat(dev, OMAP_I2C_STAT_XUDF); in omap_i2c_isr_thread()
1143 omap_i2c_complete_cmd(dev, err); in omap_i2c_isr_thread()
1146 spin_unlock_irqrestore(&dev->lock, flags); in omap_i2c_isr_thread()
1215 struct omap_i2c_dev *dev; in omap_i2c_probe() local
1219 dev_get_platdata(&pdev->dev); in omap_i2c_probe()
1220 struct device_node *node = pdev->dev.of_node; in omap_i2c_probe()
1229 dev_err(&pdev->dev, "no irq resource?\n"); in omap_i2c_probe()
1233 dev = devm_kzalloc(&pdev->dev, sizeof(struct omap_i2c_dev), GFP_KERNEL); in omap_i2c_probe()
1234 if (!dev) in omap_i2c_probe()
1238 dev->base = devm_ioremap_resource(&pdev->dev, mem); in omap_i2c_probe()
1239 if (IS_ERR(dev->base)) in omap_i2c_probe()
1240 return PTR_ERR(dev->base); in omap_i2c_probe()
1242 match = of_match_device(of_match_ptr(omap_i2c_of_match), &pdev->dev); in omap_i2c_probe()
1247 dev->flags = pdata->flags; in omap_i2c_probe()
1251 dev->speed = freq / 1000; in omap_i2c_probe()
1253 dev->speed = pdata->clkrate; in omap_i2c_probe()
1254 dev->flags = pdata->flags; in omap_i2c_probe()
1255 dev->set_mpu_wkup_lat = pdata->set_mpu_wkup_lat; in omap_i2c_probe()
1258 dev->dev = &pdev->dev; in omap_i2c_probe()
1259 dev->irq = irq; in omap_i2c_probe()
1261 spin_lock_init(&dev->lock); in omap_i2c_probe()
1263 platform_set_drvdata(pdev, dev); in omap_i2c_probe()
1264 init_completion(&dev->cmd_complete); in omap_i2c_probe()
1266 dev->reg_shift = (dev->flags >> OMAP_I2C_FLAG_BUS_SHIFT__SHIFT) & 3; in omap_i2c_probe()
1268 pm_runtime_enable(dev->dev); in omap_i2c_probe()
1269 pm_runtime_set_autosuspend_delay(dev->dev, OMAP_I2C_PM_TIMEOUT); in omap_i2c_probe()
1270 pm_runtime_use_autosuspend(dev->dev); in omap_i2c_probe()
1272 r = pm_runtime_get_sync(dev->dev); in omap_i2c_probe()
1282 rev = readw_relaxed(dev->base + 0x04); in omap_i2c_probe()
1284 dev->scheme = OMAP_I2C_SCHEME(rev); in omap_i2c_probe()
1285 switch (dev->scheme) { in omap_i2c_probe()
1287 dev->regs = (u8 *)reg_map_ip_v1; in omap_i2c_probe()
1288 dev->rev = omap_i2c_read_reg(dev, OMAP_I2C_REV_REG); in omap_i2c_probe()
1289 minor = OMAP_I2C_REV_SCHEME_0_MAJOR(dev->rev); in omap_i2c_probe()
1290 major = OMAP_I2C_REV_SCHEME_0_MAJOR(dev->rev); in omap_i2c_probe()
1295 dev->regs = (u8 *)reg_map_ip_v2; in omap_i2c_probe()
1297 omap_i2c_read_reg(dev, OMAP_I2C_IP_V2_REVNB_LO); in omap_i2c_probe()
1300 dev->rev = rev; in omap_i2c_probe()
1303 dev->errata = 0; in omap_i2c_probe()
1305 if (dev->rev >= OMAP_I2C_REV_ON_2430 && in omap_i2c_probe()
1306 dev->rev < OMAP_I2C_REV_ON_4430_PLUS) in omap_i2c_probe()
1307 dev->errata |= I2C_OMAP_ERRATA_I207; in omap_i2c_probe()
1309 if (dev->rev <= OMAP_I2C_REV_ON_3430_3530) in omap_i2c_probe()
1310 dev->errata |= I2C_OMAP_ERRATA_I462; in omap_i2c_probe()
1312 if (!(dev->flags & OMAP_I2C_FLAG_NO_FIFO)) { in omap_i2c_probe()
1316 s = (omap_i2c_read_reg(dev, OMAP_I2C_BUFSTAT_REG) >> 14) & 0x3; in omap_i2c_probe()
1317 dev->fifo_size = 0x8 << s; in omap_i2c_probe()
1325 dev->fifo_size = (dev->fifo_size / 2); in omap_i2c_probe()
1327 if (dev->rev < OMAP_I2C_REV_ON_3630) in omap_i2c_probe()
1328 dev->b_hw = 1; /* Enable hardware fixes */ in omap_i2c_probe()
1331 if (dev->set_mpu_wkup_lat != NULL) in omap_i2c_probe()
1332 dev->latency = (1000000 * dev->fifo_size) / in omap_i2c_probe()
1333 (1000 * dev->speed / 8); in omap_i2c_probe()
1337 omap_i2c_init(dev); in omap_i2c_probe()
1339 if (dev->rev < OMAP_I2C_OMAP1_REV_2) in omap_i2c_probe()
1340 r = devm_request_irq(&pdev->dev, dev->irq, omap_i2c_omap1_isr, in omap_i2c_probe()
1341 IRQF_NO_SUSPEND, pdev->name, dev); in omap_i2c_probe()
1343 r = devm_request_threaded_irq(&pdev->dev, dev->irq, in omap_i2c_probe()
1346 pdev->name, dev); in omap_i2c_probe()
1349 dev_err(dev->dev, "failure requesting irq %i\n", dev->irq); in omap_i2c_probe()
1353 adap = &dev->adapter; in omap_i2c_probe()
1354 i2c_set_adapdata(adap, dev); in omap_i2c_probe()
1359 adap->dev.parent = &pdev->dev; in omap_i2c_probe()
1360 adap->dev.of_node = pdev->dev.of_node; in omap_i2c_probe()
1366 dev_err(dev->dev, "failure adding adapter\n"); in omap_i2c_probe()
1370 dev_info(dev->dev, "bus %d rev%d.%d at %d kHz\n", adap->nr, in omap_i2c_probe()
1371 major, minor, dev->speed); in omap_i2c_probe()
1373 pm_runtime_mark_last_busy(dev->dev); in omap_i2c_probe()
1374 pm_runtime_put_autosuspend(dev->dev); in omap_i2c_probe()
1379 omap_i2c_write_reg(dev, OMAP_I2C_CON_REG, 0); in omap_i2c_probe()
1380 pm_runtime_put(dev->dev); in omap_i2c_probe()
1381 pm_runtime_disable(&pdev->dev); in omap_i2c_probe()
1389 struct omap_i2c_dev *dev = platform_get_drvdata(pdev); in omap_i2c_remove() local
1392 i2c_del_adapter(&dev->adapter); in omap_i2c_remove()
1393 ret = pm_runtime_get_sync(&pdev->dev); in omap_i2c_remove()
1397 omap_i2c_write_reg(dev, OMAP_I2C_CON_REG, 0); in omap_i2c_remove()
1398 pm_runtime_put(&pdev->dev); in omap_i2c_remove()
1399 pm_runtime_disable(&pdev->dev); in omap_i2c_remove()
1404 static int omap_i2c_runtime_suspend(struct device *dev) in omap_i2c_runtime_suspend() argument
1406 struct platform_device *pdev = to_platform_device(dev); in omap_i2c_runtime_suspend()
1429 static int omap_i2c_runtime_resume(struct device *dev) in omap_i2c_runtime_resume() argument
1431 struct platform_device *pdev = to_platform_device(dev); in omap_i2c_runtime_resume()