Lines Matching refs:dev
169 static int stu300_init_hw(struct stu300_dev *dev);
190 static void stu300_irq_enable(struct stu300_dev *dev)
193 val = stu300_r8(dev->virtbase + I2C_CR);
196 stu300_wr8(val, dev->virtbase + I2C_CR);
197 stu300_wr8(val, dev->virtbase + I2C_CR);
200 static void stu300_irq_disable(struct stu300_dev *dev)
203 val = stu300_r8(dev->virtbase + I2C_CR);
206 stu300_wr8(val, dev->virtbase + I2C_CR);
207 stu300_wr8(val, dev->virtbase + I2C_CR);
223 static int stu300_event_occurred(struct stu300_dev *dev,
229 status1 = stu300_r8(dev->virtbase + I2C_SR1);
235 status2 = stu300_r8(dev->virtbase + I2C_SR2);
238 stu300_irq_disable(dev);
242 dev->cmd_err = STU300_ERROR_ACKNOWLEDGE_FAILURE;
245 dev->cmd_err = STU300_ERROR_BUS_ERROR;
248 dev->cmd_err = STU300_ERROR_ARBITRATION_LOST;
292 dev->cmd_err = STU300_ERROR_UNKNOWN;
293 dev_err(&dev->pdev->dev,
301 struct stu300_dev *dev = data;
305 clk_enable(dev->clk);
308 spin_lock(&dev->cmd_issue_lock);
310 res = stu300_event_occurred(dev, dev->cmd_event);
311 if (res || dev->cmd_err != STU300_ERROR_NONE)
312 complete(&dev->cmd_complete);
314 spin_unlock(&dev->cmd_issue_lock);
316 clk_disable(dev->clk);
325 static int stu300_start_and_await_event(struct stu300_dev *dev,
332 spin_lock_irq(&dev->cmd_issue_lock);
333 init_completion(&dev->cmd_complete);
334 dev->cmd_err = STU300_ERROR_NONE;
335 dev->cmd_event = mr_event;
336 spin_unlock_irq(&dev->cmd_issue_lock);
340 stu300_wr8(cr_value, dev->virtbase + I2C_CR);
341 ret = wait_for_completion_interruptible_timeout(&dev->cmd_complete,
344 dev_err(&dev->pdev->dev,
351 dev_err(&dev->pdev->dev, "controller timed out "
353 (void) stu300_init_hw(dev);
357 if (dev->cmd_err != STU300_ERROR_NONE) {
358 dev_err(&dev->pdev->dev, "controller (start) "
360 dev->cmd_err, mr_event);
361 (void) stu300_init_hw(dev);
372 static int stu300_await_event(struct stu300_dev *dev,
378 spin_lock_irq(&dev->cmd_issue_lock);
379 dev->cmd_err = STU300_ERROR_NONE;
380 dev->cmd_event = mr_event;
382 init_completion(&dev->cmd_complete);
385 stu300_irq_enable(dev);
388 spin_unlock_irq(&dev->cmd_issue_lock);
390 ret = wait_for_completion_interruptible_timeout(&dev->cmd_complete,
393 dev_err(&dev->pdev->dev,
401 dev_err(&dev->pdev->dev, "controller "
404 (void) stu300_init_hw(dev);
409 if (dev->cmd_err != STU300_ERROR_NONE) {
411 dev_err(&dev->pdev->dev, "controller "
413 "reinit hardware\n", dev->cmd_err, mr_event);
414 (void) stu300_init_hw(dev);
426 static int stu300_wait_while_busy(struct stu300_dev *dev)
436 if ((stu300_r8(dev->virtbase + I2C_SR1) &
442 dev_err(&dev->pdev->dev, "transaction timed out "
446 dev_err(&dev->pdev->dev, "base address = "
447 "0x%p, reinit hardware\n", dev->virtbase);
449 (void) stu300_init_hw(dev);
452 dev_err(&dev->pdev->dev, "giving up after %d attempts "
477 static int stu300_set_clk(struct stu300_dev *dev, unsigned long clkrate)
489 dev_err(&dev->pdev->dev, "too %s clock rate requested "
495 dev->virtbase + I2C_OAR2);
497 dev_dbg(&dev->pdev->dev, "Clock rate %lu Hz, I2C bus speed %d Hz "
498 "virtbase %p\n", clkrate, dev->speed, dev->virtbase);
500 if (dev->speed > I2C_MAX_STANDARD_MODE_FREQ)
502 val = ((clkrate/dev->speed) - 9)/3 + 1;
505 val = ((clkrate/dev->speed) - 7)/2 + 1;
509 dev_err(&dev->pdev->dev, "too low clock rate (%lu Hz).\n",
516 dev_err(&dev->pdev->dev, "too high clock rate (%lu Hz).\n",
521 if (dev->speed > I2C_MAX_STANDARD_MODE_FREQ) {
524 dev->virtbase + I2C_CCR);
525 dev_dbg(&dev->pdev->dev, "set clock divider to 0x%08x, "
530 dev->virtbase + I2C_CCR);
531 dev_dbg(&dev->pdev->dev, "set clock divider to "
537 dev->virtbase + I2C_ECCR);
543 static int stu300_init_hw(struct stu300_dev *dev)
550 stu300_wr8(0x00, dev->virtbase + I2C_CR);
555 stu300_wr8(0x00, dev->virtbase + I2C_OAR1);
563 clkrate = clk_get_rate(dev->clk);
564 ret = stu300_set_clk(dev, clkrate);
573 dev->virtbase + I2C_CR);
575 dev->virtbase + I2C_CR);
577 dummy = stu300_r8(dev->virtbase + I2C_SR2);
578 dummy = stu300_r8(dev->virtbase + I2C_SR1);
586 static int stu300_send_address(struct stu300_dev *dev,
605 dev_dbg(&dev->pdev->dev, "read resend\n");
607 dev_dbg(&dev->pdev->dev, "write resend\n");
610 stu300_wr8(val, dev->virtbase + I2C_DR);
614 ret = stu300_await_event(dev, STU300_EVENT_9);
621 stu300_wr8(val, dev->virtbase + I2C_DR);
630 dev_dbg(&dev->pdev->dev, "await event 6\n");
631 ret = stu300_await_event(dev, STU300_EVENT_6);
637 val = stu300_r8(dev->virtbase + I2C_CR);
639 stu300_wr8(val, dev->virtbase + I2C_CR);
652 struct stu300_dev *dev = i2c_get_adapdata(adap);
654 clk_enable(dev->clk);
658 dev_dbg(&dev->pdev->dev, "I2C message to: 0x%04x, len: %d, "
671 dev_dbg(&dev->pdev->dev, "wait while busy\n");
673 ret = stu300_wait_while_busy(dev);
678 dev_dbg(&dev->pdev->dev, "re-int hw\n");
683 ret = stu300_init_hw(dev);
698 dev_dbg(&dev->pdev->dev, "send start event\n");
699 ret = stu300_start_and_await_event(dev, cr,
704 dev_dbg(&dev->pdev->dev, "send address\n");
708 ret = stu300_send_address(dev, msg, attempts != 0);
712 dev_dbg(&dev->pdev->dev, "failed sending address, "
714 attempts, dev->msg_index, dev->msg_len);
720 dev_dbg(&dev->pdev->dev, "managed to get address "
723 dev_dbg(&dev->pdev->dev, "I give up, tried %d times "
744 dev->virtbase + I2C_CR);
747 ret = stu300_await_event(dev, STU300_EVENT_7);
751 msg->buf[i] = (u8) stu300_r8(dev->virtbase + I2C_DR);
758 dev->virtbase + I2C_DR);
760 ret = stu300_await_event(dev, STU300_EVENT_8);
763 dev_err(&dev->pdev->dev, "error awaiting "
770 if (stu300_r8(dev->virtbase + I2C_SR2) &
772 dev_err(&dev->pdev->dev, "I2C payload "
782 stu300_wr8(val, dev->virtbase + I2C_CR);
787 ret = stu300_wait_while_busy(dev);
789 dev_err(&dev->pdev->dev, "timeout waiting for transfer "
795 val = stu300_r8(dev->virtbase + I2C_SR2);
796 val = stu300_r8(dev->virtbase + I2C_SR1);
801 stu300_wr8(0x00, dev->virtbase + I2C_CR);
802 clk_disable(dev->clk);
812 struct stu300_dev *dev = i2c_get_adapdata(adap);
813 dev->msg_len = num;
823 dev->msg_index = i;
839 WARN(1, "%s: atomic transfers not implemented\n", dev_name(&adap->dev));
861 struct stu300_dev *dev;
866 dev = devm_kzalloc(&pdev->dev, sizeof(struct stu300_dev), GFP_KERNEL);
867 if (!dev)
871 dev->clk = devm_clk_get(&pdev->dev, NULL);
872 if (IS_ERR(dev->clk)) {
873 dev_err(&pdev->dev, "could not retrieve i2c bus clock\n");
874 return PTR_ERR(dev->clk);
877 dev->pdev = pdev;
878 dev->virtbase = devm_platform_ioremap_resource(pdev, 0);
879 dev_dbg(&pdev->dev, "initialize bus device I2C%d on virtual "
880 "base %p\n", bus_nr, dev->virtbase);
881 if (IS_ERR(dev->virtbase))
882 return PTR_ERR(dev->virtbase);
884 dev->irq = platform_get_irq(pdev, 0);
885 ret = devm_request_irq(&pdev->dev, dev->irq, stu300_irh, 0, NAME, dev);
889 dev->speed = scl_frequency;
891 clk_prepare_enable(dev->clk);
892 ret = stu300_init_hw(dev);
893 clk_disable(dev->clk);
895 dev_err(&dev->pdev->dev, "error initializing hardware.\n");
900 spin_lock_init(&dev->cmd_issue_lock);
901 dev->cmd_event = STU300_EVENT_NONE;
902 dev->cmd_err = STU300_ERROR_NONE;
904 adap = &dev->adapter;
912 adap->dev.parent = &pdev->dev;
913 adap->dev.of_node = pdev->dev.of_node;
916 i2c_set_adapdata(adap, dev);
923 platform_set_drvdata(pdev, dev);
924 dev_info(&pdev->dev, "ST DDC I2C @ %p, irq %d\n",
925 dev->virtbase, dev->irq);
933 struct stu300_dev *dev = dev_get_drvdata(device);
936 stu300_wr8(0x00, dev->virtbase + I2C_CR);
943 struct stu300_dev *dev = dev_get_drvdata(device);
945 clk_enable(dev->clk);
946 ret = stu300_init_hw(dev);
947 clk_disable(dev->clk);
962 struct stu300_dev *dev = platform_get_drvdata(pdev);
964 i2c_del_adapter(&dev->adapter);
966 stu300_wr8(0x00, dev->virtbase + I2C_CR);