[PATCH v3 1/2] drm/panel: Remove drm_panel_detach() calls from all panel drives

Daniel Vetter daniel at ffwll.ch
Tue Apr 24 19:40:08 UTC 2018


On Tue, Apr 24, 2018 at 06:51:07PM +0300, Jyri Sarha wrote:
> Remove all drm_panel_detach() calls from all panel drives update the
> kernel doc for drm_panel_detach().
> 
> Setting the connector and drm to NULL when the drm panel device is
> going away hardly serves any purpose. Usually the the whole memory
> structure is freed right after the remove call. However, calling the
> detach function from the master drm device, and setting the connector
> pointer to NULL, has the logic of marking the panel again as available
> for another drm master to attach. The usual situation would be the same
> drm master device binding again.
> 
> Signed-off-by: Jyri Sarha <jsarha at ti.com>

Yeah this makes tons of sense, no panel driver calls attach either.

> ---
>  drivers/gpu/drm/drm_panel.c                          | 4 ++++
>  drivers/gpu/drm/panel/panel-innolux-p079zca.c        | 1 -
>  drivers/gpu/drm/panel/panel-jdi-lt070me05000.c       | 1 -
>  drivers/gpu/drm/panel/panel-lvds.c                   | 1 -
>  drivers/gpu/drm/panel/panel-panasonic-vvx10f034n00.c | 1 -
>  drivers/gpu/drm/panel/panel-seiko-43wvf1g.c          | 1 -
>  drivers/gpu/drm/panel/panel-sharp-lq101r1sx01.c      | 1 -
>  drivers/gpu/drm/panel/panel-sharp-ls043t1le01.c      | 1 -
>  drivers/gpu/drm/panel/panel-simple.c                 | 1 -
>  drivers/gpu/drm/panel/panel-sitronix-st7789v.c       | 1 -
>  10 files changed, 4 insertions(+), 9 deletions(-)
> 
> diff --git a/drivers/gpu/drm/drm_panel.c b/drivers/gpu/drm/drm_panel.c
> index 308d442..29d2c74 100644
> --- a/drivers/gpu/drm/drm_panel.c
> +++ b/drivers/gpu/drm/drm_panel.c
> @@ -115,6 +115,10 @@ EXPORT_SYMBOL(drm_panel_attach);
>   * Detaches a panel from the connector it is attached to. If a panel is not
>   * attached to any connector this is effectively a no-op.
>   *
> + * NOTE: This function should not be called by the panel device
> + *       itself. It is only for the drm device that called the
> + *       drm_panel_attach().

Does this result in pretty output when building the docs with

$ make htmldocs

Also might be good to add something like

 * When unloading, the driver should detach from the panel by calling
 * drm_panel_detach().

to the kerneldoc of drm_panel_attach.

Either way:

Reviewed-by: Daniel Vetter <daniel.vetter at ffwll.ch>

