aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/i2c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/i2c')
-rw-r--r--drivers/i2c/busses/i2c-rcar.c10
-rw-r--r--drivers/i2c/i2c-slave-eeprom.c12
2 files changed, 10 insertions, 12 deletions
diff --git a/drivers/i2c/busses/i2c-rcar.c b/drivers/i2c/busses/i2c-rcar.c
index 71a6e07eb7ab..5a84bea5b845 100644
--- a/drivers/i2c/busses/i2c-rcar.c
+++ b/drivers/i2c/busses/i2c-rcar.c
@@ -382,11 +382,11 @@ static bool rcar_i2c_slave_irq(struct rcar_i2c_priv *priv)
382 if (ssr_filtered & SAR) { 382 if (ssr_filtered & SAR) {
383 /* read or write request */ 383 /* read or write request */
384 if (ssr_raw & STM) { 384 if (ssr_raw & STM) {
385 i2c_slave_event(priv->slave, I2C_SLAVE_REQ_READ_START, &value); 385 i2c_slave_event(priv->slave, I2C_SLAVE_READ_REQUESTED, &value);
386 rcar_i2c_write(priv, ICRXTX, value); 386 rcar_i2c_write(priv, ICRXTX, value);
387 rcar_i2c_write(priv, ICSIER, SDE | SSR | SAR); 387 rcar_i2c_write(priv, ICSIER, SDE | SSR | SAR);
388 } else { 388 } else {
389 i2c_slave_event(priv->slave, I2C_SLAVE_REQ_WRITE_START, &value); 389 i2c_slave_event(priv->slave, I2C_SLAVE_WRITE_REQUESTED, &value);
390 rcar_i2c_read(priv, ICRXTX); /* dummy read */ 390 rcar_i2c_read(priv, ICRXTX); /* dummy read */
391 rcar_i2c_write(priv, ICSIER, SDR | SSR | SAR); 391 rcar_i2c_write(priv, ICSIER, SDR | SSR | SAR);
392 } 392 }
@@ -406,17 +406,15 @@ static bool rcar_i2c_slave_irq(struct rcar_i2c_priv *priv)
406 int ret; 406 int ret;
407 407
408 value = rcar_i2c_read(priv, ICRXTX); 408 value = rcar_i2c_read(priv, ICRXTX);
409 ret = i2c_slave_event(priv->slave, I2C_SLAVE_REQ_WRITE_END, &value); 409 ret = i2c_slave_event(priv->slave, I2C_SLAVE_WRITE_RECEIVED, &value);
410 /* Send NACK in case of error */ 410 /* Send NACK in case of error */
411 rcar_i2c_write(priv, ICSCR, SIE | SDBS | (ret < 0 ? FNA : 0)); 411 rcar_i2c_write(priv, ICSCR, SIE | SDBS | (ret < 0 ? FNA : 0));
412 i2c_slave_event(priv->slave, I2C_SLAVE_REQ_WRITE_START, &value);
413 rcar_i2c_write(priv, ICSSR, ~SDR & 0xff); 412 rcar_i2c_write(priv, ICSSR, ~SDR & 0xff);
414 } 413 }
415 414
416 /* master wants to read from us */ 415 /* master wants to read from us */
417 if (ssr_filtered & SDE) { 416 if (ssr_filtered & SDE) {
418 i2c_slave_event(priv->slave, I2C_SLAVE_REQ_READ_END, &value); 417 i2c_slave_event(priv->slave, I2C_SLAVE_READ_PROCESSED, &value);
419 i2c_slave_event(priv->slave, I2C_SLAVE_REQ_READ_START, &value);
420 rcar_i2c_write(priv, ICRXTX, value); 418 rcar_i2c_write(priv, ICRXTX, value);
421 rcar_i2c_write(priv, ICSSR, ~SDE & 0xff); 419 rcar_i2c_write(priv, ICSSR, ~SDE & 0xff);
422 } 420 }
diff --git a/drivers/i2c/i2c-slave-eeprom.c b/drivers/i2c/i2c-slave-eeprom.c
index cf9b09db092f..3fb45d894d80 100644
--- a/drivers/i2c/i2c-slave-eeprom.c
+++ b/drivers/i2c/i2c-slave-eeprom.c
@@ -36,7 +36,7 @@ static int i2c_slave_eeprom_slave_cb(struct i2c_client *client,
36 struct eeprom_data *eeprom = i2c_get_clientdata(client); 36 struct eeprom_data *eeprom = i2c_get_clientdata(client);
37 37
38 switch (event) { 38 switch (event) {
39 case I2C_SLAVE_REQ_WRITE_END: 39 case I2C_SLAVE_WRITE_RECEIVED:
40 if (eeprom->first_write) { 40 if (eeprom->first_write) {
41 eeprom->buffer_idx = *val; 41 eeprom->buffer_idx = *val;
42 eeprom->first_write = false; 42 eeprom->first_write = false;
@@ -47,17 +47,17 @@ static int i2c_slave_eeprom_slave_cb(struct i2c_client *client,
47 } 47 }
48 break; 48 break;
49 49
50 case I2C_SLAVE_REQ_READ_START: 50 case I2C_SLAVE_READ_PROCESSED:
51 eeprom->buffer_idx++;
52 /* fallthrough */
53 case I2C_SLAVE_READ_REQUESTED:
51 spin_lock(&eeprom->buffer_lock); 54 spin_lock(&eeprom->buffer_lock);
52 *val = eeprom->buffer[eeprom->buffer_idx]; 55 *val = eeprom->buffer[eeprom->buffer_idx];
53 spin_unlock(&eeprom->buffer_lock); 56 spin_unlock(&eeprom->buffer_lock);
54 break; 57 break;
55 58
56 case I2C_SLAVE_REQ_READ_END:
57 eeprom->buffer_idx++;
58 break;
59
60 case I2C_SLAVE_STOP: 59 case I2C_SLAVE_STOP:
60 case I2C_SLAVE_WRITE_REQUESTED:
61 eeprom->first_write = true; 61 eeprom->first_write = true;
62 break; 62 break;
63 63