Lines Matching refs:dev
121 struct device *dev;
169 static void i2c_davinci_calc_clk_dividers(struct davinci_i2c_dev *dev)
171 struct davinci_i2c_platform_data *pdata = dev->pdata;
177 u32 input_clock = clk_get_rate(dev->clk);
178 struct device_node *of_node = dev->dev->of_node;
244 davinci_i2c_write_reg(dev, DAVINCI_I2C_PSC_REG, psc);
245 davinci_i2c_write_reg(dev, DAVINCI_I2C_CLKH_REG, clkh);
246 davinci_i2c_write_reg(dev, DAVINCI_I2C_CLKL_REG, clkl);
248 dev_dbg(dev->dev, "input_clock = %d, CLK = %d\n", input_clock, clk);
256 static int i2c_davinci_init(struct davinci_i2c_dev *dev)
258 struct davinci_i2c_platform_data *pdata = dev->pdata;
261 davinci_i2c_reset_ctrl(dev, 0);
264 i2c_davinci_calc_clk_dividers(dev);
269 davinci_i2c_write_reg(dev, DAVINCI_I2C_OAR_REG, DAVINCI_I2C_OWN_ADDRESS);
271 dev_dbg(dev->dev, "PSC = %d\n",
272 davinci_i2c_read_reg(dev, DAVINCI_I2C_PSC_REG));
273 dev_dbg(dev->dev, "CLKL = %d\n",
274 davinci_i2c_read_reg(dev, DAVINCI_I2C_CLKL_REG));
275 dev_dbg(dev->dev, "CLKH = %d\n",
276 davinci_i2c_read_reg(dev, DAVINCI_I2C_CLKH_REG));
277 dev_dbg(dev->dev, "bus_freq = %dkHz, bus_delay = %d\n",
282 davinci_i2c_reset_ctrl(dev, 1);
285 davinci_i2c_write_reg(dev, DAVINCI_I2C_IMR_REG, I2C_DAVINCI_INTR_ALL);
296 struct davinci_i2c_dev *dev = i2c_get_adapdata(adap);
299 davinci_i2c_write_reg(dev, DAVINCI_I2C_IMR_REG, 0);
302 davinci_i2c_reset_ctrl(dev, 0);
307 struct davinci_i2c_dev *dev = i2c_get_adapdata(adap);
309 i2c_davinci_init(dev);
320 struct davinci_i2c_dev *dev = i2c_get_adapdata(adap);
323 davinci_i2c_write_reg(dev, DAVINCI_I2C_DSET_REG,
326 davinci_i2c_write_reg(dev, DAVINCI_I2C_DCLR_REG,
332 struct davinci_i2c_dev *dev = i2c_get_adapdata(adap);
336 val = davinci_i2c_read_reg(dev, DAVINCI_I2C_DIN_REG);
342 struct davinci_i2c_dev *dev = i2c_get_adapdata(adap);
346 val = davinci_i2c_read_reg(dev, DAVINCI_I2C_DIN_REG);
352 struct davinci_i2c_dev *dev = i2c_get_adapdata(adap);
357 davinci_i2c_write_reg(dev, DAVINCI_I2C_DIR_REG, DAVINCI_I2C_DIR_PDIR0);
360 davinci_i2c_write_reg(dev, DAVINCI_I2C_FUNC_REG,
366 struct davinci_i2c_dev *dev = i2c_get_adapdata(adap);
369 davinci_i2c_write_reg(dev, DAVINCI_I2C_FUNC_REG, 0);
386 static int i2c_davinci_wait_bus_not_busy(struct davinci_i2c_dev *dev)
388 unsigned long timeout = jiffies + dev->adapter.timeout;
391 if (!(davinci_i2c_read_reg(dev, DAVINCI_I2C_STR_REG) & DAVINCI_I2C_STR_BB))
396 dev_warn(dev->dev, "timeout waiting for bus ready\n");
397 i2c_recover_bus(&dev->adapter);
403 if (davinci_i2c_read_reg(dev, DAVINCI_I2C_STR_REG) & DAVINCI_I2C_STR_BB)
416 struct davinci_i2c_dev *dev = i2c_get_adapdata(adap);
417 struct davinci_i2c_platform_data *pdata = dev->pdata;
423 dev_warn(dev->dev, "transfer to own address aborted\n");
432 davinci_i2c_write_reg(dev, DAVINCI_I2C_SAR_REG, msg->addr);
434 dev->buf = msg->buf;
435 dev->buf_len = msg->len;
436 dev->stop = stop;
438 davinci_i2c_write_reg(dev, DAVINCI_I2C_CNT_REG, dev->buf_len);
440 reinit_completion(&dev->cmd_complete);
441 dev->cmd_err = 0;
455 w = davinci_i2c_read_reg(dev, DAVINCI_I2C_IMR_REG);
460 davinci_i2c_write_reg(dev, DAVINCI_I2C_IMR_REG, w);
462 dev->terminate = 0;
469 davinci_i2c_write_reg(dev, DAVINCI_I2C_MDR_REG, flag);
478 if ((!(msg->flags & I2C_M_RD)) && dev->buf_len) {
479 davinci_i2c_write_reg(dev, DAVINCI_I2C_DXR_REG, *dev->buf++);
480 dev->buf_len--;
487 davinci_i2c_write_reg(dev, DAVINCI_I2C_MDR_REG, flag);
489 time_left = wait_for_completion_timeout(&dev->cmd_complete,
490 dev->adapter.timeout);
492 dev_err(dev->dev, "controller timed out\n");
494 dev->buf_len = 0;
497 if (dev->buf_len) {
499 * or dev->cmd_err denotes an error.
501 dev_err(dev->dev, "abnormal termination buf_len=%zu\n",
502 dev->buf_len);
503 dev->terminate = 1;
505 dev->buf_len = 0;
510 if (likely(!dev->cmd_err))
514 if (dev->cmd_err & DAVINCI_I2C_STR_AL) {
515 i2c_davinci_init(dev);
519 if (dev->cmd_err & DAVINCI_I2C_STR_NACK) {
522 w = davinci_i2c_read_reg(dev, DAVINCI_I2C_MDR_REG);
524 davinci_i2c_write_reg(dev, DAVINCI_I2C_MDR_REG, w);
536 struct davinci_i2c_dev *dev = i2c_get_adapdata(adap);
540 dev_dbg(dev->dev, "%s: msgs: %d\n", __func__, num);
542 ret = pm_runtime_get_sync(dev->dev);
544 dev_err(dev->dev, "Failed to runtime_get device: %d\n", ret);
545 pm_runtime_put_noidle(dev->dev);
549 ret = i2c_davinci_wait_bus_not_busy(dev);
551 dev_warn(dev->dev, "timeout waiting for bus ready\n");
557 dev_dbg(dev->dev, "%s [%d/%d] ret: %d\n", __func__, i + 1, num,
566 pm_runtime_mark_last_busy(dev->dev);
567 pm_runtime_put_autosuspend(dev->dev);
577 static void terminate_read(struct davinci_i2c_dev *dev)
579 u16 w = davinci_i2c_read_reg(dev, DAVINCI_I2C_MDR_REG);
581 davinci_i2c_write_reg(dev, DAVINCI_I2C_MDR_REG, w);
584 davinci_i2c_read_reg(dev, DAVINCI_I2C_DRR_REG);
585 if (!dev->terminate)
586 dev_err(dev->dev, "RDR IRQ while no data requested\n");
588 static void terminate_write(struct davinci_i2c_dev *dev)
590 u16 w = davinci_i2c_read_reg(dev, DAVINCI_I2C_MDR_REG);
592 davinci_i2c_write_reg(dev, DAVINCI_I2C_MDR_REG, w);
594 if (!dev->terminate)
595 dev_dbg(dev->dev, "TDR IRQ while no data to send\n");
604 struct davinci_i2c_dev *dev = dev_id;
609 if (pm_runtime_suspended(dev->dev))
612 while ((stat = davinci_i2c_read_reg(dev, DAVINCI_I2C_IVR_REG))) {
613 dev_dbg(dev->dev, "%s: stat=0x%x\n", __func__, stat);
615 dev_warn(dev->dev, "Too much work in one IRQ\n");
622 dev->cmd_err |= DAVINCI_I2C_STR_AL;
623 dev->buf_len = 0;
624 complete(&dev->cmd_complete);
628 dev->cmd_err |= DAVINCI_I2C_STR_NACK;
629 dev->buf_len = 0;
630 complete(&dev->cmd_complete);
634 davinci_i2c_write_reg(dev,
636 if (((dev->buf_len == 0) && (dev->stop != 0)) ||
637 (dev->cmd_err & DAVINCI_I2C_STR_NACK)) {
638 w = davinci_i2c_read_reg(dev,
641 davinci_i2c_write_reg(dev,
644 complete(&dev->cmd_complete);
648 if (dev->buf_len) {
649 *dev->buf++ =
650 davinci_i2c_read_reg(dev,
652 dev->buf_len--;
653 if (dev->buf_len)
656 davinci_i2c_write_reg(dev,
661 terminate_read(dev);
666 if (dev->buf_len) {
667 davinci_i2c_write_reg(dev, DAVINCI_I2C_DXR_REG,
668 *dev->buf++);
669 dev->buf_len--;
670 if (dev->buf_len)
673 w = davinci_i2c_read_reg(dev,
676 davinci_i2c_write_reg(dev,
681 terminate_write(dev);
686 davinci_i2c_write_reg(dev,
688 complete(&dev->cmd_complete);
692 dev_dbg(dev->dev, "Address as slave interrupt\n");
696 dev_warn(dev->dev, "Unrecognized irq stat %d\n", stat);
708 struct davinci_i2c_dev *dev;
710 dev = container_of(nb, struct davinci_i2c_dev, freq_transition);
712 i2c_lock_bus(&dev->adapter, I2C_LOCK_ROOT_ADAPTER);
714 davinci_i2c_reset_ctrl(dev, 0);
716 i2c_davinci_calc_clk_dividers(dev);
717 davinci_i2c_reset_ctrl(dev, 1);
719 i2c_unlock_bus(&dev->adapter, I2C_LOCK_ROOT_ADAPTER);
724 static inline int i2c_davinci_cpufreq_register(struct davinci_i2c_dev *dev)
726 dev->freq_transition.notifier_call = i2c_davinci_cpufreq_transition;
728 return cpufreq_register_notifier(&dev->freq_transition,
732 static inline void i2c_davinci_cpufreq_deregister(struct davinci_i2c_dev *dev)
734 cpufreq_unregister_notifier(&dev->freq_transition,
738 static inline int i2c_davinci_cpufreq_register(struct davinci_i2c_dev *dev)
743 static inline void i2c_davinci_cpufreq_deregister(struct davinci_i2c_dev *dev)
762 struct davinci_i2c_dev *dev;
772 dev_err(&pdev->dev,
777 dev = devm_kzalloc(&pdev->dev, sizeof(struct davinci_i2c_dev),
779 if (!dev) {
780 dev_err(&pdev->dev, "Memory allocation failed\n");
784 init_completion(&dev->cmd_complete);
786 dev->dev = &pdev->dev;
787 dev->irq = irq;
788 dev->pdata = dev_get_platdata(&pdev->dev);
789 platform_set_drvdata(pdev, dev);
791 if (!dev->pdata && pdev->dev.of_node) {
794 dev->pdata = devm_kzalloc(&pdev->dev,
796 if (!dev->pdata)
799 memcpy(dev->pdata, &davinci_i2c_platform_data_default,
801 if (!of_property_read_u32(pdev->dev.of_node, "clock-frequency",
803 dev->pdata->bus_freq = prop / 1000;
805 dev->pdata->has_pfunc =
806 of_property_read_bool(pdev->dev.of_node,
808 } else if (!dev->pdata) {
809 dev->pdata = &davinci_i2c_platform_data_default;
812 dev->clk = devm_clk_get(&pdev->dev, NULL);
813 if (IS_ERR(dev->clk))
814 return PTR_ERR(dev->clk);
816 dev->base = devm_platform_ioremap_resource(pdev, 0);
817 if (IS_ERR(dev->base)) {
818 return PTR_ERR(dev->base);
821 pm_runtime_set_autosuspend_delay(dev->dev,
823 pm_runtime_use_autosuspend(dev->dev);
825 pm_runtime_enable(dev->dev);
827 r = pm_runtime_get_sync(dev->dev);
829 dev_err(dev->dev, "failed to runtime_get device: %d\n", r);
830 pm_runtime_put_noidle(dev->dev);
834 i2c_davinci_init(dev);
836 r = devm_request_irq(&pdev->dev, dev->irq, i2c_davinci_isr, 0,
837 pdev->name, dev);
839 dev_err(&pdev->dev, "failure requesting irq %i\n", dev->irq);
843 r = i2c_davinci_cpufreq_register(dev);
845 dev_err(&pdev->dev, "failed to register cpufreq\n");
849 adap = &dev->adapter;
850 i2c_set_adapdata(adap, dev);
855 adap->dev.parent = &pdev->dev;
857 adap->dev.of_node = pdev->dev.of_node;
859 if (dev->pdata->has_pfunc)
861 else if (dev->pdata->gpio_recovery) {
864 rinfo->scl_gpiod = devm_gpiod_get(&pdev->dev, "scl",
870 rinfo->sda_gpiod = devm_gpiod_get(&pdev->dev, "sda", GPIOD_IN);
882 pm_runtime_mark_last_busy(dev->dev);
883 pm_runtime_put_autosuspend(dev->dev);
888 pm_runtime_dont_use_autosuspend(dev->dev);
889 pm_runtime_put_sync(dev->dev);
890 pm_runtime_disable(dev->dev);
897 struct davinci_i2c_dev *dev = platform_get_drvdata(pdev);
900 i2c_davinci_cpufreq_deregister(dev);
902 i2c_del_adapter(&dev->adapter);
904 ret = pm_runtime_get_sync(&pdev->dev);
906 pm_runtime_put_noidle(&pdev->dev);
910 davinci_i2c_write_reg(dev, DAVINCI_I2C_MDR_REG, 0);
912 pm_runtime_dont_use_autosuspend(dev->dev);
913 pm_runtime_put_sync(dev->dev);
914 pm_runtime_disable(dev->dev);
920 static int davinci_i2c_suspend(struct device *dev)
922 struct davinci_i2c_dev *i2c_dev = dev_get_drvdata(dev);
930 static int davinci_i2c_resume(struct device *dev)
932 struct davinci_i2c_dev *i2c_dev = dev_get_drvdata(dev);