On 2021-09-10 11:37 a.m., Simon Ser wrote: > 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@xxxxxxxxxxx> > Cc: Alex Deucher <alexander.deucher@xxxxxxx> > Cc: Harry Wentland <hwentlan@xxxxxxx> > Cc: Nicholas Kazlauskas <nicholas.kazlauskas@xxxxxxx> Reviewed-by: Harry Wentland <harry.wentland@xxxxxxx> Harry > --- > .../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 53363728dbbd..a420602f1794 100644 > --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c > +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c > @@ -7680,6 +7680,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) > { > @@ -7708,6 +7734,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; > } >