[PATCH v2] drm/amd/display: restore edid reading from a given i2c adapter
Alex Hung
alex.hung at amd.com
Fri Feb 21 20:47:41 UTC 2025
Reviewed-by: Alex Hung <alex.hung at amd.com>
On 2/15/25 14:15, Melissa Wen wrote:
> When switching to drm_edid, we slightly changed how to get edid by
> removing the possibility of getting them from dc_link when in aux
> transaction mode. As MST doesn't initialize the connector with
> `drm_connector_init_with_ddc()`, restore the original behavior to avoid
> functional changes.
>
> v2:
> - Fix build warning of unchecked dereference (kernel test bot)
>
> CC: Alex Hung <alex.hung at amd.com>
> CC: Mario Limonciello <mario.limonciello at amd.com>
> CC: Roman Li <Roman.Li at amd.com>
> CC: Aurabindo Pillai <Aurabindo.Pillai at amd.com>
> Fixes: 48edb2a4256e ("drm/amd/display: switch amdgpu_dm_connector to use struct drm_edid")
> Signed-off-by: Melissa Wen <mwen at igalia.com>
> ---
> .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 17 +++++++++++++++--
> 1 file changed, 15 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> index a8421c07b160..142d366e3347 100644
> --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> @@ -7269,8 +7269,14 @@ static void amdgpu_dm_connector_funcs_force(struct drm_connector *connector)
> struct dc_link *dc_link = aconnector->dc_link;
> struct dc_sink *dc_em_sink = aconnector->dc_em_sink;
> const struct drm_edid *drm_edid;
> + struct i2c_adapter *ddc;
>
> - drm_edid = drm_edid_read(connector);
> + if (dc_link && dc_link->aux_mode)
> + ddc = &aconnector->dm_dp_aux.aux.ddc;
> + else
> + ddc = &aconnector->i2c->base;
> +
> + drm_edid = drm_edid_read_ddc(connector, ddc);
> drm_edid_connector_update(connector, drm_edid);
> if (!drm_edid) {
> DRM_ERROR("No EDID found on connector: %s.\n", connector->name);
> @@ -7315,14 +7321,21 @@ static int get_modes(struct drm_connector *connector)
> static void create_eml_sink(struct amdgpu_dm_connector *aconnector)
> {
> struct drm_connector *connector = &aconnector->base;
> + struct dc_link *dc_link = aconnector->dc_link;
> struct dc_sink_init_data init_params = {
> .link = aconnector->dc_link,
> .sink_signal = SIGNAL_TYPE_VIRTUAL
> };
> const struct drm_edid *drm_edid;
> const struct edid *edid;
> + struct i2c_adapter *ddc;
>
> - drm_edid = drm_edid_read(connector);
> + if (dc_link && dc_link->aux_mode)
> + ddc = &aconnector->dm_dp_aux.aux.ddc;
> + else
> + ddc = &aconnector->i2c->base;
> +
> + drm_edid = drm_edid_read_ddc(connector, ddc);
> drm_edid_connector_update(connector, drm_edid);
> if (!drm_edid) {
> DRM_ERROR("No EDID found on connector: %s.\n", connector->name);
More information about the amd-gfx
mailing list