Lines Matching +full:i2c +full:- +full:r1p10

1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * I2C bus driver for the Cadence I2C controller.
5 * Copyright (C) 2009 - 2014 Xilinx, Inc.
10 #include <linux/i2c.h>
18 /* Register offsets for the I2C device. */
21 #define CDNS_I2C_ADDR_OFFSET 0x08 /* I2C Address Register, RW */
22 #define CDNS_I2C_DATA_OFFSET 0x0C /* I2C Data Register, RW */
57 * I2C Address Register Bit mask definitions
59 * bits. A write access to this register always initiates a transfer if the I2C
62 #define CDNS_I2C_ADDR_MASK 0x000003FF /* I2C Address Mask */
65 * I2C Interrupt Registers Bit mask definitions
117 #define CDNS_I2C_DATA_INTR_DEPTH (CDNS_I2C_FIFO_DEPTH - 2)
120 #define CDNS_I2C_TRANSFER_SIZE (CDNS_I2C_MAX_TRANSFER_SIZE - 3)
122 #define DRIVER_NAME "cdns-i2c"
131 #define cdns_i2c_readreg(offset) readl_relaxed(id->membase + offset)
132 #define cdns_i2c_writereg(val, offset) writel_relaxed(val, id->membase + offset)
136 * enum cdns_i2c_mode - I2C Controller current operating mode
138 * @CDNS_I2C_MODE_SLAVE: I2C controller operating in slave mode
139 * @CDNS_I2C_MODE_MASTER: I2C Controller operating in master mode
147 * enum cdns_i2c_slave_mode - Slave state when I2C is operating in slave mode
149 * @CDNS_I2C_SLAVE_STATE_IDLE: I2C slave idle
150 * @CDNS_I2C_SLAVE_STATE_SEND: I2C slave sending data to master
151 * @CDNS_I2C_SLAVE_STATE_RECV: I2C slave receiving data from master
161 * struct cdns_i2c - I2C device private data structure
164 * @membase: Base address of the I2C device
165 * @adap: I2C adapter instance
175 * @input_clk: Input clock to I2C controller
176 * @i2c_clk: Maximum I2C clock speed
180 * @quirks: flag for broken hold bit usage in r1p10
183 * @dev_mode: I2C operating role(master/slave).
184 * @slave_state: I2C Slave state(idle/read/write).
221 * cdns_i2c_clear_bus_hold - Clear bus hold bit
236 (id->curr_recv_count == CDNS_I2C_FIFO_DEPTH + 1)); in cdns_is_holdquirk()
249 id->dev_mode = mode; in cdns_i2c_set_mode()
250 id->slave_state = CDNS_I2C_SLAVE_STATE_IDLE; in cdns_i2c_set_mode()
254 /* Enable i2c master */ in cdns_i2c_set_mode()
255 cdns_i2c_writereg(id->ctrl_reg_diva_divb | in cdns_i2c_set_mode()
267 /* Enable i2c slave */ in cdns_i2c_set_mode()
268 cdns_i2c_writereg(id->ctrl_reg_diva_divb & in cdns_i2c_set_mode()
273 cdns_i2c_writereg(id->slave->addr & CDNS_I2C_ADDR_MASK, in cdns_i2c_set_mode()
289 if (id->slave_state == CDNS_I2C_SLAVE_STATE_IDLE) { in cdns_i2c_slave_rcv_data()
290 id->slave_state = CDNS_I2C_SLAVE_STATE_RECV; in cdns_i2c_slave_rcv_data()
291 i2c_slave_event(id->slave, I2C_SLAVE_WRITE_REQUESTED, NULL); in cdns_i2c_slave_rcv_data()
298 while (bytes--) { in cdns_i2c_slave_rcv_data()
300 i2c_slave_event(id->slave, I2C_SLAVE_WRITE_RECEIVED, &data); in cdns_i2c_slave_rcv_data()
309 if (id->slave_state == CDNS_I2C_SLAVE_STATE_IDLE) { in cdns_i2c_slave_send_data()
310 id->slave_state = CDNS_I2C_SLAVE_STATE_SEND; in cdns_i2c_slave_send_data()
311 i2c_slave_event(id->slave, I2C_SLAVE_READ_REQUESTED, &data); in cdns_i2c_slave_send_data()
313 i2c_slave_event(id->slave, I2C_SLAVE_READ_PROCESSED, &data); in cdns_i2c_slave_send_data()
321 * cdns_i2c_slave_isr - Interrupt handler for the I2C device in slave role
322 * @ptr: Pointer to I2C device private data
325 * the I2C device in slave role.
351 id->slave_state = CDNS_I2C_SLAVE_STATE_IDLE; in cdns_i2c_slave_isr()
352 i2c_slave_event(id->slave, I2C_SLAVE_STOP, NULL); in cdns_i2c_slave_isr()
361 id->slave_state = CDNS_I2C_SLAVE_STATE_IDLE; in cdns_i2c_slave_isr()
362 i2c_slave_event(id->slave, I2C_SLAVE_STOP, NULL); in cdns_i2c_slave_isr()
369 id->slave_state = CDNS_I2C_SLAVE_STATE_IDLE; in cdns_i2c_slave_isr()
370 i2c_slave_event(id->slave, I2C_SLAVE_STOP, NULL); in cdns_i2c_slave_isr()
379 * cdns_i2c_master_isr - Interrupt handler for the I2C device in master role
380 * @ptr: Pointer to I2C device private data
383 * the error interrupts of the I2C device in master role.
399 id->err_status = 0; in cdns_i2c_master_isr()
412 if (id->recv_count > id->curr_recv_count) in cdns_i2c_master_isr()
415 hold_quirk = (id->quirks & CDNS_I2C_BROKEN_HOLD_BIT) && updatetx; in cdns_i2c_master_isr()
418 if (id->p_recv_buf && in cdns_i2c_master_isr()
424 if (id->recv_count > 0) { in cdns_i2c_master_isr()
425 *(id->p_recv_buf)++ = in cdns_i2c_master_isr()
427 id->recv_count--; in cdns_i2c_master_isr()
428 id->curr_recv_count--; in cdns_i2c_master_isr()
435 if (id->recv_count <= CDNS_I2C_FIFO_DEPTH && in cdns_i2c_master_isr()
436 !id->bus_hold_flag) in cdns_i2c_master_isr()
440 dev_err(id->adap.dev.parent, in cdns_i2c_master_isr()
442 id->err_status |= CDNS_I2C_IXR_TO; in cdns_i2c_master_isr()
454 * maintain transfer size non-zero while performing a large in cdns_i2c_master_isr()
460 (id->curr_recv_count - CDNS_I2C_FIFO_DEPTH)) in cdns_i2c_master_isr()
467 if (((int)(id->recv_count) - CDNS_I2C_FIFO_DEPTH) > in cdns_i2c_master_isr()
471 id->curr_recv_count = CDNS_I2C_TRANSFER_SIZE + in cdns_i2c_master_isr()
474 cdns_i2c_writereg(id->recv_count - in cdns_i2c_master_isr()
477 id->curr_recv_count = id->recv_count; in cdns_i2c_master_isr()
479 } else if (id->recv_count && !hold_quirk && in cdns_i2c_master_isr()
480 !id->curr_recv_count) { in cdns_i2c_master_isr()
483 cdns_i2c_writereg(id->p_msg->addr & CDNS_I2C_ADDR_MASK, in cdns_i2c_master_isr()
486 if (id->recv_count > CDNS_I2C_TRANSFER_SIZE) { in cdns_i2c_master_isr()
489 id->curr_recv_count = CDNS_I2C_TRANSFER_SIZE; in cdns_i2c_master_isr()
491 cdns_i2c_writereg(id->recv_count, in cdns_i2c_master_isr()
493 id->curr_recv_count = id->recv_count; in cdns_i2c_master_isr()
498 if ((isr_status & CDNS_I2C_IXR_COMP) && !id->recv_count) { in cdns_i2c_master_isr()
499 if (!id->bus_hold_flag) in cdns_i2c_master_isr()
508 if ((isr_status & CDNS_I2C_IXR_COMP) && !id->p_recv_buf) { in cdns_i2c_master_isr()
513 if (id->send_count) { in cdns_i2c_master_isr()
514 avail_bytes = CDNS_I2C_FIFO_DEPTH - in cdns_i2c_master_isr()
516 if (id->send_count > avail_bytes) in cdns_i2c_master_isr()
519 bytes_to_send = id->send_count; in cdns_i2c_master_isr()
521 while (bytes_to_send--) { in cdns_i2c_master_isr()
523 (*(id->p_send_buf)++), in cdns_i2c_master_isr()
525 id->send_count--; in cdns_i2c_master_isr()
535 if (!id->send_count && !id->bus_hold_flag) in cdns_i2c_master_isr()
542 id->err_status |= isr_status & CDNS_I2C_IXR_ERR_INTR_MASK; in cdns_i2c_master_isr()
543 if (id->err_status) in cdns_i2c_master_isr()
547 complete(&id->xfer_done); in cdns_i2c_master_isr()
553 * cdns_i2c_isr - Interrupt handler for the I2C device
554 * @irq: irq number for the I2C device
558 * i2c controller.
567 if (id->dev_mode == CDNS_I2C_MODE_SLAVE) in cdns_i2c_isr()
574 * cdns_i2c_mrecv - Prepare and start a master receive operation
575 * @id: pointer to the i2c device structure
582 id->p_recv_buf = id->p_msg->buf; in cdns_i2c_mrecv()
583 id->recv_count = id->p_msg->len; in cdns_i2c_mrecv()
589 if (id->p_msg->flags & I2C_M_RECV_LEN) in cdns_i2c_mrecv()
590 id->recv_count = I2C_SMBUS_BLOCK_MAX + 1; in cdns_i2c_mrecv()
592 id->curr_recv_count = id->recv_count; in cdns_i2c_mrecv()
598 if (id->recv_count > CDNS_I2C_FIFO_DEPTH) in cdns_i2c_mrecv()
613 if (id->recv_count > CDNS_I2C_TRANSFER_SIZE) { in cdns_i2c_mrecv()
616 id->curr_recv_count = CDNS_I2C_TRANSFER_SIZE; in cdns_i2c_mrecv()
618 cdns_i2c_writereg(id->recv_count, CDNS_I2C_XFER_SIZE_OFFSET); in cdns_i2c_mrecv()
621 /* Set the slave address in address register - triggers operation */ in cdns_i2c_mrecv()
622 cdns_i2c_writereg(id->p_msg->addr & CDNS_I2C_ADDR_MASK, in cdns_i2c_mrecv()
625 if (!id->bus_hold_flag && in cdns_i2c_mrecv()
626 ((id->p_msg->flags & I2C_M_RECV_LEN) != I2C_M_RECV_LEN) && in cdns_i2c_mrecv()
627 (id->recv_count <= CDNS_I2C_FIFO_DEPTH)) in cdns_i2c_mrecv()
633 * cdns_i2c_msend - Prepare and start a master send operation
634 * @id: pointer to the i2c device
643 id->p_recv_buf = NULL; in cdns_i2c_msend()
644 id->p_send_buf = id->p_msg->buf; in cdns_i2c_msend()
645 id->send_count = id->p_msg->len; in cdns_i2c_msend()
656 if (id->send_count > CDNS_I2C_FIFO_DEPTH) in cdns_i2c_msend()
669 avail_bytes = CDNS_I2C_FIFO_DEPTH - in cdns_i2c_msend()
672 if (id->send_count > avail_bytes) in cdns_i2c_msend()
675 bytes_to_send = id->send_count; in cdns_i2c_msend()
677 while (bytes_to_send--) { in cdns_i2c_msend()
678 cdns_i2c_writereg((*(id->p_send_buf)++), CDNS_I2C_DATA_OFFSET); in cdns_i2c_msend()
679 id->send_count--; in cdns_i2c_msend()
686 if (!id->bus_hold_flag && !id->send_count) in cdns_i2c_msend()
688 /* Set the slave address in address register - triggers operation. */ in cdns_i2c_msend()
689 cdns_i2c_writereg(id->p_msg->addr & CDNS_I2C_ADDR_MASK, in cdns_i2c_msend()
696 * cdns_i2c_master_reset - Reset the interface
697 * @adap: pointer to the i2c adapter driver instance
704 struct cdns_i2c *id = adap->algo_data; in cdns_i2c_master_reset()
730 id->p_msg = msg; in cdns_i2c_process_msg()
731 id->err_status = 0; in cdns_i2c_process_msg()
732 reinit_completion(&id->xfer_done); in cdns_i2c_process_msg()
736 if (msg->flags & I2C_M_TEN) { in cdns_i2c_process_msg()
747 if (msg->flags & I2C_M_RD) in cdns_i2c_process_msg()
753 time_left = wait_for_completion_timeout(&id->xfer_done, adap->timeout); in cdns_i2c_process_msg()
756 dev_err(id->adap.dev.parent, in cdns_i2c_process_msg()
758 return -ETIMEDOUT; in cdns_i2c_process_msg()
765 if (id->err_status & CDNS_I2C_IXR_ARB_LOST) in cdns_i2c_process_msg()
766 return -EAGAIN; in cdns_i2c_process_msg()
772 * cdns_i2c_master_xfer - The main i2c transfer function
773 * @adap: pointer to the i2c adapter driver instance
774 * @msgs: pointer to the i2c message structure
786 struct cdns_i2c *id = adap->algo_data; in cdns_i2c_master_xfer()
792 ret = pm_runtime_get_sync(id->dev); in cdns_i2c_master_xfer()
797 /* Check i2c operating mode and switch if possible */ in cdns_i2c_master_xfer()
798 if (id->dev_mode == CDNS_I2C_MODE_SLAVE) { in cdns_i2c_master_xfer()
799 if (id->slave_state != CDNS_I2C_SLAVE_STATE_IDLE) in cdns_i2c_master_xfer()
800 return -EAGAIN; in cdns_i2c_master_xfer()
812 ret = -EAGAIN; in cdns_i2c_master_xfer()
816 hold_quirk = !!(id->quirks & CDNS_I2C_BROKEN_HOLD_BIT); in cdns_i2c_master_xfer()
829 for (count = 0; (count < num - 1 && hold_quirk); count++) { in cdns_i2c_master_xfer()
831 dev_warn(adap->dev.parent, in cdns_i2c_master_xfer()
833 ret = -EOPNOTSUPP; in cdns_i2c_master_xfer()
837 id->bus_hold_flag = 1; in cdns_i2c_master_xfer()
842 id->bus_hold_flag = 0; in cdns_i2c_master_xfer()
847 if (count == (num - 1)) in cdns_i2c_master_xfer()
848 id->bus_hold_flag = 0; in cdns_i2c_master_xfer()
855 if (id->err_status) { in cdns_i2c_master_xfer()
858 if (id->err_status & CDNS_I2C_IXR_NACK) { in cdns_i2c_master_xfer()
859 ret = -ENXIO; in cdns_i2c_master_xfer()
862 ret = -EIO; in cdns_i2c_master_xfer()
872 /* Switch i2c mode to slave */ in cdns_i2c_master_xfer()
877 pm_runtime_mark_last_busy(id->dev); in cdns_i2c_master_xfer()
878 pm_runtime_put_autosuspend(id->dev); in cdns_i2c_master_xfer()
883 * cdns_i2c_func - Returns the supported features of the I2C driver
884 * @adap: pointer to the i2c adapter structure
905 struct cdns_i2c *id = container_of(slave->adapter, struct cdns_i2c, in cdns_reg_slave()
908 if (id->slave) in cdns_reg_slave()
909 return -EBUSY; in cdns_reg_slave()
911 if (slave->flags & I2C_CLIENT_TEN) in cdns_reg_slave()
912 return -EAFNOSUPPORT; in cdns_reg_slave()
914 ret = pm_runtime_get_sync(id->dev); in cdns_reg_slave()
919 id->slave = slave; in cdns_reg_slave()
921 /* Enable I2C slave */ in cdns_reg_slave()
929 struct cdns_i2c *id = container_of(slave->adapter, struct cdns_i2c, in cdns_unreg_slave()
932 pm_runtime_put(id->dev); in cdns_unreg_slave()
935 id->slave = NULL; in cdns_unreg_slave()
937 /* Enable I2C master */ in cdns_unreg_slave()
954 * cdns_i2c_calc_divs - Calculate clock dividers
955 * @f: I2C clock frequency
960 * f is used as input and output variable. As input it is used as target I2C
961 * frequency. On function exit f holds the actually resulting I2C frequency.
980 return -EINVAL; in cdns_i2c_calc_divs()
982 last_error = -1; in cdns_i2c_calc_divs()
988 div_b--; in cdns_i2c_calc_divs()
995 current_error = ((actual_fscl > fscl) ? (actual_fscl - fscl) : in cdns_i2c_calc_divs()
996 (fscl - actual_fscl)); in cdns_i2c_calc_divs()
1014 * cdns_i2c_setclk - This function sets the serial clock rate for the I2C device
1015 * @clk_in: I2C clock input frequency in Hz
1016 * @id: Pointer to the I2C device structure
1034 unsigned long fscl = id->i2c_clk; in cdns_i2c_setclk()
1046 id->ctrl_reg_diva_divb = ctrl_reg & (CDNS_I2C_CR_DIVA_MASK | in cdns_i2c_setclk()
1053 * cdns_i2c_clk_notifier_cb - Clock rate change callback
1061 * New dividers are written to the HW in the pre- or post change notification
1074 if (pm_runtime_suspended(id->dev)) in cdns_i2c_clk_notifier_cb()
1080 unsigned long input_clk = ndata->new_rate; in cdns_i2c_clk_notifier_cb()
1081 unsigned long fscl = id->i2c_clk; in cdns_i2c_clk_notifier_cb()
1087 dev_warn(id->adap.dev.parent, in cdns_i2c_clk_notifier_cb()
1093 if (ndata->new_rate > ndata->old_rate) in cdns_i2c_clk_notifier_cb()
1094 cdns_i2c_setclk(ndata->new_rate, id); in cdns_i2c_clk_notifier_cb()
1099 id->input_clk = ndata->new_rate; in cdns_i2c_clk_notifier_cb()
1101 if (ndata->new_rate < ndata->old_rate) in cdns_i2c_clk_notifier_cb()
1102 cdns_i2c_setclk(ndata->new_rate, id); in cdns_i2c_clk_notifier_cb()
1106 if (ndata->new_rate > ndata->old_rate) in cdns_i2c_clk_notifier_cb()
1107 cdns_i2c_setclk(ndata->old_rate, id); in cdns_i2c_clk_notifier_cb()
1115 * cdns_i2c_runtime_suspend - Runtime suspend method for the driver
1126 clk_disable(xi2c->clk); in cdns_i2c_runtime_suspend()
1132 * cdns_i2c_runtime_resume - Runtime resume
1144 ret = clk_enable(xi2c->clk); in cdns_i2c_runtime_resume()
1163 { .compatible = "cdns,i2c-r1p10", .data = &r1p10_i2c_def },
1164 { .compatible = "cdns,i2c-r1p14",},
1170 * cdns_i2c_probe - Platform registration call
1173 * This function does all the memory allocation and registration for the i2c
1186 id = devm_kzalloc(&pdev->dev, sizeof(*id), GFP_KERNEL); in cdns_i2c_probe()
1188 return -ENOMEM; in cdns_i2c_probe()
1190 id->dev = &pdev->dev; in cdns_i2c_probe()
1193 match = of_match_node(cdns_i2c_of_match, pdev->dev.of_node); in cdns_i2c_probe()
1194 if (match && match->data) { in cdns_i2c_probe()
1195 const struct cdns_platform_data *data = match->data; in cdns_i2c_probe()
1196 id->quirks = data->quirks; in cdns_i2c_probe()
1199 id->membase = devm_platform_get_and_ioremap_resource(pdev, 0, &r_mem); in cdns_i2c_probe()
1200 if (IS_ERR(id->membase)) in cdns_i2c_probe()
1201 return PTR_ERR(id->membase); in cdns_i2c_probe()
1203 id->irq = platform_get_irq(pdev, 0); in cdns_i2c_probe()
1205 id->adap.owner = THIS_MODULE; in cdns_i2c_probe()
1206 id->adap.dev.of_node = pdev->dev.of_node; in cdns_i2c_probe()
1207 id->adap.algo = &cdns_i2c_algo; in cdns_i2c_probe()
1208 id->adap.timeout = CDNS_I2C_TIMEOUT; in cdns_i2c_probe()
1209 id->adap.retries = 3; /* Default retry value. */ in cdns_i2c_probe()
1210 id->adap.algo_data = id; in cdns_i2c_probe()
1211 id->adap.dev.parent = &pdev->dev; in cdns_i2c_probe()
1212 init_completion(&id->xfer_done); in cdns_i2c_probe()
1213 snprintf(id->adap.name, sizeof(id->adap.name), in cdns_i2c_probe()
1214 "Cadence I2C at %08lx", (unsigned long)r_mem->start); in cdns_i2c_probe()
1216 id->clk = devm_clk_get(&pdev->dev, NULL); in cdns_i2c_probe()
1217 if (IS_ERR(id->clk)) { in cdns_i2c_probe()
1218 if (PTR_ERR(id->clk) != -EPROBE_DEFER) in cdns_i2c_probe()
1219 dev_err(&pdev->dev, "input clock not found.\n"); in cdns_i2c_probe()
1220 return PTR_ERR(id->clk); in cdns_i2c_probe()
1222 ret = clk_prepare_enable(id->clk); in cdns_i2c_probe()
1224 dev_err(&pdev->dev, "Unable to enable clock.\n"); in cdns_i2c_probe()
1226 pm_runtime_set_autosuspend_delay(id->dev, CNDS_I2C_PM_TIMEOUT); in cdns_i2c_probe()
1227 pm_runtime_use_autosuspend(id->dev); in cdns_i2c_probe()
1228 pm_runtime_set_active(id->dev); in cdns_i2c_probe()
1229 pm_runtime_enable(id->dev); in cdns_i2c_probe()
1231 id->clk_rate_change_nb.notifier_call = cdns_i2c_clk_notifier_cb; in cdns_i2c_probe()
1232 if (clk_notifier_register(id->clk, &id->clk_rate_change_nb)) in cdns_i2c_probe()
1233 dev_warn(&pdev->dev, "Unable to register clock notifier.\n"); in cdns_i2c_probe()
1234 id->input_clk = clk_get_rate(id->clk); in cdns_i2c_probe()
1236 ret = of_property_read_u32(pdev->dev.of_node, "clock-frequency", in cdns_i2c_probe()
1237 &id->i2c_clk); in cdns_i2c_probe()
1238 if (ret || (id->i2c_clk > I2C_MAX_FAST_MODE_FREQ)) in cdns_i2c_probe()
1239 id->i2c_clk = I2C_MAX_STANDARD_MODE_FREQ; in cdns_i2c_probe()
1243 id->dev_mode = CDNS_I2C_MODE_MASTER; in cdns_i2c_probe()
1244 id->slave_state = CDNS_I2C_SLAVE_STATE_IDLE; in cdns_i2c_probe()
1248 ret = cdns_i2c_setclk(id->input_clk, id); in cdns_i2c_probe()
1250 dev_err(&pdev->dev, "invalid SCL clock: %u Hz\n", id->i2c_clk); in cdns_i2c_probe()
1251 ret = -EINVAL; in cdns_i2c_probe()
1255 ret = devm_request_irq(&pdev->dev, id->irq, cdns_i2c_isr, 0, in cdns_i2c_probe()
1258 dev_err(&pdev->dev, "cannot get irq %d\n", id->irq); in cdns_i2c_probe()
1263 * Cadence I2C controller has a bug wherein it generates in cdns_i2c_probe()
1271 ret = i2c_add_adapter(&id->adap); in cdns_i2c_probe()
1275 dev_info(&pdev->dev, "%u kHz mmio %08lx irq %d\n", in cdns_i2c_probe()
1276 id->i2c_clk / 1000, (unsigned long)r_mem->start, id->irq); in cdns_i2c_probe()
1281 clk_disable_unprepare(id->clk); in cdns_i2c_probe()
1282 pm_runtime_disable(&pdev->dev); in cdns_i2c_probe()
1283 pm_runtime_set_suspended(&pdev->dev); in cdns_i2c_probe()
1288 * cdns_i2c_remove - Unregister the device after releasing the resources
1299 pm_runtime_disable(&pdev->dev); in cdns_i2c_remove()
1300 pm_runtime_set_suspended(&pdev->dev); in cdns_i2c_remove()
1301 pm_runtime_dont_use_autosuspend(&pdev->dev); in cdns_i2c_remove()
1303 i2c_del_adapter(&id->adap); in cdns_i2c_remove()
1304 clk_notifier_unregister(id->clk, &id->clk_rate_change_nb); in cdns_i2c_remove()
1305 clk_disable_unprepare(id->clk); in cdns_i2c_remove()
1323 MODULE_DESCRIPTION("Cadence I2C bus driver");