It is expected that i2c writes may fail, and in that case the driver
simply retries some number of times before actually treating it as a
failure. Define a GB_OP_RETRY status, which is interpreted by the
i2c driver as an indication a retry is in order. We just translate
that into an EAGAIN error passed back to the i2c core.
Signed-off-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <greg@kroah.com>
response = operation->response_payload;
if (response->status) {
- gb_connection_err(connection, "transfer response %hhu",
- response->status);
- ret = -EIO;
+ if (response->status == GB_OP_RETRY) {
+ ret = -EAGAIN;
+ } else {
+ gb_connection_err(connection, "transfer response %hhu",
+ response->status);
+ ret = -EIO;
+ }
} else {
gb_i2c_transfer_response(msgs, msg_count, response->data);
ret = msg_count;
GB_OP_INVALID = 1,
GB_OP_NO_MEMORY = 2,
GB_OP_INTERRUPTED = 3,
- GB_OP_PROTOCOL_BAD = 4,
+ GB_OP_RETRY = 4,
+ GB_OP_PROTOCOL_BAD = 5,
};
/*