On Mon, Jun 29, 2026 at 10:14:37PM +0800, Yongxing Mou wrote:
> From: Abhinav Kumar <[email protected]>
> 
> Add an API msm_dp_display_get_panel() to initialize and return a DP
> panel to be used by DP MST module. Since some of the fields of
> DP panel are private, dp_display module needs to initialize these
> parts and return the panel back.
> 
> Signed-off-by: Abhinav Kumar <[email protected]>
> Signed-off-by: Yongxing Mou <[email protected]>
> ---
>  drivers/gpu/drm/msm/dp/dp_display.c | 27 +++++++++++++++++++++++++++
>  drivers/gpu/drm/msm/dp/dp_display.h |  2 ++
>  2 files changed, 29 insertions(+)
> 
> diff --git a/drivers/gpu/drm/msm/dp/dp_display.c 
> b/drivers/gpu/drm/msm/dp/dp_display.c
> index c3be656f10ee..2a74302bcb7c 100644
> --- a/drivers/gpu/drm/msm/dp/dp_display.c
> +++ b/drivers/gpu/drm/msm/dp/dp_display.c
> @@ -565,6 +565,33 @@ static int msm_dp_irq_hpd_handle(struct 
> msm_dp_display_private *dp)
>       return rc;
>  }
>  
> +struct msm_dp_panel *msm_dp_display_get_panel(struct msm_dp *msm_dp_display,
> +                                           enum msm_dp_stream_id stream_id)
> +{
> +     struct msm_dp_display_private *dp;
> +     struct msm_dp_panel *dp_panel;
> +
> +     dp = container_of(msm_dp_display, struct msm_dp_display_private, 
> msm_dp_display);
> +
> +     if (stream_id >= DP_STREAM_MAX || stream_id >= dp->max_stream) {

We know that max_stream is <= DP_STREAM_MAX

> +             DRM_ERROR("invalid stream_id %d\n", stream_id);
> +             return NULL;
> +     }
> +
> +     dp_panel = msm_dp_panel_get(&dp->msm_dp_display.pdev->dev, dp->aux, 
> dp->link,
> +                                 dp->link_base, dp->mst2link_base, 
> dp->mst3link_base,
> +                                 dp->pixel_base[stream_id]);
> +
> +     if (IS_ERR(dp_panel)) {
> +             DRM_ERROR("failed to initialize panel\n");
> +             return NULL;
> +     }
> +
> +     dp_panel->stream_id = stream_id;
> +
> +     return dp_panel;
> +}
> +
>  static void msm_dp_display_deinit_sub_modules(struct msm_dp_display_private 
> *dp)
>  {
>       msm_dp_audio_put(dp->audio);
> diff --git a/drivers/gpu/drm/msm/dp/dp_display.h 
> b/drivers/gpu/drm/msm/dp/dp_display.h
> index 75dc40261723..676213a48089 100644
> --- a/drivers/gpu/drm/msm/dp/dp_display.h
> +++ b/drivers/gpu/drm/msm/dp/dp_display.h
> @@ -58,4 +58,6 @@ int msm_dp_display_set_mode_helper(struct msm_dp 
> *msm_dp_display,
>  int msm_dp_display_prepare_link(struct msm_dp *msm_dp_display);
>  void msm_dp_display_unprepare(struct msm_dp *dp);
>  
> +struct msm_dp_panel *msm_dp_display_get_panel(struct msm_dp *msm_dp_display,
> +                                           enum msm_dp_stream_id stream_id);
>  #endif /* _DP_DISPLAY_H_ */
> 
> -- 
> 2.43.0
> 

-- 
With best wishes
Dmitry

Reply via email to