Symbol: ki2c
drivers/i2c/busses/i2c-keba.c
100
static int ki2c_wait_for_mcf(struct ki2c *ki2c)
drivers/i2c/busses/i2c-keba.c
102
return ki2c_wait_for_bit(ki2c->base + KI2C_STATUS_REG, KI2C_STATUS_MCF,
drivers/i2c/busses/i2c-keba.c
103
ki2c->adapter.timeout);
drivers/i2c/busses/i2c-keba.c
106
static int ki2c_wait_for_data(struct ki2c *ki2c)
drivers/i2c/busses/i2c-keba.c
110
ret = ki2c_wait_for_mcf(ki2c);
drivers/i2c/busses/i2c-keba.c
114
return ki2c_wait_for_bit(ki2c->base + KI2C_STATUS_REG,
drivers/i2c/busses/i2c-keba.c
116
ki2c->adapter.timeout);
drivers/i2c/busses/i2c-keba.c
119
static int ki2c_wait_for_data_ack(struct ki2c *ki2c)
drivers/i2c/busses/i2c-keba.c
124
ret = ki2c_wait_for_data(ki2c);
drivers/i2c/busses/i2c-keba.c
129
reg = ioread8(ki2c->base + KI2C_STATUS_REG);
drivers/i2c/busses/i2c-keba.c
136
static int ki2c_has_capability(struct ki2c *ki2c, unsigned int cap)
drivers/i2c/busses/i2c-keba.c
138
unsigned int reg = ioread8(ki2c->base + KI2C_CAPABILITY_REG);
drivers/i2c/busses/i2c-keba.c
143
static int ki2c_get_scl(struct ki2c *ki2c)
drivers/i2c/busses/i2c-keba.c
145
unsigned int reg = ioread8(ki2c->base + KI2C_STATUS_DC_REG);
drivers/i2c/busses/i2c-keba.c
151
static int ki2c_get_sda(struct ki2c *ki2c)
drivers/i2c/busses/i2c-keba.c
153
unsigned int reg = ioread8(ki2c->base + KI2C_STATUS_DC_REG);
drivers/i2c/busses/i2c-keba.c
159
static void ki2c_set_scl(struct ki2c *ki2c, int val)
drivers/i2c/busses/i2c-keba.c
164
control_dc = ioread8(ki2c->base + KI2C_CONTROL_DC_REG);
drivers/i2c/busses/i2c-keba.c
169
iowrite8(control_dc, ki2c->base + KI2C_CONTROL_DC_REG);
drivers/i2c/busses/i2c-keba.c
182
static int ki2c_reset_bus_bitwise(struct ki2c *ki2c)
drivers/i2c/busses/i2c-keba.c
189
iowrite8(0, ki2c->base + KI2C_CONTROL_REG);
drivers/i2c/busses/i2c-keba.c
192
ki2c_set_scl(ki2c, val);
drivers/i2c/busses/i2c-keba.c
197
if (!ki2c_get_scl(ki2c)) {
drivers/i2c/busses/i2c-keba.c
198
dev_err(&ki2c->auxdev->auxdev.dev,
drivers/i2c/busses/i2c-keba.c
205
if (ki2c_get_sda(ki2c))
drivers/i2c/busses/i2c-keba.c
210
ki2c_set_scl(ki2c, val);
drivers/i2c/busses/i2c-keba.c
214
if (!ki2c_get_sda(ki2c)) {
drivers/i2c/busses/i2c-keba.c
215
dev_err(&ki2c->auxdev->auxdev.dev, "SDA is still low!\n");
drivers/i2c/busses/i2c-keba.c
220
iowrite8(KI2C_CONTROL_MEN, ki2c->base + KI2C_CONTROL_REG);
drivers/i2c/busses/i2c-keba.c
237
static int ki2c_reset_bus_bytewise(struct ki2c *ki2c)
drivers/i2c/busses/i2c-keba.c
242
iowrite8(0xFF, ki2c->base + KI2C_DATA_REG);
drivers/i2c/busses/i2c-keba.c
246
ki2c->base + KI2C_CONTROL_REG);
drivers/i2c/busses/i2c-keba.c
247
ret = ki2c_wait_for_mcf(ki2c);
drivers/i2c/busses/i2c-keba.c
249
dev_err(&ki2c->auxdev->auxdev.dev, "Start condition failed\n");
drivers/i2c/busses/i2c-keba.c
256
ki2c->base + KI2C_CONTROL_REG);
drivers/i2c/busses/i2c-keba.c
257
ret = ki2c_wait_for_mcf(ki2c);
drivers/i2c/busses/i2c-keba.c
259
dev_err(&ki2c->auxdev->auxdev.dev, "Stop condition failed\n");
drivers/i2c/busses/i2c-keba.c
264
static int ki2c_reset_bus(struct ki2c *ki2c)
drivers/i2c/busses/i2c-keba.c
268
ret = ki2c_inuse_lock(ki2c);
drivers/i2c/busses/i2c-keba.c
276
if (ki2c_has_capability(ki2c, KI2C_CAPABILITY_DC))
drivers/i2c/busses/i2c-keba.c
277
ret = ki2c_reset_bus_bitwise(ki2c);
drivers/i2c/busses/i2c-keba.c
279
ret = ki2c_reset_bus_bytewise(ki2c);
drivers/i2c/busses/i2c-keba.c
281
ki2c_inuse_unlock(ki2c);
drivers/i2c/busses/i2c-keba.c
286
static void ki2c_write_target_addr(struct ki2c *ki2c, struct i2c_msg *m)
drivers/i2c/busses/i2c-keba.c
295
iowrite8(addr, ki2c->base + KI2C_DATA_REG);
drivers/i2c/busses/i2c-keba.c
298
static int ki2c_start_addr(struct ki2c *ki2c, struct i2c_msg *m)
drivers/i2c/busses/i2c-keba.c
306
ki2c_write_target_addr(ki2c, m);
drivers/i2c/busses/i2c-keba.c
310
ki2c->base + KI2C_CONTROL_REG);
drivers/i2c/busses/i2c-keba.c
314
ki2c->base + KI2C_CONTROL_REG);
drivers/i2c/busses/i2c-keba.c
316
ret = ki2c_wait_for_data_ack(ki2c);
drivers/i2c/busses/i2c-keba.c
322
dev_dbg(&ki2c->auxdev->auxdev.dev,
drivers/i2c/busses/i2c-keba.c
328
static int ki2c_repstart_addr(struct ki2c *ki2c, struct i2c_msg *m)
drivers/i2c/busses/i2c-keba.c
334
dev_err(&ki2c->auxdev->auxdev.dev,
drivers/i2c/busses/i2c-keba.c
341
ki2c->base + KI2C_CONTROL_REG);
drivers/i2c/busses/i2c-keba.c
343
ret = ki2c_wait_for_mcf(ki2c);
drivers/i2c/busses/i2c-keba.c
345
dev_err(&ki2c->auxdev->auxdev.dev,
drivers/i2c/busses/i2c-keba.c
351
ki2c_write_target_addr(ki2c, m);
drivers/i2c/busses/i2c-keba.c
353
ret = ki2c_wait_for_data_ack(ki2c);
drivers/i2c/busses/i2c-keba.c
355
dev_err(&ki2c->auxdev->auxdev.dev,
drivers/i2c/busses/i2c-keba.c
361
static void ki2c_stop(struct ki2c *ki2c)
drivers/i2c/busses/i2c-keba.c
363
iowrite8(KI2C_CONTROL_MEN, ki2c->base + KI2C_CONTROL_REG);
drivers/i2c/busses/i2c-keba.c
364
ki2c_wait_for_mcf(ki2c);
drivers/i2c/busses/i2c-keba.c
367
static int ki2c_write(struct ki2c *ki2c, const u8 *data, int len)
drivers/i2c/busses/i2c-keba.c
374
iowrite8(data[i], ki2c->base + KI2C_DATA_REG);
drivers/i2c/busses/i2c-keba.c
376
ret = ki2c_wait_for_data_ack(ki2c);
drivers/i2c/busses/i2c-keba.c
384
static int ki2c_read(struct ki2c *ki2c, u8 *data, int len)
drivers/i2c/busses/i2c-keba.c
399
iowrite8(control, ki2c->base + KI2C_CONTROL_REG);
drivers/i2c/busses/i2c-keba.c
402
ioread8(ki2c->base + KI2C_DATA_REG);
drivers/i2c/busses/i2c-keba.c
405
ret = ki2c_wait_for_data(ki2c);
drivers/i2c/busses/i2c-keba.c
412
ki2c->base + KI2C_CONTROL_REG);
drivers/i2c/busses/i2c-keba.c
419
ki2c->base + KI2C_CONTROL_REG);
drivers/i2c/busses/i2c-keba.c
422
data[i] = ioread8(ki2c->base + KI2C_DATA_REG);
drivers/i2c/busses/i2c-keba.c
430
struct ki2c *ki2c = i2c_get_adapdata(adap);
drivers/i2c/busses/i2c-keba.c
434
ret = ki2c_inuse_lock(ki2c);
drivers/i2c/busses/i2c-keba.c
442
ret = ki2c_start_addr(ki2c, m);
drivers/i2c/busses/i2c-keba.c
444
ret = ki2c_repstart_addr(ki2c, m);
drivers/i2c/busses/i2c-keba.c
449
ret = ki2c_read(ki2c, m->buf, m->len);
drivers/i2c/busses/i2c-keba.c
451
ret = ki2c_write(ki2c, m->buf, m->len);
drivers/i2c/busses/i2c-keba.c
456
ki2c_stop(ki2c);
drivers/i2c/busses/i2c-keba.c
458
ki2c_inuse_unlock(ki2c);
drivers/i2c/busses/i2c-keba.c
463
static void ki2c_unregister_devices(struct ki2c *ki2c)
drivers/i2c/busses/i2c-keba.c
467
for (i = 0; i < ki2c->client_size; i++)
drivers/i2c/busses/i2c-keba.c
468
i2c_unregister_device(ki2c->client[i]);
drivers/i2c/busses/i2c-keba.c
471
static int ki2c_register_devices(struct ki2c *ki2c)
drivers/i2c/busses/i2c-keba.c
473
struct i2c_board_info *info = ki2c->auxdev->info;
drivers/i2c/busses/i2c-keba.c
477
for (i = 0; i < ki2c->client_size; i++) {
drivers/i2c/busses/i2c-keba.c
482
client = i2c_new_scanned_device(&ki2c->adapter, &info[i],
drivers/i2c/busses/i2c-keba.c
485
ki2c->client[i] = client;
drivers/i2c/busses/i2c-keba.c
487
ki2c->client_size = i;
drivers/i2c/busses/i2c-keba.c
488
ki2c_unregister_devices(ki2c);
drivers/i2c/busses/i2c-keba.c
512
struct ki2c *ki2c;
drivers/i2c/busses/i2c-keba.c
515
ki2c = devm_kzalloc(dev, sizeof(*ki2c), GFP_KERNEL);
drivers/i2c/busses/i2c-keba.c
516
if (!ki2c)
drivers/i2c/busses/i2c-keba.c
518
ki2c->auxdev = container_of(auxdev, struct keba_i2c_auxdev, auxdev);
drivers/i2c/busses/i2c-keba.c
519
ki2c->client = devm_kcalloc(dev, ki2c->auxdev->info_size,
drivers/i2c/busses/i2c-keba.c
520
sizeof(*ki2c->client), GFP_KERNEL);
drivers/i2c/busses/i2c-keba.c
521
if (!ki2c->client)
drivers/i2c/busses/i2c-keba.c
523
ki2c->client_size = ki2c->auxdev->info_size;
drivers/i2c/busses/i2c-keba.c
524
auxiliary_set_drvdata(auxdev, ki2c);
drivers/i2c/busses/i2c-keba.c
526
ki2c->base = devm_ioremap_resource(dev, &ki2c->auxdev->io);
drivers/i2c/busses/i2c-keba.c
527
if (IS_ERR(ki2c->base))
drivers/i2c/busses/i2c-keba.c
528
return PTR_ERR(ki2c->base);
drivers/i2c/busses/i2c-keba.c
530
adap = &ki2c->adapter;
drivers/i2c/busses/i2c-keba.c
537
i2c_set_adapdata(adap, ki2c);
drivers/i2c/busses/i2c-keba.c
540
iowrite8(KI2C_CONTROL_MEN, ki2c->base + KI2C_CONTROL_REG);
drivers/i2c/busses/i2c-keba.c
543
ret = ki2c_reset_bus(ki2c);
drivers/i2c/busses/i2c-keba.c
553
ret = ki2c_register_devices(ki2c);
drivers/i2c/busses/i2c-keba.c
562
iowrite8(KI2C_CONTROL_DISABLE, ki2c->base + KI2C_CONTROL_REG);
drivers/i2c/busses/i2c-keba.c
568
struct ki2c *ki2c = auxiliary_get_drvdata(auxdev);
drivers/i2c/busses/i2c-keba.c
570
ki2c_unregister_devices(ki2c);
drivers/i2c/busses/i2c-keba.c
573
iowrite8(KI2C_CONTROL_DISABLE, ki2c->base + KI2C_CONTROL_REG);
drivers/i2c/busses/i2c-keba.c
58
static int ki2c_inuse_lock(struct ki2c *ki2c)
drivers/i2c/busses/i2c-keba.c
77
ret = readb_poll_timeout(ki2c->base + KI2C_STATUS_REG,
drivers/i2c/busses/i2c-keba.c
81
dev_err(&ki2c->auxdev->auxdev.dev, "%s err!\n", __func__);
drivers/i2c/busses/i2c-keba.c
86
static void ki2c_inuse_unlock(struct ki2c *ki2c)
drivers/i2c/busses/i2c-keba.c
89
iowrite8(KI2C_STATUS_IN_USE, ki2c->base + KI2C_STATUS_REG);