[RFC PATCH 05/17] drm/exynos: dsi: Get the mode from bridge

Sam Ravnborg sam at ravnborg.org
Sun Jul 25 10:17:47 PDT 2021


Hi Jagan,

On Sun, Jul 04, 2021 at 02:32:18PM +0530, Jagan Teki wrote:
> Now the exynos dsi driver is fully aware of bridge
> handling, so get the display mode from bridge, mode_set
> API instead of legacy encoder crtc.
> 
> This makes bridge usage more efficient instead of relying
> on encoder stack.
> 
> Add mode_set in drm_bridge_funcs.

Based on your description I had expected to find get_modes implmneted
and the flag DRM_BRIDGE_OP_MODES set.

	Sam

> 
> Signed-off-by: Jagan Teki <jagan at amarulasolutions.com>
> ---
>  drivers/gpu/drm/exynos/exynos_drm_dsi.c | 13 ++++++++++++-
>  1 file changed, 12 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/exynos/exynos_drm_dsi.c b/drivers/gpu/drm/exynos/exynos_drm_dsi.c
> index d828be07c325..99a1b8c22313 100644
> --- a/drivers/gpu/drm/exynos/exynos_drm_dsi.c
> +++ b/drivers/gpu/drm/exynos/exynos_drm_dsi.c
> @@ -275,6 +275,7 @@ struct exynos_dsi {
>  	u32 format;
>  
>  	int state;
> +	struct drm_display_mode mode;
>  	struct drm_property *brightness;
>  	struct completion completed;
>  
> @@ -881,7 +882,7 @@ static int exynos_dsi_init_link(struct exynos_dsi *dsi)
>  
>  static void exynos_dsi_set_display_mode(struct exynos_dsi *dsi)
>  {
> -	struct drm_display_mode *m = &dsi->encoder.crtc->state->adjusted_mode;
> +	struct drm_display_mode *m = &dsi->mode;
>  	unsigned int num_bits_resol = dsi->driver_data->num_bits_resol;
>  	u32 reg;
>  
> @@ -1411,6 +1412,15 @@ static void exynos_dsi_bridge_disable(struct drm_bridge *bridge)
>  	pm_runtime_put_sync(dsi->dev);
>  }
>  
> +static void exynos_dsi_bridge_mode_set(struct drm_bridge *bridge,
> +				       const struct drm_display_mode *mode,
> +				       const struct drm_display_mode *adjusted_mode)
> +{
> +	struct exynos_dsi *dsi = bridge_to_dsi(bridge);
> +
> +	drm_mode_copy(&dsi->mode, adjusted_mode);
> +}
> +
>  static int exynos_dsi_panel_or_bridge(struct exynos_dsi *dsi,
>  				      struct device_node *node)
>  {
> @@ -1451,6 +1461,7 @@ static int exynos_dsi_bridge_attach(struct drm_bridge *bridge,
>  static const struct drm_bridge_funcs exynos_dsi_bridge_funcs = {
>  	.enable = exynos_dsi_bridge_enable,
>  	.disable = exynos_dsi_bridge_disable,
> +	.mode_set = exynos_dsi_bridge_mode_set,
>  	.attach = exynos_dsi_bridge_attach,
>  };
>  
> -- 
> 2.25.1



More information about the linux-arm-kernel mailing list