diff options
| -rw-r--r-- | drivers/i2c/busses/i2c-xiic.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/i2c/busses/i2c-xiic.c b/drivers/i2c/busses/i2c-xiic.c index 9a71e50d21f1..0c51c0ffdda9 100644 --- a/drivers/i2c/busses/i2c-xiic.c +++ b/drivers/i2c/busses/i2c-xiic.c | |||
| @@ -532,6 +532,7 @@ static void xiic_start_recv(struct xiic_i2c *i2c) | |||
| 532 | { | 532 | { |
| 533 | u8 rx_watermark; | 533 | u8 rx_watermark; |
| 534 | struct i2c_msg *msg = i2c->rx_msg = i2c->tx_msg; | 534 | struct i2c_msg *msg = i2c->rx_msg = i2c->tx_msg; |
| 535 | unsigned long flags; | ||
| 535 | 536 | ||
| 536 | /* Clear and enable Rx full interrupt. */ | 537 | /* Clear and enable Rx full interrupt. */ |
| 537 | xiic_irq_clr_en(i2c, XIIC_INTR_RX_FULL_MASK | XIIC_INTR_TX_ERROR_MASK); | 538 | xiic_irq_clr_en(i2c, XIIC_INTR_RX_FULL_MASK | XIIC_INTR_TX_ERROR_MASK); |
| @@ -547,6 +548,7 @@ static void xiic_start_recv(struct xiic_i2c *i2c) | |||
| 547 | rx_watermark = IIC_RX_FIFO_DEPTH; | 548 | rx_watermark = IIC_RX_FIFO_DEPTH; |
| 548 | xiic_setreg8(i2c, XIIC_RFD_REG_OFFSET, rx_watermark - 1); | 549 | xiic_setreg8(i2c, XIIC_RFD_REG_OFFSET, rx_watermark - 1); |
| 549 | 550 | ||
| 551 | local_irq_save(flags); | ||
| 550 | if (!(msg->flags & I2C_M_NOSTART)) | 552 | if (!(msg->flags & I2C_M_NOSTART)) |
| 551 | /* write the address */ | 553 | /* write the address */ |
| 552 | xiic_setreg16(i2c, XIIC_DTR_REG_OFFSET, | 554 | xiic_setreg16(i2c, XIIC_DTR_REG_OFFSET, |
| @@ -556,6 +558,8 @@ static void xiic_start_recv(struct xiic_i2c *i2c) | |||
| 556 | 558 | ||
| 557 | xiic_setreg16(i2c, XIIC_DTR_REG_OFFSET, | 559 | xiic_setreg16(i2c, XIIC_DTR_REG_OFFSET, |
| 558 | msg->len | ((i2c->nmsgs == 1) ? XIIC_TX_DYN_STOP_MASK : 0)); | 560 | msg->len | ((i2c->nmsgs == 1) ? XIIC_TX_DYN_STOP_MASK : 0)); |
| 561 | local_irq_restore(flags); | ||
| 562 | |||
| 559 | if (i2c->nmsgs == 1) | 563 | if (i2c->nmsgs == 1) |
| 560 | /* very last, enable bus not busy as well */ | 564 | /* very last, enable bus not busy as well */ |
| 561 | xiic_irq_clr_en(i2c, XIIC_INTR_BNB_MASK); | 565 | xiic_irq_clr_en(i2c, XIIC_INTR_BNB_MASK); |
