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