Skip to content

Commit b217105

Browse files
committed
drm/amd/display/dm: handle OEM i2c buses in i2c functions
Allow the creation of an OEM i2c bus and use the proper DC helpers for that case. Reviewed-by: Harry Wentland <harry.wentland@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
1 parent 44810f8 commit b217105

File tree

2 files changed

+21
-9
lines changed

2 files changed

+21
-9
lines changed

drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -609,6 +609,7 @@ struct amdgpu_i2c_adapter {
609609
struct i2c_adapter base;
610610

611611
struct ddc_service *ddc_service;
612+
bool oem;
612613
};
613614

614615
#define TO_DM_AUX(x) container_of((x), struct amdgpu_dm_dp_aux, aux)

drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8301,11 +8301,18 @@ static int amdgpu_dm_i2c_xfer(struct i2c_adapter *i2c_adap,
83018301
cmd.payloads[i].data = msgs[i].buf;
83028302
}
83038303

8304-
if (dc_submit_i2c(
8305-
ddc_service->ctx->dc,
8306-
ddc_service->link->link_index,
8307-
&cmd))
8308-
result = num;
8304+
if (i2c->oem) {
8305+
if (dc_submit_i2c_oem(
8306+
ddc_service->ctx->dc,
8307+
&cmd))
8308+
result = num;
8309+
} else {
8310+
if (dc_submit_i2c(
8311+
ddc_service->ctx->dc,
8312+
ddc_service->link->link_index,
8313+
&cmd))
8314+
result = num;
8315+
}
83098316

83108317
kfree(cmd.payloads);
83118318
return result;
@@ -8322,7 +8329,7 @@ static const struct i2c_algorithm amdgpu_dm_i2c_algo = {
83228329
};
83238330

83248331
static struct amdgpu_i2c_adapter *
8325-
create_i2c(struct ddc_service *ddc_service)
8332+
create_i2c(struct ddc_service *ddc_service, bool oem)
83268333
{
83278334
struct amdgpu_device *adev = ddc_service->ctx->driver_context;
83288335
struct amdgpu_i2c_adapter *i2c;
@@ -8333,10 +8340,14 @@ create_i2c(struct ddc_service *ddc_service)
83338340
i2c->base.owner = THIS_MODULE;
83348341
i2c->base.dev.parent = &adev->pdev->dev;
83358342
i2c->base.algo = &amdgpu_dm_i2c_algo;
8336-
snprintf(i2c->base.name, sizeof(i2c->base.name), "AMDGPU DM i2c hw bus %d",
8337-
ddc_service->link->link_index);
8343+
if (oem)
8344+
snprintf(i2c->base.name, sizeof(i2c->base.name), "AMDGPU DM i2c OEM bus");
8345+
else
8346+
snprintf(i2c->base.name, sizeof(i2c->base.name), "AMDGPU DM i2c hw bus %d",
8347+
ddc_service->link->link_index);
83388348
i2c_set_adapdata(&i2c->base, i2c);
83398349
i2c->ddc_service = ddc_service;
8350+
i2c->oem = oem;
83408351

83418352
return i2c;
83428353
}
@@ -8382,7 +8393,7 @@ static int amdgpu_dm_connector_init(struct amdgpu_display_manager *dm,
83828393
link->priv = aconnector;
83838394

83848395

8385-
i2c = create_i2c(link->ddc);
8396+
i2c = create_i2c(link->ddc, false);
83868397
if (!i2c) {
83878398
DRM_ERROR("Failed to create i2c adapter data\n");
83888399
return -ENOMEM;

0 commit comments

Comments
 (0)