> + *
>   * Return: 0 on success or a negative error code on failure.
>   */
>  int drm_panel_detach(struct drm_panel *panel)
> diff --git a/drivers/gpu/drm/panel/panel-innolux-p079zca.c b/drivers/gpu/drm/panel/panel-innolux-p079zca.c
> index 57df39b..bb53e08 100644
> --- a/drivers/gpu/drm/panel/panel-innolux-p079zca.c
> +++ b/drivers/gpu/drm/panel/panel-innolux-p079zca.c
> @@ -292,7 +292,6 @@ static int innolux_panel_remove(struct mipi_dsi_device *dsi)
>  		DRM_DEV_ERROR(&dsi->dev, "failed to detach from DSI host: %d\n",
>  			      err);
>  
> -	drm_panel_detach(&innolux->base);
>  	innolux_panel_del(innolux);
>  
>  	return 0;
> diff --git a/drivers/gpu/drm/panel/panel-jdi-lt070me05000.c b/drivers/gpu/drm/panel/panel-jdi-lt070me05000.c
> index 0a94ab7..99caa78 100644
> --- a/drivers/gpu/drm/panel/panel-jdi-lt070me05000.c
> +++ b/drivers/gpu/drm/panel/panel-jdi-lt070me05000.c
> @@ -500,7 +500,6 @@ static int jdi_panel_remove(struct mipi_dsi_device *dsi)
>  		dev_err(&dsi->dev, "failed to detach from DSI host: %d\n",
>  			ret);
>  
> -	drm_panel_detach(&jdi->base);
>  	jdi_panel_del(jdi);
>  
>  	return 0;
> diff --git a/drivers/gpu/drm/panel/panel-lvds.c b/drivers/gpu/drm/panel/panel-lvds.c
> index 5185819..8a16878 100644
> --- a/drivers/gpu/drm/panel/panel-lvds.c
> +++ b/drivers/gpu/drm/panel/panel-lvds.c
> @@ -282,7 +282,6 @@ static int panel_lvds_remove(struct platform_device *pdev)
>  {
>  	struct panel_lvds *lvds = dev_get_drvdata(&pdev->dev);
>  
> -	drm_panel_detach(&lvds->panel);
>  	drm_panel_remove(&lvds->panel);
>  
>  	panel_lvds_disable(&lvds->panel);
> diff --git a/drivers/gpu/drm/panel/panel-panasonic-vvx10f034n00.c b/drivers/gpu/drm/panel/panel-panasonic-vvx10f034n00.c
> index 74a8061..cb4dfb9 100644
> --- a/drivers/gpu/drm/panel/panel-panasonic-vvx10f034n00.c
> +++ b/drivers/gpu/drm/panel/panel-panasonic-vvx10f034n00.c
> @@ -299,7 +299,6 @@ static int wuxga_nt_panel_remove(struct mipi_dsi_device *dsi)
>  	if (ret < 0)
>  		dev_err(&dsi->dev, "failed to detach from DSI host: %d\n", ret);
>  
> -	drm_panel_detach(&wuxga_nt->base);
>  	wuxga_nt_panel_del(wuxga_nt);
>  
>  	return 0;
> diff --git a/drivers/gpu/drm/panel/panel-seiko-43wvf1g.c b/drivers/gpu/drm/panel/panel-seiko-43wvf1g.c
> index 71c09ed..75f9253 100644
> --- a/drivers/gpu/drm/panel/panel-seiko-43wvf1g.c
> +++ b/drivers/gpu/drm/panel/panel-seiko-43wvf1g.c
> @@ -292,7 +292,6 @@ static int seiko_panel_remove(struct platform_device *pdev)
>  {
>  	struct seiko_panel *panel = dev_get_drvdata(&pdev->dev);
>  
> -	drm_panel_detach(&panel->base);
>  	drm_panel_remove(&panel->base);
>  
>  	seiko_panel_disable(&panel->base);
> diff --git a/drivers/gpu/drm/panel/panel-sharp-lq101r1sx01.c b/drivers/gpu/drm/panel/panel-sharp-lq101r1sx01.c
> index 6bf8730..02fc0f5 100644
> --- a/drivers/gpu/drm/panel/panel-sharp-lq101r1sx01.c
> +++ b/drivers/gpu/drm/panel/panel-sharp-lq101r1sx01.c
> @@ -418,7 +418,6 @@ static int sharp_panel_remove(struct mipi_dsi_device *dsi)
>  	if (err < 0)
>  		dev_err(&dsi->dev, "failed to detach from DSI host: %d\n", err);
>  
> -	drm_panel_detach(&sharp->base);
>  	sharp_panel_del(sharp);
>  
>  	return 0;
> diff --git a/drivers/gpu/drm/panel/panel-sharp-ls043t1le01.c b/drivers/gpu/drm/panel/panel-sharp-ls043t1le01.c
> index 494aa9b..e5cae00 100644
> --- a/drivers/gpu/drm/panel/panel-sharp-ls043t1le01.c
> +++ b/drivers/gpu/drm/panel/panel-sharp-ls043t1le01.c
> @@ -327,7 +327,6 @@ static int sharp_nt_panel_remove(struct mipi_dsi_device *dsi)
>  	if (ret < 0)
>  		dev_err(&dsi->dev, "failed to detach from DSI host: %d\n", ret);
>  
> -	drm_panel_detach(&sharp_nt->base);
>  	sharp_nt_panel_del(sharp_nt);
>  
>  	return 0;
> diff --git a/drivers/gpu/drm/panel/panel-simple.c b/drivers/gpu/drm/panel/panel-simple.c
> index f2d96611..9388acf 100644
> --- a/drivers/gpu/drm/panel/panel-simple.c
> +++ b/drivers/gpu/drm/panel/panel-simple.c
> @@ -364,7 +364,6 @@ static int panel_simple_remove(struct device *dev)
>  {
>  	struct panel_simple *panel = dev_get_drvdata(dev);
>  
> -	drm_panel_detach(&panel->base);
>  	drm_panel_remove(&panel->base);
>  
>  	panel_simple_disable(&panel->base);
> diff --git a/drivers/gpu/drm/panel/panel-sitronix-st7789v.c b/drivers/gpu/drm/panel/panel-sitronix-st7789v.c
> index 358c64e..74284e5 100644
> --- a/drivers/gpu/drm/panel/panel-sitronix-st7789v.c
> +++ b/drivers/gpu/drm/panel/panel-sitronix-st7789v.c
> @@ -419,7 +419,6 @@ static int st7789v_remove(struct spi_device *spi)
>  {
>  	struct st7789v *ctx = spi_get_drvdata(spi);
>  
> -	drm_panel_detach(&ctx->panel);
>  	drm_panel_remove(&ctx->panel);
>  
>  	if (ctx->backlight)
> -- 
> Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki. Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki
> 

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch


More information about the dri-devel mailing list