Lines Matching refs:dev
126 struct device *dev; member
175 static void i2c_davinci_calc_clk_dividers(struct davinci_i2c_dev *dev) in i2c_davinci_calc_clk_dividers() argument
177 struct davinci_i2c_platform_data *pdata = dev->pdata; in i2c_davinci_calc_clk_dividers()
183 u32 input_clock = clk_get_rate(dev->clk); in i2c_davinci_calc_clk_dividers()
184 struct device_node *of_node = dev->dev->of_node; in i2c_davinci_calc_clk_dividers()
246 davinci_i2c_write_reg(dev, DAVINCI_I2C_PSC_REG, psc); in i2c_davinci_calc_clk_dividers()
247 davinci_i2c_write_reg(dev, DAVINCI_I2C_CLKH_REG, clkh); in i2c_davinci_calc_clk_dividers()
248 davinci_i2c_write_reg(dev, DAVINCI_I2C_CLKL_REG, clkl); in i2c_davinci_calc_clk_dividers()
250 dev_dbg(dev->dev, "input_clock = %d, CLK = %d\n", input_clock, clk); in i2c_davinci_calc_clk_dividers()
258 static int i2c_davinci_init(struct davinci_i2c_dev *dev) in i2c_davinci_init() argument
260 struct davinci_i2c_platform_data *pdata = dev->pdata; in i2c_davinci_init()
263 davinci_i2c_reset_ctrl(dev, 0); in i2c_davinci_init()
266 i2c_davinci_calc_clk_dividers(dev); in i2c_davinci_init()
271 davinci_i2c_write_reg(dev, DAVINCI_I2C_OAR_REG, DAVINCI_I2C_OWN_ADDRESS); in i2c_davinci_init()
273 dev_dbg(dev->dev, "PSC = %d\n", in i2c_davinci_init()
274 davinci_i2c_read_reg(dev, DAVINCI_I2C_PSC_REG)); in i2c_davinci_init()
275 dev_dbg(dev->dev, "CLKL = %d\n", in i2c_davinci_init()
276 davinci_i2c_read_reg(dev, DAVINCI_I2C_CLKL_REG)); in i2c_davinci_init()
277 dev_dbg(dev->dev, "CLKH = %d\n", in i2c_davinci_init()
278 davinci_i2c_read_reg(dev, DAVINCI_I2C_CLKH_REG)); in i2c_davinci_init()
279 dev_dbg(dev->dev, "bus_freq = %dkHz, bus_delay = %d\n", in i2c_davinci_init()
284 davinci_i2c_reset_ctrl(dev, 1); in i2c_davinci_init()
287 davinci_i2c_write_reg(dev, DAVINCI_I2C_IMR_REG, I2C_DAVINCI_INTR_ALL); in i2c_davinci_init()
298 struct davinci_i2c_dev *dev = i2c_get_adapdata(adap); in davinci_i2c_prepare_recovery() local
301 davinci_i2c_write_reg(dev, DAVINCI_I2C_IMR_REG, 0); in davinci_i2c_prepare_recovery()
304 davinci_i2c_reset_ctrl(dev, 0); in davinci_i2c_prepare_recovery()
309 struct davinci_i2c_dev *dev = i2c_get_adapdata(adap); in davinci_i2c_unprepare_recovery() local
311 i2c_davinci_init(dev); in davinci_i2c_unprepare_recovery()
322 struct davinci_i2c_dev *dev = i2c_get_adapdata(adap); in davinci_i2c_set_scl() local
325 davinci_i2c_write_reg(dev, DAVINCI_I2C_DSET_REG, in davinci_i2c_set_scl()
328 davinci_i2c_write_reg(dev, DAVINCI_I2C_DCLR_REG, in davinci_i2c_set_scl()
334 struct davinci_i2c_dev *dev = i2c_get_adapdata(adap); in davinci_i2c_get_scl() local
338 val = davinci_i2c_read_reg(dev, DAVINCI_I2C_DIN_REG); in davinci_i2c_get_scl()
344 struct davinci_i2c_dev *dev = i2c_get_adapdata(adap); in davinci_i2c_get_sda() local
348 val = davinci_i2c_read_reg(dev, DAVINCI_I2C_DIN_REG); in davinci_i2c_get_sda()
354 struct davinci_i2c_dev *dev = i2c_get_adapdata(adap); in davinci_i2c_scl_prepare_recovery() local
359 davinci_i2c_write_reg(dev, DAVINCI_I2C_DIR_REG, DAVINCI_I2C_DIR_PDIR0); in davinci_i2c_scl_prepare_recovery()
362 davinci_i2c_write_reg(dev, DAVINCI_I2C_FUNC_REG, in davinci_i2c_scl_prepare_recovery()
368 struct davinci_i2c_dev *dev = i2c_get_adapdata(adap); in davinci_i2c_scl_unprepare_recovery() local
371 davinci_i2c_write_reg(dev, DAVINCI_I2C_FUNC_REG, 0); in davinci_i2c_scl_unprepare_recovery()
388 static int i2c_davinci_wait_bus_not_busy(struct davinci_i2c_dev *dev) in i2c_davinci_wait_bus_not_busy() argument
390 unsigned long timeout = jiffies + dev->adapter.timeout; in i2c_davinci_wait_bus_not_busy()
393 if (!(davinci_i2c_read_reg(dev, DAVINCI_I2C_STR_REG) & DAVINCI_I2C_STR_BB)) in i2c_davinci_wait_bus_not_busy()
398 dev_warn(dev->dev, "timeout waiting for bus ready\n"); in i2c_davinci_wait_bus_not_busy()
399 i2c_recover_bus(&dev->adapter); in i2c_davinci_wait_bus_not_busy()
405 if (davinci_i2c_read_reg(dev, DAVINCI_I2C_STR_REG) & DAVINCI_I2C_STR_BB) in i2c_davinci_wait_bus_not_busy()
418 struct davinci_i2c_dev *dev = i2c_get_adapdata(adap); in i2c_davinci_xfer_msg() local
419 struct davinci_i2c_platform_data *pdata = dev->pdata; in i2c_davinci_xfer_msg()
425 dev_warn(dev->dev, "transfer to own address aborted\n"); in i2c_davinci_xfer_msg()
434 davinci_i2c_write_reg(dev, DAVINCI_I2C_SAR_REG, msg->addr); in i2c_davinci_xfer_msg()
436 dev->buf = msg->buf; in i2c_davinci_xfer_msg()
437 dev->buf_len = msg->len; in i2c_davinci_xfer_msg()
438 dev->stop = stop; in i2c_davinci_xfer_msg()
440 davinci_i2c_write_reg(dev, DAVINCI_I2C_CNT_REG, dev->buf_len); in i2c_davinci_xfer_msg()
442 reinit_completion(&dev->cmd_complete); in i2c_davinci_xfer_msg()
443 dev->cmd_err = 0; in i2c_davinci_xfer_msg()
457 w = davinci_i2c_read_reg(dev, DAVINCI_I2C_IMR_REG); in i2c_davinci_xfer_msg()
462 davinci_i2c_write_reg(dev, DAVINCI_I2C_IMR_REG, w); in i2c_davinci_xfer_msg()
464 dev->terminate = 0; in i2c_davinci_xfer_msg()
471 davinci_i2c_write_reg(dev, DAVINCI_I2C_MDR_REG, flag); in i2c_davinci_xfer_msg()
480 if ((!(msg->flags & I2C_M_RD)) && dev->buf_len) { in i2c_davinci_xfer_msg()
481 davinci_i2c_write_reg(dev, DAVINCI_I2C_DXR_REG, *dev->buf++); in i2c_davinci_xfer_msg()
482 dev->buf_len--; in i2c_davinci_xfer_msg()
489 davinci_i2c_write_reg(dev, DAVINCI_I2C_MDR_REG, flag); in i2c_davinci_xfer_msg()
491 time_left = wait_for_completion_timeout(&dev->cmd_complete, in i2c_davinci_xfer_msg()
492 dev->adapter.timeout); in i2c_davinci_xfer_msg()
494 dev_err(dev->dev, "controller timed out\n"); in i2c_davinci_xfer_msg()
496 dev->buf_len = 0; in i2c_davinci_xfer_msg()
499 if (dev->buf_len) { in i2c_davinci_xfer_msg()
503 dev_err(dev->dev, "abnormal termination buf_len=%i\n", in i2c_davinci_xfer_msg()
504 dev->buf_len); in i2c_davinci_xfer_msg()
505 dev->terminate = 1; in i2c_davinci_xfer_msg()
507 dev->buf_len = 0; in i2c_davinci_xfer_msg()
512 if (likely(!dev->cmd_err)) in i2c_davinci_xfer_msg()
516 if (dev->cmd_err & DAVINCI_I2C_STR_AL) { in i2c_davinci_xfer_msg()
517 i2c_davinci_init(dev); in i2c_davinci_xfer_msg()
521 if (dev->cmd_err & DAVINCI_I2C_STR_NACK) { in i2c_davinci_xfer_msg()
524 w = davinci_i2c_read_reg(dev, DAVINCI_I2C_MDR_REG); in i2c_davinci_xfer_msg()
526 davinci_i2c_write_reg(dev, DAVINCI_I2C_MDR_REG, w); in i2c_davinci_xfer_msg()
538 struct davinci_i2c_dev *dev = i2c_get_adapdata(adap); in i2c_davinci_xfer() local
542 dev_dbg(dev->dev, "%s: msgs: %d\n", __func__, num); in i2c_davinci_xfer()
544 ret = i2c_davinci_wait_bus_not_busy(dev); in i2c_davinci_xfer()
546 dev_warn(dev->dev, "timeout waiting for bus ready\n"); in i2c_davinci_xfer()
552 dev_dbg(dev->dev, "%s [%d/%d] ret: %d\n", __func__, i + 1, num, in i2c_davinci_xfer()
559 complete(&dev->xfr_complete); in i2c_davinci_xfer()
570 static void terminate_read(struct davinci_i2c_dev *dev) in terminate_read() argument
572 u16 w = davinci_i2c_read_reg(dev, DAVINCI_I2C_MDR_REG); in terminate_read()
574 davinci_i2c_write_reg(dev, DAVINCI_I2C_MDR_REG, w); in terminate_read()
577 davinci_i2c_read_reg(dev, DAVINCI_I2C_DRR_REG); in terminate_read()
578 if (!dev->terminate) in terminate_read()
579 dev_err(dev->dev, "RDR IRQ while no data requested\n"); in terminate_read()
581 static void terminate_write(struct davinci_i2c_dev *dev) in terminate_write() argument
583 u16 w = davinci_i2c_read_reg(dev, DAVINCI_I2C_MDR_REG); in terminate_write()
585 davinci_i2c_write_reg(dev, DAVINCI_I2C_MDR_REG, w); in terminate_write()
587 if (!dev->terminate) in terminate_write()
588 dev_dbg(dev->dev, "TDR IRQ while no data to send\n"); in terminate_write()
597 struct davinci_i2c_dev *dev = dev_id; in i2c_davinci_isr() local
602 while ((stat = davinci_i2c_read_reg(dev, DAVINCI_I2C_IVR_REG))) { in i2c_davinci_isr()
603 dev_dbg(dev->dev, "%s: stat=0x%x\n", __func__, stat); in i2c_davinci_isr()
605 dev_warn(dev->dev, "Too much work in one IRQ\n"); in i2c_davinci_isr()
612 dev->cmd_err |= DAVINCI_I2C_STR_AL; in i2c_davinci_isr()
613 dev->buf_len = 0; in i2c_davinci_isr()
614 complete(&dev->cmd_complete); in i2c_davinci_isr()
618 dev->cmd_err |= DAVINCI_I2C_STR_NACK; in i2c_davinci_isr()
619 dev->buf_len = 0; in i2c_davinci_isr()
620 complete(&dev->cmd_complete); in i2c_davinci_isr()
624 davinci_i2c_write_reg(dev, in i2c_davinci_isr()
626 if (((dev->buf_len == 0) && (dev->stop != 0)) || in i2c_davinci_isr()
627 (dev->cmd_err & DAVINCI_I2C_STR_NACK)) { in i2c_davinci_isr()
628 w = davinci_i2c_read_reg(dev, in i2c_davinci_isr()
631 davinci_i2c_write_reg(dev, in i2c_davinci_isr()
634 complete(&dev->cmd_complete); in i2c_davinci_isr()
638 if (dev->buf_len) { in i2c_davinci_isr()
639 *dev->buf++ = in i2c_davinci_isr()
640 davinci_i2c_read_reg(dev, in i2c_davinci_isr()
642 dev->buf_len--; in i2c_davinci_isr()
643 if (dev->buf_len) in i2c_davinci_isr()
646 davinci_i2c_write_reg(dev, in i2c_davinci_isr()
651 terminate_read(dev); in i2c_davinci_isr()
656 if (dev->buf_len) { in i2c_davinci_isr()
657 davinci_i2c_write_reg(dev, DAVINCI_I2C_DXR_REG, in i2c_davinci_isr()
658 *dev->buf++); in i2c_davinci_isr()
659 dev->buf_len--; in i2c_davinci_isr()
660 if (dev->buf_len) in i2c_davinci_isr()
663 w = davinci_i2c_read_reg(dev, in i2c_davinci_isr()
666 davinci_i2c_write_reg(dev, in i2c_davinci_isr()
671 terminate_write(dev); in i2c_davinci_isr()
676 davinci_i2c_write_reg(dev, in i2c_davinci_isr()
678 complete(&dev->cmd_complete); in i2c_davinci_isr()
682 dev_dbg(dev->dev, "Address as slave interrupt\n"); in i2c_davinci_isr()
686 dev_warn(dev->dev, "Unrecognized irq stat %d\n", stat); in i2c_davinci_isr()
698 struct davinci_i2c_dev *dev; in i2c_davinci_cpufreq_transition() local
700 dev = container_of(nb, struct davinci_i2c_dev, freq_transition); in i2c_davinci_cpufreq_transition()
702 wait_for_completion(&dev->xfr_complete); in i2c_davinci_cpufreq_transition()
703 davinci_i2c_reset_ctrl(dev, 0); in i2c_davinci_cpufreq_transition()
705 i2c_davinci_calc_clk_dividers(dev); in i2c_davinci_cpufreq_transition()
706 davinci_i2c_reset_ctrl(dev, 1); in i2c_davinci_cpufreq_transition()
712 static inline int i2c_davinci_cpufreq_register(struct davinci_i2c_dev *dev) in i2c_davinci_cpufreq_register() argument
714 dev->freq_transition.notifier_call = i2c_davinci_cpufreq_transition; in i2c_davinci_cpufreq_register()
716 return cpufreq_register_notifier(&dev->freq_transition, in i2c_davinci_cpufreq_register()
720 static inline void i2c_davinci_cpufreq_deregister(struct davinci_i2c_dev *dev) in i2c_davinci_cpufreq_deregister() argument
722 cpufreq_unregister_notifier(&dev->freq_transition, in i2c_davinci_cpufreq_deregister()
726 static inline int i2c_davinci_cpufreq_register(struct davinci_i2c_dev *dev) in i2c_davinci_cpufreq_register() argument
731 static inline void i2c_davinci_cpufreq_deregister(struct davinci_i2c_dev *dev) in i2c_davinci_cpufreq_deregister() argument
750 struct davinci_i2c_dev *dev; in davinci_i2c_probe() local
760 dev_err(&pdev->dev, in davinci_i2c_probe()
765 dev = devm_kzalloc(&pdev->dev, sizeof(struct davinci_i2c_dev), in davinci_i2c_probe()
767 if (!dev) { in davinci_i2c_probe()
768 dev_err(&pdev->dev, "Memory allocation failed\n"); in davinci_i2c_probe()
772 init_completion(&dev->cmd_complete); in davinci_i2c_probe()
774 init_completion(&dev->xfr_complete); in davinci_i2c_probe()
776 dev->dev = &pdev->dev; in davinci_i2c_probe()
777 dev->irq = irq; in davinci_i2c_probe()
778 dev->pdata = dev_get_platdata(&pdev->dev); in davinci_i2c_probe()
779 platform_set_drvdata(pdev, dev); in davinci_i2c_probe()
781 if (!dev->pdata && pdev->dev.of_node) { in davinci_i2c_probe()
784 dev->pdata = devm_kzalloc(&pdev->dev, in davinci_i2c_probe()
786 if (!dev->pdata) in davinci_i2c_probe()
789 memcpy(dev->pdata, &davinci_i2c_platform_data_default, in davinci_i2c_probe()
791 if (!of_property_read_u32(pdev->dev.of_node, "clock-frequency", in davinci_i2c_probe()
793 dev->pdata->bus_freq = prop / 1000; in davinci_i2c_probe()
795 dev->pdata->has_pfunc = in davinci_i2c_probe()
796 of_property_read_bool(pdev->dev.of_node, in davinci_i2c_probe()
798 } else if (!dev->pdata) { in davinci_i2c_probe()
799 dev->pdata = &davinci_i2c_platform_data_default; in davinci_i2c_probe()
802 dev->clk = devm_clk_get(&pdev->dev, NULL); in davinci_i2c_probe()
803 if (IS_ERR(dev->clk)) in davinci_i2c_probe()
805 clk_prepare_enable(dev->clk); in davinci_i2c_probe()
808 dev->base = devm_ioremap_resource(&pdev->dev, mem); in davinci_i2c_probe()
809 if (IS_ERR(dev->base)) { in davinci_i2c_probe()
810 r = PTR_ERR(dev->base); in davinci_i2c_probe()
814 i2c_davinci_init(dev); in davinci_i2c_probe()
816 r = devm_request_irq(&pdev->dev, dev->irq, i2c_davinci_isr, 0, in davinci_i2c_probe()
817 pdev->name, dev); in davinci_i2c_probe()
819 dev_err(&pdev->dev, "failure requesting irq %i\n", dev->irq); in davinci_i2c_probe()
823 r = i2c_davinci_cpufreq_register(dev); in davinci_i2c_probe()
825 dev_err(&pdev->dev, "failed to register cpufreq\n"); in davinci_i2c_probe()
829 adap = &dev->adapter; in davinci_i2c_probe()
830 i2c_set_adapdata(adap, dev); in davinci_i2c_probe()
835 adap->dev.parent = &pdev->dev; in davinci_i2c_probe()
837 adap->dev.of_node = pdev->dev.of_node; in davinci_i2c_probe()
839 if (dev->pdata->has_pfunc) in davinci_i2c_probe()
841 else if (dev->pdata->scl_pin) { in davinci_i2c_probe()
843 adap->bus_recovery_info->scl_gpio = dev->pdata->scl_pin; in davinci_i2c_probe()
844 adap->bus_recovery_info->sda_gpio = dev->pdata->sda_pin; in davinci_i2c_probe()
850 dev_err(&pdev->dev, "failure adding adapter\n"); in davinci_i2c_probe()
857 clk_disable_unprepare(dev->clk); in davinci_i2c_probe()
858 dev->clk = NULL; in davinci_i2c_probe()
864 struct davinci_i2c_dev *dev = platform_get_drvdata(pdev); in davinci_i2c_remove() local
866 i2c_davinci_cpufreq_deregister(dev); in davinci_i2c_remove()
868 i2c_del_adapter(&dev->adapter); in davinci_i2c_remove()
870 clk_disable_unprepare(dev->clk); in davinci_i2c_remove()
871 dev->clk = NULL; in davinci_i2c_remove()
873 davinci_i2c_write_reg(dev, DAVINCI_I2C_MDR_REG, 0); in davinci_i2c_remove()
879 static int davinci_i2c_suspend(struct device *dev) in davinci_i2c_suspend() argument
881 struct platform_device *pdev = to_platform_device(dev); in davinci_i2c_suspend()
891 static int davinci_i2c_resume(struct device *dev) in davinci_i2c_resume() argument
893 struct platform_device *pdev = to_platform_device(dev); in davinci_i2c_resume()