Lines Matching +full:i2c +full:- +full:sda +full:- +full:delay

1 // SPDX-License-Identifier: GPL-2.0
5 * Driver for KEBA I2C controller FPGA IP core
8 #include <linux/i2c.h>
14 #define KI2C "i2c-keba"
64 * The I2C controller has an IN_USE bit for locking access to the in ki2c_inuse_lock()
65 * controller. This enables the use of I2C controller by other none in ki2c_inuse_lock()
68 * If the I2C controller is free, then the first read returns in ki2c_inuse_lock()
69 * IN_USE == 0. After that the I2C controller is locked and further in ki2c_inuse_lock()
72 * The I2C controller is unlocked by writing 1 into IN_USE. in ki2c_inuse_lock()
74 * The IN_USE bit acts as a hardware semaphore for the I2C controller. in ki2c_inuse_lock()
77 ret = readb_poll_timeout(ki2c->base + KI2C_STATUS_REG, in ki2c_inuse_lock()
81 dev_err(&ki2c->auxdev->auxdev.dev, "%s err!\n", __func__); in ki2c_inuse_lock()
89 iowrite8(KI2C_STATUS_IN_USE, ki2c->base + KI2C_STATUS_REG); in ki2c_inuse_unlock()
102 return ki2c_wait_for_bit(ki2c->base + KI2C_STATUS_REG, KI2C_STATUS_MCF, in ki2c_wait_for_mcf()
103 ki2c->adapter.timeout); in ki2c_wait_for_mcf()
114 return ki2c_wait_for_bit(ki2c->base + KI2C_STATUS_REG, in ki2c_wait_for_data()
116 ki2c->adapter.timeout); in ki2c_wait_for_data()
129 reg = ioread8(ki2c->base + KI2C_STATUS_REG); in ki2c_wait_for_data_ack()
131 return -EIO; in ki2c_wait_for_data_ack()
138 unsigned int reg = ioread8(ki2c->base + KI2C_CAPABILITY_REG); in ki2c_has_capability()
145 unsigned int reg = ioread8(ki2c->base + KI2C_STATUS_DC_REG); in ki2c_get_scl()
153 unsigned int reg = ioread8(ki2c->base + KI2C_STATUS_DC_REG); in ki2c_get_sda()
164 control_dc = ioread8(ki2c->base + KI2C_CONTROL_DC_REG); in ki2c_set_scl()
169 iowrite8(control_dc, ki2c->base + KI2C_CONTROL_DC_REG); in ki2c_set_scl()
173 * Resetting bus bitwise is done by checking SDA and applying clock cycles as
174 * long as SDA is low. 9 clock cycles are applied at most.
178 * is: delay in ns = (10^6 / 100) / 2
188 /* disable I2C controller (MEN = 0) to get direct access to SCL/SDA */ in ki2c_reset_bus_bitwise()
189 iowrite8(0, ki2c->base + KI2C_CONTROL_REG); in ki2c_reset_bus_bitwise()
198 dev_err(&ki2c->auxdev->auxdev.dev, in ki2c_reset_bus_bitwise()
200 ret = -EBUSY; in ki2c_reset_bus_bitwise()
204 /* break if SDA is high */ in ki2c_reset_bus_bitwise()
215 dev_err(&ki2c->auxdev->auxdev.dev, "SDA is still low!\n"); in ki2c_reset_bus_bitwise()
216 ret = -EBUSY; in ki2c_reset_bus_bitwise()
220 iowrite8(KI2C_CONTROL_MEN, ki2c->base + KI2C_CONTROL_REG); in ki2c_reset_bus_bitwise()
232 * ACK cycle again and will hold SDA low like it did before the start of the
242 iowrite8(0xFF, ki2c->base + KI2C_DATA_REG); in ki2c_reset_bus_bytewise()
246 ki2c->base + KI2C_CONTROL_REG); in ki2c_reset_bus_bytewise()
249 dev_err(&ki2c->auxdev->auxdev.dev, "Start condition failed\n"); in ki2c_reset_bus_bytewise()
256 ki2c->base + KI2C_CONTROL_REG); in ki2c_reset_bus_bytewise()
259 dev_err(&ki2c->auxdev->auxdev.dev, "Stop condition failed\n"); in ki2c_reset_bus_bytewise()
273 * If the I2C controller is capable of direct control of SCL/SDA, then a in ki2c_reset_bus()
290 addr = m->addr << 1; in ki2c_write_target_addr()
292 if (m->flags & I2C_M_RD) in ki2c_write_target_addr()
295 iowrite8(addr, ki2c->base + KI2C_DATA_REG); in ki2c_write_target_addr()
310 ki2c->base + KI2C_CONTROL_REG); in ki2c_start_addr()
314 ki2c->base + KI2C_CONTROL_REG); in ki2c_start_addr()
322 dev_dbg(&ki2c->auxdev->auxdev.dev, in ki2c_start_addr()
323 "%s wait for ACK err at 0x%02x!\n", __func__, m->addr); in ki2c_start_addr()
333 if ((m->flags & I2C_M_RD) == 0) { in ki2c_repstart_addr()
334 dev_err(&ki2c->auxdev->auxdev.dev, in ki2c_repstart_addr()
336 return -EINVAL; in ki2c_repstart_addr()
341 ki2c->base + KI2C_CONTROL_REG); in ki2c_repstart_addr()
345 dev_err(&ki2c->auxdev->auxdev.dev, in ki2c_repstart_addr()
346 "%s wait for MCF err at 0x%02x!\n", __func__, m->addr); in ki2c_repstart_addr()
350 /* write target-address byte */ in ki2c_repstart_addr()
355 dev_err(&ki2c->auxdev->auxdev.dev, in ki2c_repstart_addr()
356 "%s wait for ACK err at 0x%02x!\n", __func__, m->addr); in ki2c_repstart_addr()
363 iowrite8(KI2C_CONTROL_MEN, ki2c->base + KI2C_CONTROL_REG); in ki2c_stop()
374 iowrite8(data[i], ki2c->base + KI2C_DATA_REG); in ki2c_write()
395 /* if just one byte => send tx-nack after transfer */ in ki2c_read()
399 iowrite8(control, ki2c->base + KI2C_CONTROL_REG); in ki2c_read()
402 ioread8(ki2c->base + KI2C_DATA_REG); in ki2c_read()
409 if (i == len - 2) in ki2c_read()
410 /* send tx-nack after transfer of last byte */ in ki2c_read()
412 ki2c->base + KI2C_CONTROL_REG); in ki2c_read()
413 else if (i == len - 1) in ki2c_read()
419 ki2c->base + KI2C_CONTROL_REG); in ki2c_read()
422 data[i] = ioread8(ki2c->base + KI2C_DATA_REG); in ki2c_read()
448 if (m->flags & I2C_M_RD) in ki2c_xfer()
449 ret = ki2c_read(ki2c, m->buf, m->len); in ki2c_xfer()
451 ret = ki2c_write(ki2c, m->buf, m->len); in ki2c_xfer()
467 for (i = 0; i < ki2c->client_size; i++) in ki2c_unregister_devices()
468 i2c_unregister_device(ki2c->client[i]); in ki2c_unregister_devices()
473 struct i2c_board_info *info = ki2c->auxdev->info; in ki2c_register_devices()
476 /* register all known I2C devices */ in ki2c_register_devices()
477 for (i = 0; i < ki2c->client_size; i++) { in ki2c_register_devices()
482 client = i2c_new_scanned_device(&ki2c->adapter, &info[i], in ki2c_register_devices()
485 ki2c->client[i] = client; in ki2c_register_devices()
486 } else if (PTR_ERR(client) != -ENODEV) { in ki2c_register_devices()
487 ki2c->client_size = i; in ki2c_register_devices()
510 struct device *dev = &auxdev->dev; in ki2c_probe()
517 return -ENOMEM; in ki2c_probe()
518 ki2c->auxdev = container_of(auxdev, struct keba_i2c_auxdev, auxdev); in ki2c_probe()
519 ki2c->client = devm_kcalloc(dev, ki2c->auxdev->info_size, in ki2c_probe()
520 sizeof(*ki2c->client), GFP_KERNEL); in ki2c_probe()
521 if (!ki2c->client) in ki2c_probe()
522 return -ENOMEM; in ki2c_probe()
523 ki2c->client_size = ki2c->auxdev->info_size; in ki2c_probe()
526 ki2c->base = devm_ioremap_resource(dev, &ki2c->auxdev->io); in ki2c_probe()
527 if (IS_ERR(ki2c->base)) in ki2c_probe()
528 return PTR_ERR(ki2c->base); in ki2c_probe()
530 adap = &ki2c->adapter; in ki2c_probe()
531 strscpy(adap->name, "KEBA I2C adapter", sizeof(adap->name)); in ki2c_probe()
532 adap->owner = THIS_MODULE; in ki2c_probe()
533 adap->class = I2C_CLASS_HWMON; in ki2c_probe()
534 adap->algo = &ki2c_algo; in ki2c_probe()
535 adap->dev.parent = dev; in ki2c_probe()
540 iowrite8(KI2C_CONTROL_MEN, ki2c->base + KI2C_CONTROL_REG); in ki2c_probe()
542 /* reset bus before probing I2C devices */ in ki2c_probe()
562 iowrite8(KI2C_CONTROL_DISABLE, ki2c->base + KI2C_CONTROL_REG); in ki2c_probe()
573 iowrite8(KI2C_CONTROL_DISABLE, ki2c->base + KI2C_CONTROL_REG); in ki2c_remove()
579 { .name = "keba.i2c" },
593 MODULE_DESCRIPTION("KEBA I2C bus controller driver");