Lines Matching refs:dev

169 static void bcm_kona_i2c_send_cmd_to_ctrl(struct bcm_kona_i2c_dev *dev,
172 dev_dbg(dev->device, "%s, %d\n", __func__, cmd);
178 dev->base + CS_OFFSET);
185 dev->base + CS_OFFSET);
192 dev->base + CS_OFFSET);
198 dev->base + CS_OFFSET);
202 dev_err(dev->device, "Unknown command %d\n", cmd);
206 static void bcm_kona_i2c_enable_clock(struct bcm_kona_i2c_dev *dev)
208 writel(readl(dev->base + CLKEN_OFFSET) | CLKEN_CLKEN_MASK,
209 dev->base + CLKEN_OFFSET);
212 static void bcm_kona_i2c_disable_clock(struct bcm_kona_i2c_dev *dev)
214 writel(readl(dev->base + CLKEN_OFFSET) & ~CLKEN_CLKEN_MASK,
215 dev->base + CLKEN_OFFSET);
220 struct bcm_kona_i2c_dev *dev = devid;
221 uint32_t status = readl(dev->base + ISR_OFFSET);
229 dev->base + TXFCR_OFFSET);
231 writel(status & ~ISR_RESERVED_MASK, dev->base + ISR_OFFSET);
232 complete(&dev->done);
238 static int bcm_kona_i2c_wait_if_busy(struct bcm_kona_i2c_dev *dev)
242 while (readl(dev->base + ISR_OFFSET) & ISR_CMDBUSY_MASK)
244 dev_err(dev->device, "CMDBUSY timeout\n");
252 static int bcm_kona_send_i2c_cmd(struct bcm_kona_i2c_dev *dev,
259 rc = bcm_kona_i2c_wait_if_busy(dev);
264 writel(IER_I2C_INT_EN_MASK, dev->base + IER_OFFSET);
267 reinit_completion(&dev->done);
270 bcm_kona_i2c_send_cmd_to_ctrl(dev, cmd);
273 time_left = wait_for_completion_timeout(&dev->done, time_left);
276 writel(0, dev->base + IER_OFFSET);
279 dev_err(dev->device, "controller timed out\n");
284 bcm_kona_i2c_send_cmd_to_ctrl(dev, BCM_CMD_NOACTION);
290 static int bcm_kona_i2c_read_fifo_single(struct bcm_kona_i2c_dev *dev,
297 reinit_completion(&dev->done);
300 writel(IER_READ_COMPLETE_INT_MASK, dev->base + IER_OFFSET);
305 dev->base + RXFCR_OFFSET);
308 time_left = wait_for_completion_timeout(&dev->done, time_left);
311 writel(0, dev->base + IER_OFFSET);
314 dev_err(dev->device, "RX FIFO time out\n");
320 *buf = readl(dev->base + RXFIFORDOUT_OFFSET);
326 static int bcm_kona_i2c_read_fifo(struct bcm_kona_i2c_dev *dev,
342 rc = bcm_kona_i2c_read_fifo_single(dev, tmp_buf, bytes_to_read,
355 static int bcm_kona_i2c_write_byte(struct bcm_kona_i2c_dev *dev, uint8_t data,
363 rc = bcm_kona_i2c_wait_if_busy(dev);
368 writel(ISR_SES_DONE_MASK, dev->base + ISR_OFFSET);
371 writel(IER_I2C_INT_EN_MASK, dev->base + IER_OFFSET);
374 reinit_completion(&dev->done);
377 writel(data, dev->base + DAT_OFFSET);
380 time_left = wait_for_completion_timeout(&dev->done, time_left);
383 writel(0, dev->base + IER_OFFSET);
386 dev_dbg(dev->device, "controller timed out\n");
390 nak_received = readl(dev->base + CS_OFFSET) & CS_ACK_MASK ? 1 : 0;
393 dev_dbg(dev->device, "unexpected NAK/ACK\n");
401 static int bcm_kona_i2c_write_fifo_single(struct bcm_kona_i2c_dev *dev,
409 reinit_completion(&dev->done);
413 dev->base + IER_OFFSET);
416 disable_irq(dev->irq);
420 writel(buf[k], (dev->base + DAT_OFFSET));
423 enable_irq(dev->irq);
427 time_left = wait_for_completion_timeout(&dev->done, time_left);
428 fifo_status = readl(dev->base + FIFO_STATUS_OFFSET);
432 writel(0, dev->base + IER_OFFSET);
435 if (readl(dev->base + CS_OFFSET) & CS_ACK_MASK) {
436 dev_err(dev->device, "unexpected NAK\n");
442 dev_err(dev->device, "completion timed out\n");
451 static int bcm_kona_i2c_write_fifo(struct bcm_kona_i2c_dev *dev,
464 rc = bcm_kona_i2c_write_fifo_single(dev, tmp_buf,
477 static int bcm_kona_i2c_do_addr(struct bcm_kona_i2c_dev *dev,
485 if (bcm_kona_i2c_write_byte(dev, addr, 0) < 0)
490 if (bcm_kona_i2c_write_byte(dev, addr, 0) < 0)
495 if (bcm_kona_send_i2c_cmd(dev, BCM_CMD_RESTART) < 0)
500 if (bcm_kona_i2c_write_byte(dev, addr, 0) < 0)
506 if (bcm_kona_i2c_write_byte(dev, addr, 0) < 0)
513 static void bcm_kona_i2c_enable_autosense(struct bcm_kona_i2c_dev *dev)
515 writel(readl(dev->base + CLKEN_OFFSET) & ~CLKEN_AUTOSENSE_OFF_MASK,
516 dev->base + CLKEN_OFFSET);
519 static void bcm_kona_i2c_config_timing(struct bcm_kona_i2c_dev *dev)
521 writel(readl(dev->base + HSTIM_OFFSET) & ~HSTIM_HS_MODE_MASK,
522 dev->base + HSTIM_OFFSET);
524 writel((dev->std_cfg->prescale << TIM_PRESCALE_SHIFT) |
525 (dev->std_cfg->time_p << TIM_P_SHIFT) |
526 (dev->std_cfg->no_div << TIM_NO_DIV_SHIFT) |
527 (dev->std_cfg->time_div << TIM_DIV_SHIFT),
528 dev->base + TIM_OFFSET);
530 writel((dev->std_cfg->time_m << CLKEN_M_SHIFT) |
531 (dev->std_cfg->time_n << CLKEN_N_SHIFT) |
533 dev->base + CLKEN_OFFSET);
536 static void bcm_kona_i2c_config_timing_hs(struct bcm_kona_i2c_dev *dev)
538 writel((dev->hs_cfg->prescale << TIM_PRESCALE_SHIFT) |
539 (dev->hs_cfg->time_p << TIM_P_SHIFT) |
540 (dev->hs_cfg->no_div << TIM_NO_DIV_SHIFT) |
541 (dev->hs_cfg->time_div << TIM_DIV_SHIFT),
542 dev->base + TIM_OFFSET);
544 writel((dev->hs_cfg->hs_hold << HSTIM_HS_HOLD_SHIFT) |
545 (dev->hs_cfg->hs_high_phase << HSTIM_HS_HIGH_PHASE_SHIFT) |
546 (dev->hs_cfg->hs_setup << HSTIM_HS_SETUP_SHIFT),
547 dev->base + HSTIM_OFFSET);
549 writel(readl(dev->base + HSTIM_OFFSET) | HSTIM_HS_MODE_MASK,
550 dev->base + HSTIM_OFFSET);
553 static int bcm_kona_i2c_switch_to_hs(struct bcm_kona_i2c_dev *dev)
558 rc = bcm_kona_i2c_write_byte(dev, MASTERCODE, 1);
565 rc = clk_set_rate(dev->external_clk, HS_EXT_CLK_FREQ);
567 dev_err(dev->device, "%s: clk_set_rate returned %d\n",
573 bcm_kona_i2c_config_timing_hs(dev);
576 rc = bcm_kona_send_i2c_cmd(dev, BCM_CMD_RESTART);
578 dev_err(dev->device, "High speed restart command failed\n");
583 static int bcm_kona_i2c_switch_to_std(struct bcm_kona_i2c_dev *dev)
588 bcm_kona_i2c_config_timing(dev);
591 rc = clk_set_rate(dev->external_clk, STD_EXT_CLK_FREQ);
593 dev_err(dev->device, "%s: clk_set_rate returned %d\n",
604 struct bcm_kona_i2c_dev *dev = i2c_get_adapdata(adapter);
609 rc = clk_prepare_enable(dev->external_clk);
611 dev_err(dev->device, "%s: peri clock enable failed. err %d\n",
617 writel(0, dev->base + PADCTL_OFFSET);
620 bcm_kona_i2c_enable_clock(dev);
623 rc = bcm_kona_send_i2c_cmd(dev, BCM_CMD_START);
625 dev_err(dev->device, "Start command failed rc = %d\n", rc);
630 if (dev->hs_cfg) {
631 rc = bcm_kona_i2c_switch_to_hs(dev);
642 rc = bcm_kona_send_i2c_cmd(dev, BCM_CMD_RESTART);
644 dev_err(dev->device,
652 rc = bcm_kona_i2c_do_addr(dev, pmsg);
654 dev_err(dev->device,
663 rc = bcm_kona_i2c_read_fifo(dev, pmsg);
665 dev_err(dev->device, "read failure\n");
669 rc = bcm_kona_i2c_write_fifo(dev, pmsg);
671 dev_err(dev->device, "write failure");
681 bcm_kona_send_i2c_cmd(dev, BCM_CMD_STOP);
684 if (dev->hs_cfg) {
685 int hs_rc = bcm_kona_i2c_switch_to_std(dev);
693 writel(PADCTL_PAD_OUT_EN_MASK, dev->base + PADCTL_OFFSET);
696 bcm_kona_i2c_disable_clock(dev);
698 clk_disable_unprepare(dev->external_clk);
714 static int bcm_kona_i2c_assign_bus_speed(struct bcm_kona_i2c_dev *dev)
717 int ret = of_property_read_u32(dev->device->of_node, "clock-frequency",
720 dev_err(dev->device, "missing clock-frequency property\n");
726 dev->std_cfg = &std_cfg_table[BCM_SPD_100K];
729 dev->std_cfg = &std_cfg_table[BCM_SPD_400K];
732 dev->std_cfg = &std_cfg_table[BCM_SPD_1MHZ];
736 dev->std_cfg = &std_cfg_table[BCM_SPD_100K];
737 dev->hs_cfg = &hs_cfg_table[BCM_SPD_3P4MHZ];
751 struct bcm_kona_i2c_dev *dev;
755 dev = devm_kzalloc(&pdev->dev, sizeof(*dev), GFP_KERNEL);
756 if (!dev)
759 platform_set_drvdata(pdev, dev);
760 dev->device = &pdev->dev;
761 init_completion(&dev->done);
764 dev->base = devm_platform_ioremap_resource(pdev, 0);
765 if (IS_ERR(dev->base))
769 dev->external_clk = devm_clk_get(dev->device, NULL);
770 if (IS_ERR(dev->external_clk)) {
771 dev_err(dev->device, "couldn't get clock\n");
775 rc = clk_set_rate(dev->external_clk, STD_EXT_CLK_FREQ);
777 dev_err(dev->device, "%s: clk_set_rate returned %d\n",
782 rc = clk_prepare_enable(dev->external_clk);
784 dev_err(dev->device, "couldn't enable clock\n");
789 rc = bcm_kona_i2c_assign_bus_speed(dev);
794 bcm_kona_i2c_enable_clock(dev);
797 bcm_kona_i2c_config_timing(dev);
800 writel(0, dev->base + TOUT_OFFSET);
803 bcm_kona_i2c_enable_autosense(dev);
807 dev->base + TXFCR_OFFSET);
810 writel(0, dev->base + IER_OFFSET);
819 dev->base + ISR_OFFSET);
822 dev->irq = platform_get_irq(pdev, 0);
823 if (dev->irq < 0) {
824 rc = dev->irq;
829 rc = devm_request_irq(&pdev->dev, dev->irq, bcm_kona_i2c_isr,
830 IRQF_SHARED, pdev->name, dev);
832 dev_err(dev->device, "failed to request irq %i\n", dev->irq);
837 bcm_kona_i2c_send_cmd_to_ctrl(dev, BCM_CMD_NOACTION);
840 writel(PADCTL_PAD_OUT_EN_MASK, dev->base + PADCTL_OFFSET);
843 bcm_kona_i2c_disable_clock(dev);
846 clk_disable_unprepare(dev->external_clk);
849 adap = &dev->adapter;
850 i2c_set_adapdata(adap, dev);
854 adap->dev.parent = &pdev->dev;
855 adap->dev.of_node = pdev->dev.of_node;
861 dev_info(dev->device, "device registered successfully\n");
866 bcm_kona_i2c_disable_clock(dev);
867 clk_disable_unprepare(dev->external_clk);
874 struct bcm_kona_i2c_dev *dev = platform_get_drvdata(pdev);
876 i2c_del_adapter(&dev->adapter);