On Wed, Apr 1, 2020 at 8:17 AM Jeevan B <[email protected]> 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 <[email protected]>
> Tested-by: Oleg Vasilev <[email protected]>
> Cc: Alex Deucher <[email protected]>
> Cc: Christian König <[email protected]>
> Cc: David (ChunMing) Zhou <[email protected]>
> Cc: [email protected]
> Signed-off-by: Jeevan B <[email protected]>
> Link:
> https://patchwork.freedesktop.org/patch/msgid/[email protected]
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
> [email protected]
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx
_______________________________________________
amd-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/amd-gfx