On Wed, Apr 1, 2020 at 8:17 AM Jeevan B <jeevan.b@xxxxxxxxx> wrote: > > Since DP-specific information is stored in driver's structures, every > driver needs to implement subconnector property by itself. Display > Core already has the subconnector information, we only need to > expose it through DRM property. > > Signed-off-by: Oleg Vasilev <oleg.vasilev@xxxxxxxxx> > Tested-by: Oleg Vasilev <oleg.vasilev@xxxxxxxxx> > Cc: Alex Deucher <alexander.deucher@xxxxxxx> > Cc: Christian König <christian.koenig@xxxxxxx> > Cc: David (ChunMing) Zhou <David1.Zhou@xxxxxxx> > Cc: amd-gfx@xxxxxxxxxxxxxxxxxxxxx > Signed-off-by: Jeevan B <jeevan.b@xxxxxxxxx> > Link: https://patchwork.freedesktop.org/patch/msgid/20190829114854.1539-7-oleg.vasilev@xxxxxxxxx Is this just a resend or a new version? If it's new can you send out the entire series to the mailing list instead of individual developers? Also, what are the subconnectors used for? Just informational? Alex > --- > drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 41 +++++++++++++++++++++- > .../amd/display/amdgpu_dm/amdgpu_dm_mst_types.c | 3 ++ > 2 files changed, 43 insertions(+), 1 deletion(-) > > 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 d3674d8..91c0ef2 100644 > --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c > +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c > @@ -121,6 +121,42 @@ MODULE_FIRMWARE(FIRMWARE_NAVI12_DMCU); > static int amdgpu_dm_init(struct amdgpu_device *adev); > static void amdgpu_dm_fini(struct amdgpu_device *adev); > > +static enum drm_mode_subconnector get_subconnector_type(struct dc_link *link) > +{ > + switch (link->dpcd_caps.dongle_type) { > + case DISPLAY_DONGLE_NONE: > + return DRM_MODE_SUBCONNECTOR_Native; > + case DISPLAY_DONGLE_DP_VGA_CONVERTER: > + return DRM_MODE_SUBCONNECTOR_VGA; > + case DISPLAY_DONGLE_DP_DVI_CONVERTER: > + case DISPLAY_DONGLE_DP_DVI_DONGLE: > + return DRM_MODE_SUBCONNECTOR_DVID; > + case DISPLAY_DONGLE_DP_HDMI_CONVERTER: > + case DISPLAY_DONGLE_DP_HDMI_DONGLE: > + return DRM_MODE_SUBCONNECTOR_HDMIA; > + case DISPLAY_DONGLE_DP_HDMI_MISMATCHED_DONGLE: > + default: > + return DRM_MODE_SUBCONNECTOR_Unknown; > + } > +} > + > +static void update_subconnector_property(struct amdgpu_dm_connector *aconnector) > +{ > + struct dc_link *link = aconnector->dc_link; > + struct drm_connector *connector = &aconnector->base; > + enum drm_mode_subconnector subconnector = DRM_MODE_SUBCONNECTOR_Unknown; > + > + if (connector->connector_type != DRM_MODE_CONNECTOR_DisplayPort) > + return; > + > + if (aconnector->dc_sink) > + subconnector = get_subconnector_type(link); > + > + drm_object_property_set_value(&connector->base, > + connector->dev->mode_config.dp_subconnector_property, > + subconnector); > +} > + > /* > * initializes drm_device display related structures, based on the information > * provided by DAL. The drm strcutures are: drm_crtc, drm_connector, > @@ -1917,7 +1953,6 @@ void amdgpu_dm_update_connector_after_detect( > if (aconnector->mst_mgr.mst_state == true) > return; > > - > sink = aconnector->dc_link->local_sink; > if (sink) > dc_sink_retain(sink); > @@ -2038,6 +2073,8 @@ void amdgpu_dm_update_connector_after_detect( > > mutex_unlock(&dev->mode_config.mutex); > > + update_subconnector_property(aconnector); > + > if (sink) > dc_sink_release(sink); > } > @@ -4518,6 +4555,8 @@ amdgpu_dm_connector_detect(struct drm_connector *connector, bool force) > else > connected = (aconnector->base.force == DRM_FORCE_ON); > > + update_subconnector_property(aconnector); > + > return (connected ? connector_status_connected : > connector_status_disconnected); > } > diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c > index e8208df..dab81a6 100644 > --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c > +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c > @@ -26,6 +26,7 @@ > #include <linux/version.h> > #include <drm/drm_atomic_helper.h> > #include <drm/drm_dp_mst_helper.h> > +#include <drm/drm_dp_helper.h> > #include "dm_services.h" > #include "amdgpu.h" > #include "amdgpu_dm.h" > @@ -485,6 +486,8 @@ void amdgpu_dm_initialize_dp_connector(struct amdgpu_display_manager *dm, > 16, > 4, > aconnector->connector_id); > + > + drm_mode_add_dp_subconnector_property(&aconnector->base); > } > > int dm_mst_get_pbn_divider(struct dc_link *link) > -- > 2.7.4 > > _______________________________________________ > amd-gfx mailing list > amd-gfx@xxxxxxxxxxxxxxxxxxxxx > https://lists.freedesktop.org/mailman/listinfo/amd-gfx _______________________________________________ amd-gfx mailing list amd-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/amd-gfx