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()
211 davinci_i2c_write_reg(dev, DAVINCI_I2C_PSC_REG, psc); in i2c_davinci_calc_clk_dividers()
212 davinci_i2c_write_reg(dev, DAVINCI_I2C_CLKH_REG, clkh); in i2c_davinci_calc_clk_dividers()
213 davinci_i2c_write_reg(dev, DAVINCI_I2C_CLKL_REG, clkl); in i2c_davinci_calc_clk_dividers()
215 dev_dbg(dev->dev, "input_clock = %d, CLK = %d\n", input_clock, clk); in i2c_davinci_calc_clk_dividers()
223 static int i2c_davinci_init(struct davinci_i2c_dev *dev) in i2c_davinci_init() argument
225 struct davinci_i2c_platform_data *pdata = dev->pdata; in i2c_davinci_init()
228 davinci_i2c_reset_ctrl(dev, 0); in i2c_davinci_init()
231 i2c_davinci_calc_clk_dividers(dev); in i2c_davinci_init()
236 davinci_i2c_write_reg(dev, DAVINCI_I2C_OAR_REG, 0x08); in i2c_davinci_init()
238 dev_dbg(dev->dev, "PSC = %d\n", in i2c_davinci_init()
239 davinci_i2c_read_reg(dev, DAVINCI_I2C_PSC_REG)); in i2c_davinci_init()
240 dev_dbg(dev->dev, "CLKL = %d\n", in i2c_davinci_init()
241 davinci_i2c_read_reg(dev, DAVINCI_I2C_CLKL_REG)); in i2c_davinci_init()
242 dev_dbg(dev->dev, "CLKH = %d\n", in i2c_davinci_init()
243 davinci_i2c_read_reg(dev, DAVINCI_I2C_CLKH_REG)); in i2c_davinci_init()
244 dev_dbg(dev->dev, "bus_freq = %dkHz, bus_delay = %d\n", in i2c_davinci_init()
249 davinci_i2c_reset_ctrl(dev, 1); in i2c_davinci_init()
252 davinci_i2c_write_reg(dev, DAVINCI_I2C_IMR_REG, I2C_DAVINCI_INTR_ALL); in i2c_davinci_init()
263 struct davinci_i2c_dev *dev = i2c_get_adapdata(adap); in davinci_i2c_prepare_recovery() local
266 davinci_i2c_write_reg(dev, DAVINCI_I2C_IMR_REG, 0); in davinci_i2c_prepare_recovery()
269 davinci_i2c_reset_ctrl(dev, 0); in davinci_i2c_prepare_recovery()
274 struct davinci_i2c_dev *dev = i2c_get_adapdata(adap); in davinci_i2c_unprepare_recovery() local
276 i2c_davinci_init(dev); in davinci_i2c_unprepare_recovery()
287 struct davinci_i2c_dev *dev = i2c_get_adapdata(adap); in davinci_i2c_set_scl() local
290 davinci_i2c_write_reg(dev, DAVINCI_I2C_DSET_REG, in davinci_i2c_set_scl()
293 davinci_i2c_write_reg(dev, DAVINCI_I2C_DCLR_REG, in davinci_i2c_set_scl()
299 struct davinci_i2c_dev *dev = i2c_get_adapdata(adap); in davinci_i2c_get_scl() local
303 val = davinci_i2c_read_reg(dev, DAVINCI_I2C_DIN_REG); in davinci_i2c_get_scl()
309 struct davinci_i2c_dev *dev = i2c_get_adapdata(adap); in davinci_i2c_get_sda() local
313 val = davinci_i2c_read_reg(dev, DAVINCI_I2C_DIN_REG); in davinci_i2c_get_sda()
319 struct davinci_i2c_dev *dev = i2c_get_adapdata(adap); in davinci_i2c_scl_prepare_recovery() local
324 davinci_i2c_write_reg(dev, DAVINCI_I2C_DIR_REG, DAVINCI_I2C_DIR_PDIR0); in davinci_i2c_scl_prepare_recovery()
327 davinci_i2c_write_reg(dev, DAVINCI_I2C_FUNC_REG, in davinci_i2c_scl_prepare_recovery()
333 struct davinci_i2c_dev *dev = i2c_get_adapdata(adap); in davinci_i2c_scl_unprepare_recovery() local
336 davinci_i2c_write_reg(dev, DAVINCI_I2C_FUNC_REG, 0); in davinci_i2c_scl_unprepare_recovery()
353 static int i2c_davinci_wait_bus_not_busy(struct davinci_i2c_dev *dev, in i2c_davinci_wait_bus_not_busy() argument
359 timeout = jiffies + dev->adapter.timeout; in i2c_davinci_wait_bus_not_busy()
360 while (davinci_i2c_read_reg(dev, DAVINCI_I2C_STR_REG) in i2c_davinci_wait_bus_not_busy()
364 dev_warn(dev->dev, in i2c_davinci_wait_bus_not_busy()
370 i2c_recover_bus(&dev->adapter); in i2c_davinci_wait_bus_not_busy()
387 struct davinci_i2c_dev *dev = i2c_get_adapdata(adap); in i2c_davinci_xfer_msg() local
388 struct davinci_i2c_platform_data *pdata = dev->pdata; in i2c_davinci_xfer_msg()
398 davinci_i2c_write_reg(dev, DAVINCI_I2C_SAR_REG, msg->addr); in i2c_davinci_xfer_msg()
400 dev->buf = msg->buf; in i2c_davinci_xfer_msg()
401 dev->buf_len = msg->len; in i2c_davinci_xfer_msg()
402 dev->stop = stop; in i2c_davinci_xfer_msg()
404 davinci_i2c_write_reg(dev, DAVINCI_I2C_CNT_REG, dev->buf_len); in i2c_davinci_xfer_msg()
406 reinit_completion(&dev->cmd_complete); in i2c_davinci_xfer_msg()
407 dev->cmd_err = 0; in i2c_davinci_xfer_msg()
421 w = davinci_i2c_read_reg(dev, DAVINCI_I2C_IMR_REG); in i2c_davinci_xfer_msg()
426 davinci_i2c_write_reg(dev, DAVINCI_I2C_IMR_REG, w); in i2c_davinci_xfer_msg()
428 dev->terminate = 0; in i2c_davinci_xfer_msg()
435 davinci_i2c_write_reg(dev, DAVINCI_I2C_MDR_REG, flag); in i2c_davinci_xfer_msg()
444 if ((!(msg->flags & I2C_M_RD)) && dev->buf_len) { in i2c_davinci_xfer_msg()
445 davinci_i2c_write_reg(dev, DAVINCI_I2C_DXR_REG, *dev->buf++); in i2c_davinci_xfer_msg()
446 dev->buf_len--; in i2c_davinci_xfer_msg()
453 davinci_i2c_write_reg(dev, DAVINCI_I2C_MDR_REG, flag); in i2c_davinci_xfer_msg()
455 time_left = wait_for_completion_timeout(&dev->cmd_complete, in i2c_davinci_xfer_msg()
456 dev->adapter.timeout); in i2c_davinci_xfer_msg()
458 dev_err(dev->dev, "controller timed out\n"); in i2c_davinci_xfer_msg()
460 dev->buf_len = 0; in i2c_davinci_xfer_msg()
463 if (dev->buf_len) { in i2c_davinci_xfer_msg()
467 dev_err(dev->dev, "abnormal termination buf_len=%i\n", in i2c_davinci_xfer_msg()
468 dev->buf_len); in i2c_davinci_xfer_msg()
469 dev->terminate = 1; in i2c_davinci_xfer_msg()
471 dev->buf_len = 0; in i2c_davinci_xfer_msg()
476 if (likely(!dev->cmd_err)) in i2c_davinci_xfer_msg()
480 if (dev->cmd_err & DAVINCI_I2C_STR_AL) { in i2c_davinci_xfer_msg()
481 i2c_davinci_init(dev); in i2c_davinci_xfer_msg()
485 if (dev->cmd_err & DAVINCI_I2C_STR_NACK) { in i2c_davinci_xfer_msg()
488 w = davinci_i2c_read_reg(dev, DAVINCI_I2C_MDR_REG); in i2c_davinci_xfer_msg()
490 davinci_i2c_write_reg(dev, DAVINCI_I2C_MDR_REG, w); in i2c_davinci_xfer_msg()
502 struct davinci_i2c_dev *dev = i2c_get_adapdata(adap); in i2c_davinci_xfer() local
506 dev_dbg(dev->dev, "%s: msgs: %d\n", __func__, num); in i2c_davinci_xfer()
508 ret = i2c_davinci_wait_bus_not_busy(dev, 1); in i2c_davinci_xfer()
510 dev_warn(dev->dev, "timeout waiting for bus ready\n"); in i2c_davinci_xfer()
516 dev_dbg(dev->dev, "%s [%d/%d] ret: %d\n", __func__, i + 1, num, in i2c_davinci_xfer()
523 complete(&dev->xfr_complete); in i2c_davinci_xfer()
534 static void terminate_read(struct davinci_i2c_dev *dev) in terminate_read() argument
536 u16 w = davinci_i2c_read_reg(dev, DAVINCI_I2C_MDR_REG); in terminate_read()
538 davinci_i2c_write_reg(dev, DAVINCI_I2C_MDR_REG, w); in terminate_read()
541 davinci_i2c_read_reg(dev, DAVINCI_I2C_DRR_REG); in terminate_read()
542 if (!dev->terminate) in terminate_read()
543 dev_err(dev->dev, "RDR IRQ while no data requested\n"); in terminate_read()
545 static void terminate_write(struct davinci_i2c_dev *dev) in terminate_write() argument
547 u16 w = davinci_i2c_read_reg(dev, DAVINCI_I2C_MDR_REG); in terminate_write()
549 davinci_i2c_write_reg(dev, DAVINCI_I2C_MDR_REG, w); in terminate_write()
551 if (!dev->terminate) in terminate_write()
552 dev_dbg(dev->dev, "TDR IRQ while no data to send\n"); in terminate_write()
561 struct davinci_i2c_dev *dev = dev_id; in i2c_davinci_isr() local
566 while ((stat = davinci_i2c_read_reg(dev, DAVINCI_I2C_IVR_REG))) { in i2c_davinci_isr()
567 dev_dbg(dev->dev, "%s: stat=0x%x\n", __func__, stat); in i2c_davinci_isr()
569 dev_warn(dev->dev, "Too much work in one IRQ\n"); in i2c_davinci_isr()
576 dev->cmd_err |= DAVINCI_I2C_STR_AL; in i2c_davinci_isr()
577 dev->buf_len = 0; in i2c_davinci_isr()
578 complete(&dev->cmd_complete); in i2c_davinci_isr()
582 dev->cmd_err |= DAVINCI_I2C_STR_NACK; in i2c_davinci_isr()
583 dev->buf_len = 0; in i2c_davinci_isr()
584 complete(&dev->cmd_complete); in i2c_davinci_isr()
588 davinci_i2c_write_reg(dev, in i2c_davinci_isr()
590 if (((dev->buf_len == 0) && (dev->stop != 0)) || in i2c_davinci_isr()
591 (dev->cmd_err & DAVINCI_I2C_STR_NACK)) { in i2c_davinci_isr()
592 w = davinci_i2c_read_reg(dev, in i2c_davinci_isr()
595 davinci_i2c_write_reg(dev, in i2c_davinci_isr()
598 complete(&dev->cmd_complete); in i2c_davinci_isr()
602 if (dev->buf_len) { in i2c_davinci_isr()
603 *dev->buf++ = in i2c_davinci_isr()
604 davinci_i2c_read_reg(dev, in i2c_davinci_isr()
606 dev->buf_len--; in i2c_davinci_isr()
607 if (dev->buf_len) in i2c_davinci_isr()
610 davinci_i2c_write_reg(dev, in i2c_davinci_isr()
615 terminate_read(dev); in i2c_davinci_isr()
620 if (dev->buf_len) { in i2c_davinci_isr()
621 davinci_i2c_write_reg(dev, DAVINCI_I2C_DXR_REG, in i2c_davinci_isr()
622 *dev->buf++); in i2c_davinci_isr()
623 dev->buf_len--; in i2c_davinci_isr()
624 if (dev->buf_len) in i2c_davinci_isr()
627 w = davinci_i2c_read_reg(dev, in i2c_davinci_isr()
630 davinci_i2c_write_reg(dev, in i2c_davinci_isr()
635 terminate_write(dev); in i2c_davinci_isr()
640 davinci_i2c_write_reg(dev, in i2c_davinci_isr()
642 complete(&dev->cmd_complete); in i2c_davinci_isr()
646 dev_dbg(dev->dev, "Address as slave interrupt\n"); in i2c_davinci_isr()
650 dev_warn(dev->dev, "Unrecognized irq stat %d\n", stat); in i2c_davinci_isr()
662 struct davinci_i2c_dev *dev; in i2c_davinci_cpufreq_transition() local
664 dev = container_of(nb, struct davinci_i2c_dev, freq_transition); in i2c_davinci_cpufreq_transition()
666 wait_for_completion(&dev->xfr_complete); in i2c_davinci_cpufreq_transition()
667 davinci_i2c_reset_ctrl(dev, 0); in i2c_davinci_cpufreq_transition()
669 i2c_davinci_calc_clk_dividers(dev); in i2c_davinci_cpufreq_transition()
670 davinci_i2c_reset_ctrl(dev, 1); in i2c_davinci_cpufreq_transition()
676 static inline int i2c_davinci_cpufreq_register(struct davinci_i2c_dev *dev) in i2c_davinci_cpufreq_register() argument
678 dev->freq_transition.notifier_call = i2c_davinci_cpufreq_transition; in i2c_davinci_cpufreq_register()
680 return cpufreq_register_notifier(&dev->freq_transition, in i2c_davinci_cpufreq_register()
684 static inline void i2c_davinci_cpufreq_deregister(struct davinci_i2c_dev *dev) in i2c_davinci_cpufreq_deregister() argument
686 cpufreq_unregister_notifier(&dev->freq_transition, in i2c_davinci_cpufreq_deregister()
690 static inline int i2c_davinci_cpufreq_register(struct davinci_i2c_dev *dev) in i2c_davinci_cpufreq_register() argument
695 static inline void i2c_davinci_cpufreq_deregister(struct davinci_i2c_dev *dev) in i2c_davinci_cpufreq_deregister() argument
713 struct davinci_i2c_dev *dev; in davinci_i2c_probe() local
723 dev_err(&pdev->dev, in davinci_i2c_probe()
728 dev = devm_kzalloc(&pdev->dev, sizeof(struct davinci_i2c_dev), in davinci_i2c_probe()
730 if (!dev) { in davinci_i2c_probe()
731 dev_err(&pdev->dev, "Memory allocation failed\n"); in davinci_i2c_probe()
735 init_completion(&dev->cmd_complete); in davinci_i2c_probe()
737 init_completion(&dev->xfr_complete); in davinci_i2c_probe()
739 dev->dev = &pdev->dev; in davinci_i2c_probe()
740 dev->irq = irq; in davinci_i2c_probe()
741 dev->pdata = dev_get_platdata(&pdev->dev); in davinci_i2c_probe()
742 platform_set_drvdata(pdev, dev); in davinci_i2c_probe()
744 if (!dev->pdata && pdev->dev.of_node) { in davinci_i2c_probe()
747 dev->pdata = devm_kzalloc(&pdev->dev, in davinci_i2c_probe()
749 if (!dev->pdata) in davinci_i2c_probe()
752 memcpy(dev->pdata, &davinci_i2c_platform_data_default, in davinci_i2c_probe()
754 if (!of_property_read_u32(pdev->dev.of_node, "clock-frequency", in davinci_i2c_probe()
756 dev->pdata->bus_freq = prop / 1000; in davinci_i2c_probe()
758 dev->pdata->has_pfunc = in davinci_i2c_probe()
759 of_property_read_bool(pdev->dev.of_node, in davinci_i2c_probe()
761 } else if (!dev->pdata) { in davinci_i2c_probe()
762 dev->pdata = &davinci_i2c_platform_data_default; in davinci_i2c_probe()
765 dev->clk = devm_clk_get(&pdev->dev, NULL); in davinci_i2c_probe()
766 if (IS_ERR(dev->clk)) in davinci_i2c_probe()
768 clk_prepare_enable(dev->clk); in davinci_i2c_probe()
771 dev->base = devm_ioremap_resource(&pdev->dev, mem); in davinci_i2c_probe()
772 if (IS_ERR(dev->base)) { in davinci_i2c_probe()
773 r = PTR_ERR(dev->base); in davinci_i2c_probe()
777 i2c_davinci_init(dev); in davinci_i2c_probe()
779 r = devm_request_irq(&pdev->dev, dev->irq, i2c_davinci_isr, 0, in davinci_i2c_probe()
780 pdev->name, dev); in davinci_i2c_probe()
782 dev_err(&pdev->dev, "failure requesting irq %i\n", dev->irq); in davinci_i2c_probe()
786 r = i2c_davinci_cpufreq_register(dev); in davinci_i2c_probe()
788 dev_err(&pdev->dev, "failed to register cpufreq\n"); in davinci_i2c_probe()
792 adap = &dev->adapter; in davinci_i2c_probe()
793 i2c_set_adapdata(adap, dev); in davinci_i2c_probe()
798 adap->dev.parent = &pdev->dev; in davinci_i2c_probe()
800 adap->dev.of_node = pdev->dev.of_node; in davinci_i2c_probe()
802 if (dev->pdata->has_pfunc) in davinci_i2c_probe()
804 else if (dev->pdata->scl_pin) { in davinci_i2c_probe()
806 adap->bus_recovery_info->scl_gpio = dev->pdata->scl_pin; in davinci_i2c_probe()
807 adap->bus_recovery_info->sda_gpio = dev->pdata->sda_pin; in davinci_i2c_probe()
813 dev_err(&pdev->dev, "failure adding adapter\n"); in davinci_i2c_probe()
820 clk_disable_unprepare(dev->clk); in davinci_i2c_probe()
821 dev->clk = NULL; in davinci_i2c_probe()
827 struct davinci_i2c_dev *dev = platform_get_drvdata(pdev); in davinci_i2c_remove() local
829 i2c_davinci_cpufreq_deregister(dev); in davinci_i2c_remove()
831 i2c_del_adapter(&dev->adapter); in davinci_i2c_remove()
833 clk_disable_unprepare(dev->clk); in davinci_i2c_remove()
834 dev->clk = NULL; in davinci_i2c_remove()
836 davinci_i2c_write_reg(dev, DAVINCI_I2C_MDR_REG, 0); in davinci_i2c_remove()
842 static int davinci_i2c_suspend(struct device *dev) in davinci_i2c_suspend() argument
844 struct platform_device *pdev = to_platform_device(dev); in davinci_i2c_suspend()
854 static int davinci_i2c_resume(struct device *dev) in davinci_i2c_resume() argument
856 struct platform_device *pdev = to_platform_device(dev); in davinci_i2c_resume()