Please have a look at Documentation/i2c/fault-codes. -EAGAIN is only for arbitration loss. > + /* ACK allowed on pre-terminal bytes only */ > + case STAT_RXDATA_ACK: > + if (!final_read) > + return 0; > + return -EAGAIN; > + > + /* NAK allowed on terminal byte only */ > + case STAT_RXDATA_NAK: > + if (final_read) > + return 0; > + return -EAGAIN; -EIO? Can this happen? It is the master who sends the NAK, so we are in control of that. > + > + /* Arbitration lost */ > + case STAT_LOST_ARB_38: > + case STAT_LOST_ARB_68: > + case STAT_LOST_ARB_78: > + case STAT_LOST_ARB_B0: > + return -EAGAIN; OK. > + > + /* Being addressed as slave, should back off & listen */ > + case STAT_SLAVE_60: > + case STAT_SLAVE_70: > + case STAT_GENDATA_ACK: > + case STAT_GENDATA_NAK: > + return -EIO; -EOPNOTSUPP? > + > + /* Core busy as slave */ > + case STAT_SLAVE_80: > + case STAT_SLAVE_88: > + case STAT_SLAVE_A0: > + case STAT_SLAVE_A8: > + case STAT_SLAVE_LOST: > + case STAT_SLAVE_NAK: > + case STAT_SLAVE_ACK: > + return -EIO; -EOPNOTSUPP? > + case STAT_TXDATA_NAK: -EIO? > + case STAT_TXADDR_NAK: > + case STAT_RXADDR_NAK: > + case STAT_AD2W_NAK: -ENXIO? > + return -EAGAIN; > + default: > + dev_err(i2c->dev, "unhandled state: %d\n", stat); > + return -EIO; OK.
Attachment:
signature.asc
Description: PGP signature