Lines Matching refs:id

135 #define cdns_i2c_readreg(offset)       readl_relaxed(id->membase + offset)
136 #define cdns_i2c_writereg(val, offset) writel_relaxed(val, id->membase + offset)
238 * @id: Device private data structure
243 static void cdns_i2c_init(struct cdns_i2c *id)
245 cdns_i2c_writereg(id->ctrl_reg, CDNS_I2C_CR_OFFSET);
298 * @id: Pointer to driver data struct
302 static void cdns_i2c_clear_bus_hold(struct cdns_i2c *id)
309 static inline bool cdns_is_holdquirk(struct cdns_i2c *id, bool hold_wrkaround)
312 (id->curr_recv_count == id->fifo_depth + 1));
316 static void cdns_i2c_set_mode(enum cdns_i2c_mode mode, struct cdns_i2c *id)
325 id->dev_mode = mode;
326 id->slave_state = CDNS_I2C_SLAVE_STATE_IDLE;
331 cdns_i2c_writereg(id->ctrl_reg_diva_divb |
344 cdns_i2c_writereg(id->ctrl_reg_diva_divb &
349 cdns_i2c_writereg(id->slave->addr & CDNS_I2C_ADDR_MASK,
359 static void cdns_i2c_slave_rcv_data(struct cdns_i2c *id)
365 if (id->slave_state == CDNS_I2C_SLAVE_STATE_IDLE) {
366 id->slave_state = CDNS_I2C_SLAVE_STATE_RECV;
367 i2c_slave_event(id->slave, I2C_SLAVE_WRITE_REQUESTED, NULL);
376 i2c_slave_event(id->slave, I2C_SLAVE_WRITE_RECEIVED, &data);
380 static void cdns_i2c_slave_send_data(struct cdns_i2c *id)
385 if (id->slave_state == CDNS_I2C_SLAVE_STATE_IDLE) {
386 id->slave_state = CDNS_I2C_SLAVE_STATE_SEND;
387 i2c_slave_event(id->slave, I2C_SLAVE_READ_REQUESTED, &data);
389 i2c_slave_event(id->slave, I2C_SLAVE_READ_PROCESSED, &data);
407 struct cdns_i2c *id = ptr;
424 cdns_i2c_slave_send_data(id);
427 id->slave_state = CDNS_I2C_SLAVE_STATE_IDLE;
428 i2c_slave_event(id->slave, I2C_SLAVE_STOP, NULL);
433 cdns_i2c_slave_rcv_data(id);
436 cdns_i2c_slave_rcv_data(id);
437 id->slave_state = CDNS_I2C_SLAVE_STATE_IDLE;
438 i2c_slave_event(id->slave, I2C_SLAVE_STOP, NULL);
445 id->slave_state = CDNS_I2C_SLAVE_STATE_IDLE;
446 i2c_slave_event(id->slave, I2C_SLAVE_STOP, NULL);
468 struct cdns_i2c *id = ptr;
475 id->err_status = 0;
487 updatetx = id->recv_count > id->curr_recv_count;
490 if (id->p_recv_buf &&
496 if (id->recv_count > 0) {
497 *(id->p_recv_buf)++ =
499 id->recv_count--;
500 id->curr_recv_count--;
507 if (id->recv_count <= id->fifo_depth &&
508 !id->bus_hold_flag)
509 cdns_i2c_clear_bus_hold(id);
512 dev_err(id->adap.dev.parent,
514 id->err_status |= CDNS_I2C_IXR_TO;
518 if (cdns_is_holdquirk(id, updatetx))
529 if (cdns_is_holdquirk(id, updatetx)) {
532 (id->curr_recv_count - id->fifo_depth))
539 if (((int)(id->recv_count) - id->fifo_depth) >
540 id->transfer_size) {
541 cdns_i2c_writereg(id->transfer_size,
543 id->curr_recv_count = id->transfer_size +
544 id->fifo_depth;
546 cdns_i2c_writereg(id->recv_count -
547 id->fifo_depth,
549 id->curr_recv_count = id->recv_count;
554 if ((isr_status & CDNS_I2C_IXR_COMP) && !id->recv_count) {
555 if (!id->bus_hold_flag)
556 cdns_i2c_clear_bus_hold(id);
564 if ((isr_status & CDNS_I2C_IXR_COMP) && !id->p_recv_buf) {
569 if (id->send_count) {
570 avail_bytes = id->fifo_depth -
572 if (id->send_count > avail_bytes)
575 bytes_to_send = id->send_count;
579 (*(id->p_send_buf)++),
581 id->send_count--;
591 if (!id->send_count && !id->bus_hold_flag)
592 cdns_i2c_clear_bus_hold(id);
598 id->err_status |= isr_status & CDNS_I2C_IXR_ERR_INTR_MASK;
599 if (id->err_status)
603 complete(&id->xfer_done);
621 struct cdns_i2c *id = ptr;
623 if (id->dev_mode == CDNS_I2C_MODE_SLAVE)
629 static bool cdns_i2c_error_check(struct cdns_i2c *id)
633 id->err_status = 0;
638 id->err_status = isr_status & CDNS_I2C_IXR_ERR_INTR_MASK;
640 return !!id->err_status;
643 static void cdns_i2c_mrecv_atomic(struct cdns_i2c *id)
645 while (id->recv_count > 0) {
652 updatetx = id->recv_count > id->curr_recv_count;
654 while (id->curr_recv_count > 0) {
656 *id->p_recv_buf = cdns_i2c_readreg(CDNS_I2C_DATA_OFFSET);
657 id->p_recv_buf++;
658 id->recv_count--;
659 id->curr_recv_count--;
666 if (id->recv_count <= id->fifo_depth && !id->bus_hold_flag)
667 cdns_i2c_clear_bus_hold(id);
669 if (cdns_i2c_error_check(id))
671 if (cdns_is_holdquirk(id, updatetx))
682 if (cdns_is_holdquirk(id, updatetx)) {
685 (id->curr_recv_count - id->fifo_depth))
692 if ((id->recv_count - id->fifo_depth) >
693 id->transfer_size) {
694 cdns_i2c_writereg(id->transfer_size,
696 id->curr_recv_count = id->transfer_size +
697 id->fifo_depth;
699 cdns_i2c_writereg(id->recv_count -
700 id->fifo_depth,
702 id->curr_recv_count = id->recv_count;
708 if (!id->recv_count && !id->bus_hold_flag)
709 cdns_i2c_clear_bus_hold(id);
714 * @id: pointer to the i2c device structure
716 static void cdns_i2c_mrecv(struct cdns_i2c *id)
726 id->p_recv_buf = id->p_msg->buf;
727 id->recv_count = id->p_msg->len;
738 if (id->p_msg->flags & I2C_M_RECV_LEN)
739 id->recv_count = I2C_SMBUS_BLOCK_MAX + id->p_msg->len;
741 id->curr_recv_count = id->recv_count;
747 if (id->recv_count > id->fifo_depth)
762 if (id->recv_count > id->transfer_size) {
763 cdns_i2c_writereg(id->transfer_size,
765 id->curr_recv_count = id->transfer_size;
767 cdns_i2c_writereg(id->recv_count, CDNS_I2C_XFER_SIZE_OFFSET);
771 if (!id->bus_hold_flag && id->recv_count <= id->fifo_depth) {
774 if (id->quirks & CDNS_I2C_BROKEN_HOLD_BIT)
779 addr = id->p_msg->addr;
806 if (!id->atomic)
809 cdns_i2c_mrecv_atomic(id);
812 static void cdns_i2c_msend_rem_atomic(struct cdns_i2c *id)
814 while (id->send_count) {
818 avail_bytes = id->fifo_depth - cdns_i2c_readreg(CDNS_I2C_XFER_SIZE_OFFSET);
819 if (id->send_count > avail_bytes)
822 bytes_to_send = id->send_count;
825 cdns_i2c_writereg((*id->p_send_buf++), CDNS_I2C_DATA_OFFSET);
826 id->send_count--;
828 if (cdns_i2c_error_check(id))
832 if (!id->send_count && !id->bus_hold_flag)
833 cdns_i2c_clear_bus_hold(id);
838 * @id: pointer to the i2c device
840 static void cdns_i2c_msend(struct cdns_i2c *id)
847 id->p_recv_buf = NULL;
848 id->p_send_buf = id->p_msg->buf;
849 id->send_count = id->p_msg->len;
860 if (id->send_count > id->fifo_depth)
873 avail_bytes = id->fifo_depth -
876 if (id->send_count > avail_bytes)
879 bytes_to_send = id->send_count;
882 cdns_i2c_writereg((*(id->p_send_buf)++), CDNS_I2C_DATA_OFFSET);
883 id->send_count--;
890 if (!id->bus_hold_flag && !id->send_count)
891 cdns_i2c_clear_bus_hold(id);
893 cdns_i2c_writereg(id->p_msg->addr & CDNS_I2C_ADDR_MASK,
896 if (!id->atomic)
898 else if (id->send_count > 0)
899 cdns_i2c_msend_rem_atomic(id);
911 struct cdns_i2c *id = adap->algo_data;
931 static int cdns_i2c_process_msg(struct cdns_i2c *id, struct i2c_msg *msg,
937 id->p_msg = msg;
938 id->err_status = 0;
939 if (!id->atomic)
940 reinit_completion(&id->xfer_done);
956 cdns_i2c_mrecv(id);
958 cdns_i2c_msend(id);
961 msg_timeout = msecs_to_jiffies((1000 * msg->len * BITS_PER_BYTE) / id->i2c_clk);
969 if (!id->atomic)
977 if (!id->atomic) {
979 time_left = wait_for_completion_timeout(&id->xfer_done, msg_timeout);
982 time_left = !readl_poll_timeout_atomic(id->membase + CDNS_I2C_ISR_OFFSET,
996 if (id->err_status & CDNS_I2C_IXR_ARB_LOST)
1011 struct cdns_i2c *id = adap->algo_data;
1015 if (!id->atomic)
1016 ret = readl_relaxed_poll_timeout(id->membase + CDNS_I2C_SR_OFFSET,
1021 ret = readl_poll_timeout_atomic(id->membase + CDNS_I2C_SR_OFFSET,
1027 if (id->adap.bus_recovery_info)
1032 hold_quirk = !!(id->quirks & CDNS_I2C_BROKEN_HOLD_BIT);
1052 id->bus_hold_flag = 1;
1057 id->bus_hold_flag = 0;
1063 id->bus_hold_flag = 0;
1065 ret = cdns_i2c_process_msg(id, msgs, adap);
1070 if (id->err_status || id->err_status_atomic) {
1073 if (id->err_status & CDNS_I2C_IXR_NACK)
1096 struct cdns_i2c *id = adap->algo_data;
1101 ret = pm_runtime_resume_and_get(id->dev);
1107 if (id->dev_mode == CDNS_I2C_MODE_SLAVE) {
1108 if (id->slave_state != CDNS_I2C_SLAVE_STATE_IDLE) {
1114 cdns_i2c_set_mode(CDNS_I2C_MODE_MASTER, id);
1128 cdns_i2c_set_mode(CDNS_I2C_MODE_SLAVE, id);
1131 pm_runtime_mark_last_busy(id->dev);
1132 pm_runtime_put_autosuspend(id->dev);
1148 struct cdns_i2c *id = adap->algo_data;
1150 ret = cdns_i2c_runtime_resume(id->dev);
1154 if (id->quirks & CDNS_I2C_BROKEN_HOLD_BIT) {
1155 dev_warn(id->adap.dev.parent,
1160 id->atomic = true;
1165 id->atomic = false;
1166 cdns_i2c_runtime_suspend(id->dev);
1194 struct cdns_i2c *id = container_of(slave->adapter, struct cdns_i2c,
1197 if (id->slave)
1203 ret = pm_runtime_resume_and_get(id->dev);
1208 id->slave = slave;
1211 cdns_i2c_set_mode(CDNS_I2C_MODE_SLAVE, id);
1218 struct cdns_i2c *id = container_of(slave->adapter, struct cdns_i2c,
1221 pm_runtime_put(id->dev);
1224 id->slave = NULL;
1227 cdns_i2c_set_mode(CDNS_I2C_MODE_MASTER, id);
1305 * @id: Pointer to the I2C device structure
1318 static int cdns_i2c_setclk(unsigned long clk_in, struct cdns_i2c *id)
1323 unsigned long fscl = id->i2c_clk;
1329 ctrl_reg = id->ctrl_reg;
1333 id->ctrl_reg = ctrl_reg;
1336 id->ctrl_reg_diva_divb = ctrl_reg & (CDNS_I2C_CR_DIVA_MASK |
1362 struct cdns_i2c *id = to_cdns_i2c(nb);
1364 if (pm_runtime_suspended(id->dev))
1371 unsigned long fscl = id->i2c_clk;
1377 dev_warn(id->adap.dev.parent,
1384 cdns_i2c_setclk(ndata->new_rate, id);
1389 id->input_clk = ndata->new_rate;
1392 cdns_i2c_setclk(ndata->new_rate, id);
1397 cdns_i2c_setclk(ndata->old_rate, id);
1455 * @id: Device private data structure
1460 static void cdns_i2c_detect_transfer_size(struct cdns_i2c *id)
1479 id->transfer_size = CDNS_I2C_TRANSFER_SIZE(val);
1497 struct cdns_i2c *id;
1501 id = devm_kzalloc(&pdev->dev, sizeof(*id), GFP_KERNEL);
1502 if (!id)
1505 id->dev = &pdev->dev;
1506 platform_set_drvdata(pdev, id);
1511 id->quirks = data->quirks;
1514 id->rinfo.pinctrl = devm_pinctrl_get(&pdev->dev);
1515 if (IS_ERR(id->rinfo.pinctrl)) {
1516 int err = PTR_ERR(id->rinfo.pinctrl);
1522 id->adap.bus_recovery_info = &id->rinfo;
1525 id->membase = devm_platform_get_and_ioremap_resource(pdev, 0, &r_mem);
1526 if (IS_ERR(id->membase))
1527 return PTR_ERR(id->membase);
1533 id->adap.owner = THIS_MODULE;
1534 id->adap.dev.of_node = pdev->dev.of_node;
1535 id->adap.algo = &cdns_i2c_algo;
1536 id->adap.timeout = CDNS_I2C_TIMEOUT;
1537 id->adap.retries = 3; /* Default retry value. */
1538 id->adap.algo_data = id;
1539 id->adap.dev.parent = &pdev->dev;
1540 init_completion(&id->xfer_done);
1541 snprintf(id->adap.name, sizeof(id->adap.name),
1544 id->clk = devm_clk_get_enabled(&pdev->dev, NULL);
1545 if (IS_ERR(id->clk))
1546 return dev_err_probe(&pdev->dev, PTR_ERR(id->clk),
1549 id->reset = devm_reset_control_get_optional_shared(&pdev->dev, NULL);
1550 if (IS_ERR(id->reset))
1551 return dev_err_probe(&pdev->dev, PTR_ERR(id->reset),
1554 ret = reset_control_deassert(id->reset);
1559 pm_runtime_set_autosuspend_delay(id->dev, CNDS_I2C_PM_TIMEOUT);
1560 pm_runtime_use_autosuspend(id->dev);
1561 pm_runtime_set_active(id->dev);
1562 pm_runtime_enable(id->dev);
1564 id->clk_rate_change_nb.notifier_call = cdns_i2c_clk_notifier_cb;
1565 if (clk_notifier_register(id->clk, &id->clk_rate_change_nb))
1567 id->input_clk = clk_get_rate(id->clk);
1570 &id->i2c_clk);
1571 if (ret || (id->i2c_clk > I2C_MAX_FAST_MODE_FREQ))
1572 id->i2c_clk = I2C_MAX_STANDARD_MODE_FREQ;
1576 id->dev_mode = CDNS_I2C_MODE_MASTER;
1577 id->slave_state = CDNS_I2C_SLAVE_STATE_IDLE;
1579 id->ctrl_reg = CDNS_I2C_CR_ACK_EN | CDNS_I2C_CR_NEA | CDNS_I2C_CR_MS;
1581 id->fifo_depth = CDNS_I2C_FIFO_DEPTH_DEFAULT;
1582 of_property_read_u32(pdev->dev.of_node, "fifo-depth", &id->fifo_depth);
1584 cdns_i2c_detect_transfer_size(id);
1586 ret = cdns_i2c_setclk(id->input_clk, id);
1588 dev_err(&pdev->dev, "invalid SCL clock: %u Hz\n", id->i2c_clk);
1594 DRIVER_NAME, id);
1599 cdns_i2c_init(id);
1601 ret = i2c_add_adapter(&id->adap);
1606 id->i2c_clk / 1000, (unsigned long)r_mem->start, irq);
1611 clk_notifier_unregister(id->clk, &id->clk_rate_change_nb);
1614 reset_control_assert(id->reset);
1628 struct cdns_i2c *id = platform_get_drvdata(pdev);
1634 i2c_del_adapter(&id->adap);
1635 clk_notifier_unregister(id->clk, &id->clk_rate_change_nb);
1636 reset_control_assert(id->reset);