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: Alex Elder <elder@linaro.org> Signed-off-by: Greg Kroah-Hartman <greg@kroah.com>
This commit is contained in:
Родитель
bb2e1c9626
Коммит
d75286852b
|
@ -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,
|
||||
};
|
||||
|
||||
/*
|
||||
|
|
Загрузка…
Ссылка в новой задаче