[PATCH 07/28] drm/amd/display: USB-C to HDMI dongle not light

Dave Airlie airlied at gmail.com
Mon Sep 11 20:20:01 UTC 2017


This seems to lack a commit msg

Dave.

On 12 Sep. 2017 4:15 am, "Harry Wentland" <harry.wentland at amd.com> wrote:

> From: Hersen Wu <hersenxs.wu at amd.com>
>
> Signed-off-by: Hersen Wu <hersenxs.wu at amd.com>
> Reviewed-by: Tony Cheng <Tony.Cheng at amd.com>
> Acked-by: Harry Wentland <Harry.Wentland at amd.com>
> ---
>  drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c |  9 ++++---
>  drivers/gpu/drm/amd/display/dc/core/dc_link.c     | 32
> +++++++++++++++--------
>  drivers/gpu/drm/amd/display/dc/dc.h               |  8 +++++-
>  3 files changed, 33 insertions(+), 16 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 7a408d753be8..9b5158cceece 100644
> --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> @@ -639,7 +639,7 @@ int amdgpu_dm_display_resume(struct amdgpu_device
> *adev )
>                         continue;
>
>                 mutex_lock(&aconnector->hpd_lock);
> -               dc_link_detect(aconnector->dc_link, false);
> +               dc_link_detect(aconnector->dc_link, DETECT_REASON_HPD);
>                 aconnector->dc_sink = NULL;
>                 amdgpu_dm_update_connector_after_detect(aconnector);
>                 mutex_unlock(&aconnector->hpd_lock);
> @@ -870,7 +870,7 @@ static void handle_hpd_irq(void *param)
>          * since (for MST case) MST does this in it's own context.
>          */
>         mutex_lock(&aconnector->hpd_lock);
> -       if (dc_link_detect(aconnector->dc_link, false)) {
> +       if (dc_link_detect(aconnector->dc_link, DETECT_REASON_HPD)) {
>                 amdgpu_dm_update_connector_after_detect(aconnector);
>
>
> @@ -980,7 +980,7 @@ static void handle_hpd_rx_irq(void *param)
>         if (dc_link_handle_hpd_rx_irq(aconnector->dc_link, NULL) &&
>                         !is_mst_root_connector) {
>                 /* Downstream Port status changed. */
> -               if (dc_link_detect(aconnector->dc_link, false)) {
> +               if (dc_link_detect(aconnector->dc_link,
> DETECT_REASON_HPDRX)) {
>                         amdgpu_dm_update_connector_
> after_detect(aconnector);
>
>
> @@ -1368,7 +1368,8 @@ int amdgpu_dm_initialize_drm_device(struct
> amdgpu_device *adev)
>                         goto fail_free_encoder;
>                 }
>
> -               if (dc_link_detect(dc_get_link_at_index(dm->dc, i), true))
> +               if (dc_link_detect(dc_get_link_at_index(dm->dc, i),
> +                               DETECT_REASON_BOOT))
>                         amdgpu_dm_update_connector_
> after_detect(aconnector);
>         }
>
> diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_link.c
> b/drivers/gpu/drm/amd/display/dc/core/dc_link.c
> index cea8dafd2edc..845ec421d861 100644
> --- a/drivers/gpu/drm/amd/display/dc/core/dc_link.c
> +++ b/drivers/gpu/drm/amd/display/dc/core/dc_link.c
> @@ -355,7 +355,9 @@ static bool is_dp_sink_present(struct dc_link *link)
>   * @brief
>   * Detect output sink type
>   */
> -static enum signal_type link_detect_sink(struct dc_link *link)
> +static enum signal_type link_detect_sink(
> +       struct dc_link *link,
> +       enum dc_detect_reason reason)
>  {
>         enum signal_type result = get_basic_signal_type(
>                 link->link_enc->id, link->link_id);
> @@ -388,12 +390,17 @@ static enum signal_type link_detect_sink(struct
> dc_link *link)
>         }
>         break;
>         case CONNECTOR_ID_DISPLAY_PORT: {
> -
> -               /* Check whether DP signal detected: if not -
> -                * we assume signal is DVI; it could be corrected
> -                * to HDMI after dongle detection */
> -               if (!is_dp_sink_present(link))
> -                       result = SIGNAL_TYPE_DVI_SINGLE_LINK;
> +               /* DP HPD short pulse. Passive DP dongle will not
> +                * have short pulse
> +                */
> +               if (reason != DETECT_REASON_HPDRX) {
> +                       /* Check whether DP signal detected: if not -
> +                        * we assume signal is DVI; it could be corrected
> +                        * to HDMI after dongle detection
> +                        */
> +                       if (!is_dp_sink_present(link))
> +                               result = SIGNAL_TYPE_DVI_SINGLE_LINK;
> +               }
>         }
>         break;
>         default:
> @@ -460,9 +467,10 @@ static void detect_dp(
>         struct display_sink_capability *sink_caps,
>         bool *converter_disable_audio,
>         struct audio_support *audio_support,
> -       bool boot)
> +       enum dc_detect_reason reason)
>  {
> -       sink_caps->signal = link_detect_sink(link);
> +       bool boot = false;
> +       sink_caps->signal = link_detect_sink(link, reason);
>         sink_caps->transaction_type =
>                 get_ddc_transaction_type(sink_caps->signal);
>
> @@ -513,6 +521,8 @@ static void detect_dp(
>                          * Need check ->sink usages in case ->sink = NULL
>                          * TODO: s3 resume check
>                          */
> +                       if (reason == DETECT_REASON_BOOT)
> +                               boot = true;
>
>                         if (dm_helpers_dp_mst_start_top_mgr(
>                                 link->ctx,
> @@ -531,7 +541,7 @@ static void detect_dp(
>         }
>  }
>
> -bool dc_link_detect(struct dc_link *link, bool boot)
> +bool dc_link_detect(struct dc_link *link, enum dc_detect_reason reason)
>  {
>         struct dc_sink_init_data sink_init_data = { 0 };
>         struct display_sink_capability sink_caps = { 0 };
> @@ -596,7 +606,7 @@ bool dc_link_detect(struct dc_link *link, bool boot)
>                                 link,
>                                 &sink_caps,
>                                 &converter_disable_audio,
> -                               aud_support, boot);
> +                               aud_support, reason);
>
>                         /* Active dongle downstream unplug */
>                         if (link->type == dc_connection_active_dongle
> diff --git a/drivers/gpu/drm/amd/display/dc/dc.h
> b/drivers/gpu/drm/amd/display/dc/dc.h
> index f005add1aba3..bf2d42561362 100644
> --- a/drivers/gpu/drm/amd/display/dc/dc.h
> +++ b/drivers/gpu/drm/amd/display/dc/dc.h
> @@ -884,7 +884,13 @@ bool dc_link_setup_psr(struct dc_link *dc_link,
>   * true otherwise. True meaning further action is required (status update
>   * and OS notification).
>   */
> -bool dc_link_detect(struct dc_link *dc_link, bool boot);
> +enum dc_detect_reason {
> +       DETECT_REASON_BOOT,
> +       DETECT_REASON_HPD,
> +       DETECT_REASON_HPDRX,
> +};
> +
> +bool dc_link_detect(struct dc_link *dc_link, enum dc_detect_reason
> reason);
>
>  /* Notify DC about DP RX Interrupt (aka Short Pulse Interrupt).
>   * Return:
> --
> 2.11.0
>
> _______________________________________________
> amd-gfx mailing list
> amd-gfx at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/amd-gfx/attachments/20170912/04696eb9/attachment-0001.html>


More information about the amd-gfx mailing list