aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/display/dc/core/dc_link_ddc.c
diff options
context:
space:
mode:
authorBhawanpreet Lakha <Bhawanpreet.Lakha@amd.com>2018-07-10 17:20:17 -0400
committerAlex Deucher <alexander.deucher@amd.com>2018-07-24 15:15:50 -0500
commit5c6ac7112fb2b73a5e4e7ac1648cdaceb558f268 (patch)
treefb1888c5effb18535f447a945001f8c3b53345f7 /drivers/gpu/drm/amd/display/dc/core/dc_link_ddc.c
parentdrm/amd/display: DPP CM ICSC AYCRCB8888 format support (diff)
downloadlinux-dev-5c6ac7112fb2b73a5e4e7ac1648cdaceb558f268.tar.xz
linux-dev-5c6ac7112fb2b73a5e4e7ac1648cdaceb558f268.zip
drm/amd/display: Decouple aux from i2c
[Why] Aux engine is created from i2caux layer. We want to remove this layer and use the engine directly. [How] Decouple aux engine from i2caux. Move aux engine related code to dce folder and use dc resource pool to manage the engine. And use the engine functions directly Signed-off-by: Bhawanpreet Lakha <Bhawanpreet.Lakha@amd.com> Reviewed-by: Harry Wentland <Harry.Wentland@amd.com> Acked-by: Leo Li <sunpeng.li@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/display/dc/core/dc_link_ddc.c')
-rw-r--r--drivers/gpu/drm/amd/display/dc/core/dc_link_ddc.c22
1 files changed, 10 insertions, 12 deletions
diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_link_ddc.c b/drivers/gpu/drm/amd/display/dc/core/dc_link_ddc.c
index 08c9d73b9ab7..4019fe07d291 100644
--- a/drivers/gpu/drm/amd/display/dc/core/dc_link_ddc.c
+++ b/drivers/gpu/drm/amd/display/dc/core/dc_link_ddc.c
@@ -33,10 +33,8 @@
#include "include/vector.h"
#include "core_types.h"
#include "dc_link_ddc.h"
-#include "i2caux/engine.h"
-#include "i2caux/i2c_engine.h"
-#include "i2caux/aux_engine.h"
-#include "i2caux/i2caux.h"
+#include "engine.h"
+#include "aux_engine.h"
#define AUX_POWER_UP_WA_DELAY 500
#define I2C_OVER_AUX_DEFER_WA_DELAY 70
@@ -641,9 +639,9 @@ int dc_link_aux_transfer(struct ddc_service *ddc,
enum aux_transaction_type type,
enum i2caux_transaction_action action)
{
- struct i2caux *i2caux = ddc->ctx->i2caux;
struct ddc *ddc_pin = ddc->ddc_pin;
- struct aux_engine *engine;
+ struct engine *engine;
+ struct aux_engine *aux_engine;
enum aux_channel_operation_result operation_result;
struct aux_request_transaction_data aux_req;
struct aux_reply_transaction_data aux_rep;
@@ -654,7 +652,8 @@ int dc_link_aux_transfer(struct ddc_service *ddc,
memset(&aux_req, 0, sizeof(aux_req));
memset(&aux_rep, 0, sizeof(aux_rep));
- engine = i2caux->funcs->acquire_aux_engine(i2caux, ddc_pin);
+ engine = ddc->ctx->dc->res_pool->engines[ddc_pin->pin_data->en];
+ aux_engine = engine->funcs->acquire(engine, ddc_pin);
aux_req.type = type;
aux_req.action = action;
@@ -664,15 +663,15 @@ int dc_link_aux_transfer(struct ddc_service *ddc,
aux_req.length = size;
aux_req.data = buffer;
- engine->funcs->submit_channel_request(engine, &aux_req);
- operation_result = engine->funcs->get_channel_status(engine, &returned_bytes);
+ aux_engine->funcs->submit_channel_request(aux_engine, &aux_req);
+ operation_result = aux_engine->funcs->get_channel_status(aux_engine, &returned_bytes);
switch (operation_result) {
case AUX_CHANNEL_OPERATION_SUCCEEDED:
res = returned_bytes;
if (res <= size && res >= 0)
- res = engine->funcs->read_channel_reply(engine, size,
+ res = aux_engine->funcs->read_channel_reply(aux_engine, size,
buffer, reply,
&status);
@@ -686,8 +685,7 @@ int dc_link_aux_transfer(struct ddc_service *ddc,
res = -1;
break;
}
-
- i2caux->funcs->release_engine(i2caux, &engine->base);
+ aux_engine->base.funcs->release_engine(&aux_engine->base);
return res;
}