[PATCH v2 6/8] drm/msm/dsi: parse vsync source from device tree
Marijn Suijten
marijn.suijten at somainline.org
Thu Jun 13 18:24:26 UTC 2024
On 2024-06-13 20:05:09, Dmitry Baryshkov wrote:
> Allow board's device tree to specify the vsync source (aka TE source).
> If the property is omitted, the display controller driver will use the
> default setting.
Well, that specific default handling is not really part of this patch, but
how a followup patch is going to respond when msm_dsi_get_te_source() returns
NULL. (Or how that followup patch is expected to deal with that - worth a
doc-comment?)
>
> Reviewed-by: Abhinav Kumar <quic_abhinavk at quicinc.com>
> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov at linaro.org>
Reviewed-by: Marijn Suijten <marijn.suijten at somainline.org>
> ---
> drivers/gpu/drm/msm/dsi/dsi.h | 1 +
> drivers/gpu/drm/msm/dsi/dsi_host.c | 11 +++++++++++
> drivers/gpu/drm/msm/dsi/dsi_manager.c | 5 +++++
> drivers/gpu/drm/msm/msm_drv.h | 6 ++++++
> 4 files changed, 23 insertions(+)
>
> diff --git a/drivers/gpu/drm/msm/dsi/dsi.h b/drivers/gpu/drm/msm/dsi/dsi.h
> index afc290408ba4..87496db203d6 100644
> --- a/drivers/gpu/drm/msm/dsi/dsi.h
> +++ b/drivers/gpu/drm/msm/dsi/dsi.h
> @@ -37,6 +37,7 @@ struct msm_dsi {
>
> struct mipi_dsi_host *host;
> struct msm_dsi_phy *phy;
> + const char *te_source;
>
> struct drm_bridge *next_bridge;
>
> diff --git a/drivers/gpu/drm/msm/dsi/dsi_host.c b/drivers/gpu/drm/msm/dsi/dsi_host.c
> index c4d72562c95a..c26ad0fed54d 100644
> --- a/drivers/gpu/drm/msm/dsi/dsi_host.c
> +++ b/drivers/gpu/drm/msm/dsi/dsi_host.c
> @@ -1786,9 +1786,11 @@ static int dsi_populate_dsc_params(struct msm_dsi_host *msm_host, struct drm_dsc
>
> static int dsi_host_parse_dt(struct msm_dsi_host *msm_host)
> {
> + struct msm_dsi *msm_dsi = platform_get_drvdata(msm_host->pdev);
> struct device *dev = &msm_host->pdev->dev;
> struct device_node *np = dev->of_node;
> struct device_node *endpoint;
> + const char *te_source;
> int ret = 0;
>
> /*
> @@ -1811,6 +1813,15 @@ static int dsi_host_parse_dt(struct msm_dsi_host *msm_host)
> goto err;
> }
>
> + ret = of_property_read_string(endpoint, "qcom,te-source", &te_source);
> + if (ret && ret != -EINVAL) {
> + DRM_DEV_ERROR(dev, "%s: invalid TE source configuration %d\n",
> + __func__, ret);
> + goto err;
> + }
> + if (!ret)
> + msm_dsi->te_source = devm_kstrdup(dev, te_source, GFP_KERNEL);
> +
> if (of_property_read_bool(np, "syscon-sfpb")) {
> msm_host->sfpb = syscon_regmap_lookup_by_phandle(np,
> "syscon-sfpb");
> diff --git a/drivers/gpu/drm/msm/dsi/dsi_manager.c b/drivers/gpu/drm/msm/dsi/dsi_manager.c
> index 5b3f3068fd92..a210b7c9e5ca 100644
> --- a/drivers/gpu/drm/msm/dsi/dsi_manager.c
> +++ b/drivers/gpu/drm/msm/dsi/dsi_manager.c
> @@ -603,3 +603,8 @@ bool msm_dsi_is_master_dsi(struct msm_dsi *msm_dsi)
> {
> return IS_MASTER_DSI_LINK(msm_dsi->id);
> }
> +
> +const char *msm_dsi_get_te_source(struct msm_dsi *msm_dsi)
> +{
> + return msm_dsi->te_source;
> +}
> diff --git a/drivers/gpu/drm/msm/msm_drv.h b/drivers/gpu/drm/msm/msm_drv.h
> index 912ebaa5df84..afd98dffea99 100644
> --- a/drivers/gpu/drm/msm/msm_drv.h
> +++ b/drivers/gpu/drm/msm/msm_drv.h
> @@ -330,6 +330,7 @@ bool msm_dsi_is_bonded_dsi(struct msm_dsi *msm_dsi);
> bool msm_dsi_is_master_dsi(struct msm_dsi *msm_dsi);
> bool msm_dsi_wide_bus_enabled(struct msm_dsi *msm_dsi);
> struct drm_dsc_config *msm_dsi_get_dsc_config(struct msm_dsi *msm_dsi);
> +const char *msm_dsi_get_te_source(struct msm_dsi *msm_dsi);
> #else
> static inline void __init msm_dsi_register(void)
> {
> @@ -367,6 +368,11 @@ static inline struct drm_dsc_config *msm_dsi_get_dsc_config(struct msm_dsi *msm_
> {
> return NULL;
> }
> +
> +static inline const char *msm_dsi_get_te_source(struct msm_dsi *msm_dsi)
> +{
> + return NULL;
> +}
> #endif
>
> #ifdef CONFIG_DRM_MSM_DP
>
> --
> 2.39.2
>
More information about the dri-devel
mailing list