Commit d7528685 authored by Alex Elder's avatar Alex Elder Committed by Greg Kroah-Hartman

greybus: add write retry support for i2c

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: default avatarAlex Elder <elder@linaro.org>
Signed-off-by: default avatarGreg Kroah-Hartman <greg@kroah.com>
parent bb2e1c96
......@@ -382,9 +382,13 @@ static int gb_i2c_transfer_operation(struct gb_i2c_device *gb_i2c_dev,
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;
......
......@@ -16,7 +16,8 @@ enum gb_operation_status {
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,
};
/*
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment