diff options
| -rw-r--r-- | drivers/i2c/busses/i2c-s3c2410.c | 21 |
1 files changed, 10 insertions, 11 deletions
diff --git a/drivers/i2c/busses/i2c-s3c2410.c b/drivers/i2c/busses/i2c-s3c2410.c index 1305ef190fc1..7ad22c53564d 100644 --- a/drivers/i2c/busses/i2c-s3c2410.c +++ b/drivers/i2c/busses/i2c-s3c2410.c | |||
| @@ -323,7 +323,17 @@ static int i2s_s3c_irq_nextbyte(struct s3c24xx_i2c *i2c, unsigned long iicstat) | |||
| 323 | * end of the message, and if so, work out what to do | 323 | * end of the message, and if so, work out what to do |
| 324 | */ | 324 | */ |
| 325 | 325 | ||
| 326 | if (!(i2c->msg->flags & I2C_M_IGNORE_NAK)) { | ||
| 327 | if (iicstat & S3C2410_IICSTAT_LASTBIT) { | ||
| 328 | dev_dbg(i2c->dev, "WRITE: No Ack\n"); | ||
| 329 | |||
| 330 | s3c24xx_i2c_stop(i2c, -ECONNREFUSED); | ||
| 331 | goto out_ack; | ||
| 332 | } | ||
| 333 | } | ||
| 334 | |||
| 326 | retry_write: | 335 | retry_write: |
| 336 | |||
| 327 | if (!is_msgend(i2c)) { | 337 | if (!is_msgend(i2c)) { |
| 328 | byte = i2c->msg->buf[i2c->msg_ptr++]; | 338 | byte = i2c->msg->buf[i2c->msg_ptr++]; |
| 329 | writeb(byte, i2c->regs + S3C2410_IICDS); | 339 | writeb(byte, i2c->regs + S3C2410_IICDS); |
| @@ -377,17 +387,6 @@ static int i2s_s3c_irq_nextbyte(struct s3c24xx_i2c *i2c, unsigned long iicstat) | |||
| 377 | * going to do any more read/write | 387 | * going to do any more read/write |
| 378 | */ | 388 | */ |
| 379 | 389 | ||
| 380 | if (!(i2c->msg->flags & I2C_M_IGNORE_NAK) && | ||
| 381 | !(is_msglast(i2c) && is_lastmsg(i2c))) { | ||
| 382 | |||
| 383 | if (iicstat & S3C2410_IICSTAT_LASTBIT) { | ||
| 384 | dev_dbg(i2c->dev, "READ: No Ack\n"); | ||
| 385 | |||
| 386 | s3c24xx_i2c_stop(i2c, -ECONNREFUSED); | ||
| 387 | goto out_ack; | ||
| 388 | } | ||
| 389 | } | ||
| 390 | |||
| 391 | byte = readb(i2c->regs + S3C2410_IICDS); | 390 | byte = readb(i2c->regs + S3C2410_IICDS); |
| 392 | i2c->msg->buf[i2c->msg_ptr++] = byte; | 391 | i2c->msg->buf[i2c->msg_ptr++] = byte; |
| 393 | 392 | ||
