summaryrefslogtreecommitdiff
path: root/drivers/gpu/drm/amd/display/dc/i2caux/aux_engine.c
diff options
context:
space:
mode:
authorShirish S <shirish.s@amd.com>2018-02-23 16:10:13 +0530
committerAlex Deucher <alexander.deucher@amd.com>2018-02-28 15:38:40 -0500
commitcc195141133ac3e767d930bedd8294ceebf1f10b (patch)
tree01a41c8eb736fb6ea9ef63d7998cb5cbcfd968ab /drivers/gpu/drm/amd/display/dc/i2caux/aux_engine.c
parent9f0178fb67699992d38601cb923b434f9986dd68 (diff)
downloadlinux-cc195141133ac3e767d930bedd8294ceebf1f10b.tar.gz
linux-cc195141133ac3e767d930bedd8294ceebf1f10b.tar.bz2
linux-cc195141133ac3e767d930bedd8294ceebf1f10b.zip
drm/amd/display: make dm_dp_aux_transfer return payload bytes instead of size
The drm layer expects aux->transfer() to return the payload bytes read. Currently dm_dp_aux_transfer() returns the payload size which does not gets updated during the read, hence not giving the right data for the drm layer to pars edid. This leads to the drm layer to conclude as the edid is BAD and hence some monitors/devices dont get detected properly. This patch changes the return type of dm_dp_aux_transfer() to actual bytes read during DP_AUX_NATIVE_READ & DP_AUX_I2C_READ. Signed-off-by: Shirish S <shirish.s@amd.com> Reviewed-by: Harry Wentland <harry.wentland@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/display/dc/i2caux/aux_engine.c')
-rw-r--r--drivers/gpu/drm/amd/display/dc/i2caux/aux_engine.c15
1 files changed, 2 insertions, 13 deletions
diff --git a/drivers/gpu/drm/amd/display/dc/i2caux/aux_engine.c b/drivers/gpu/drm/amd/display/dc/i2caux/aux_engine.c
index 0b1db48fef36..9c42fe5a0f27 100644
--- a/drivers/gpu/drm/amd/display/dc/i2caux/aux_engine.c
+++ b/drivers/gpu/drm/amd/display/dc/i2caux/aux_engine.c
@@ -126,20 +126,8 @@ static void process_read_reply(
ctx->status =
I2CAUX_TRANSACTION_STATUS_FAILED_PROTOCOL_ERROR;
ctx->operation_succeeded = false;
- } else if (ctx->returned_byte < ctx->current_read_length) {
- ctx->current_read_length -= ctx->returned_byte;
-
- ctx->offset += ctx->returned_byte;
-
- ++ctx->invalid_reply_retry_aux_on_ack;
-
- if (ctx->invalid_reply_retry_aux_on_ack >
- AUX_INVALID_REPLY_RETRY_COUNTER) {
- ctx->status =
- I2CAUX_TRANSACTION_STATUS_FAILED_PROTOCOL_ERROR;
- ctx->operation_succeeded = false;
- }
} else {
+ ctx->current_read_length = ctx->returned_byte;
ctx->status = I2CAUX_TRANSACTION_STATUS_SUCCEEDED;
ctx->transaction_complete = true;
ctx->operation_succeeded = true;
@@ -292,6 +280,7 @@ static bool read_command(
ctx.operation_succeeded);
}
+ request->payload.length = ctx.reply.length;
return ctx.operation_succeeded;
}