• Home
  • Raw
  • Download

Lines Matching refs:dev

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