| From 28f2eee9fc036f03f6050d2574b03b22e4ea9f5d Mon Sep 17 00:00:00 2001 |
| From: Simon Ser <contact@emersion.fr> |
| Date: Fri, 10 Sep 2021 15:37:41 +0000 |
| Subject: [PATCH] amd/display: enable panel orientation quirks |
| Git-commit: cd51a57eb59fd56f3fe7ce9cadef444451bcf804 |
| Patch-mainline: v5.15-rc2 |
| References: stable-5.14.9 |
| |
| [ Upstream commit cd51a57eb59fd56f3fe7ce9cadef444451bcf804 ] |
| |
| This patch allows panel orientation quirks from DRM core to be |
| used. They attach a DRM connector property "panel orientation" |
| which indicates in which direction the panel has been mounted. |
| Some machines have the internal screen mounted with a rotation. |
| |
| Since the panel orientation quirks need the native mode from the |
| EDID, check for it in amdgpu_dm_connector_ddc_get_modes. |
| |
| Signed-off-by: Simon Ser <contact@emersion.fr> |
| Cc: Alex Deucher <alexander.deucher@amd.com> |
| Cc: Harry Wentland <hwentlan@amd.com> |
| Cc: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com> |
| Reviewed-by: Harry Wentland <harry.wentland@amd.com> |
| Signed-off-by: Alex Deucher <alexander.deucher@amd.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| Acked-by: Takashi Iwai <tiwai@suse.de> |
| |
| |
| .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 28 +++++++++++++++++++ |
| 1 file changed, 28 insertions(+) |
| |
| 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 e7cf79b386da..3bb567ea2cef 100644 |
| |
| |
| @@ -7514,6 +7514,32 @@ static void amdgpu_dm_connector_add_common_modes(struct drm_encoder *encoder, |
| } |
| } |
| |
| +static void amdgpu_set_panel_orientation(struct drm_connector *connector) |
| +{ |
| + struct drm_encoder *encoder; |
| + struct amdgpu_encoder *amdgpu_encoder; |
| + const struct drm_display_mode *native_mode; |
| + |
| + if (connector->connector_type != DRM_MODE_CONNECTOR_eDP && |
| + connector->connector_type != DRM_MODE_CONNECTOR_LVDS) |
| + return; |
| + |
| + encoder = amdgpu_dm_connector_to_encoder(connector); |
| + if (!encoder) |
| + return; |
| + |
| + amdgpu_encoder = to_amdgpu_encoder(encoder); |
| + |
| + native_mode = &amdgpu_encoder->native_mode; |
| + if (native_mode->hdisplay == 0 || native_mode->vdisplay == 0) |
| + return; |
| + |
| + drm_connector_set_panel_orientation_with_quirk(connector, |
| + DRM_MODE_PANEL_ORIENTATION_UNKNOWN, |
| + native_mode->hdisplay, |
| + native_mode->vdisplay); |
| +} |
| + |
| static void amdgpu_dm_connector_ddc_get_modes(struct drm_connector *connector, |
| struct edid *edid) |
| { |
| @@ -7542,6 +7568,8 @@ static void amdgpu_dm_connector_ddc_get_modes(struct drm_connector *connector, |
| * restored here. |
| */ |
| amdgpu_dm_update_freesync_caps(connector, edid); |
| + |
| + amdgpu_set_panel_orientation(connector); |
| } else { |
| amdgpu_dm_connector->num_modes = 0; |
| } |
| -- |
| 2.26.2 |
| |