Commit 38992c57 authored by Jyri Sarha's avatar Jyri Sarha Committed by Thierry Reding

drm/panel: Remove drm_panel_detach() calls from all panel drivers

Remove all drm_panel_detach() calls from all panel drivers and update
the kerneldoc 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 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: default avatarJyri Sarha <jsarha@ti.com>
Reviewed-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
Signed-off-by: default avatarThierry Reding <treding@nvidia.com>
Link: https://patchwork.freedesktop.org/patch/msgid/464b8d330d6b4c94cfb5aad2ca9ea7eb2c52d934.1524727888.git.jsarha@ti.com
parent 6553b123
...@@ -94,6 +94,9 @@ EXPORT_SYMBOL(drm_panel_remove); ...@@ -94,6 +94,9 @@ EXPORT_SYMBOL(drm_panel_remove);
* *
* An error is returned if the panel is already attached to another connector. * An error is returned if the panel is already attached to another connector.
* *
* When unloading, the driver should detach from the panel by calling
* drm_panel_detach().
*
* Return: 0 on success or a negative error code on failure. * Return: 0 on success or a negative error code on failure.
*/ */
int drm_panel_attach(struct drm_panel *panel, struct drm_connector *connector) int drm_panel_attach(struct drm_panel *panel, struct drm_connector *connector)
...@@ -115,6 +118,9 @@ EXPORT_SYMBOL(drm_panel_attach); ...@@ -115,6 +118,9 @@ EXPORT_SYMBOL(drm_panel_attach);
* Detaches a panel from the connector it is attached to. If a panel is not * 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. * attached to any connector this is effectively a no-op.
* *
* This function should not be called by the panel device itself. It
* is only for the drm device that called drm_panel_attach().
*
* Return: 0 on success or a negative error code on failure. * Return: 0 on success or a negative error code on failure.
*/ */
int drm_panel_detach(struct drm_panel *panel) int drm_panel_detach(struct drm_panel *panel)
......
...@@ -292,7 +292,6 @@ static int innolux_panel_remove(struct mipi_dsi_device *dsi) ...@@ -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", DRM_DEV_ERROR(&dsi->dev, "failed to detach from DSI host: %d\n",
err); err);
drm_panel_detach(&innolux->base);
innolux_panel_del(innolux); innolux_panel_del(innolux);
return 0; return 0;
......
...@@ -500,7 +500,6 @@ static int jdi_panel_remove(struct mipi_dsi_device *dsi) ...@@ -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", dev_err(&dsi->dev, "failed to detach from DSI host: %d\n",
ret); ret);
drm_panel_detach(&jdi->base);
jdi_panel_del(jdi); jdi_panel_del(jdi);
return 0; return 0;
......
...@@ -282,7 +282,6 @@ static int panel_lvds_remove(struct platform_device *pdev) ...@@ -282,7 +282,6 @@ static int panel_lvds_remove(struct platform_device *pdev)
{ {
struct panel_lvds *lvds = dev_get_drvdata(&pdev->dev); struct panel_lvds *lvds = dev_get_drvdata(&pdev->dev);
drm_panel_detach(&lvds->panel);
drm_panel_remove(&lvds->panel); drm_panel_remove(&lvds->panel);
panel_lvds_disable(&lvds->panel); panel_lvds_disable(&lvds->panel);
......
...@@ -299,7 +299,6 @@ static int wuxga_nt_panel_remove(struct mipi_dsi_device *dsi) ...@@ -299,7 +299,6 @@ static int wuxga_nt_panel_remove(struct mipi_dsi_device *dsi)
if (ret < 0) if (ret < 0)
dev_err(&dsi->dev, "failed to detach from DSI host: %d\n", ret); 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); wuxga_nt_panel_del(wuxga_nt);
return 0; return 0;
......
...@@ -292,7 +292,6 @@ static int seiko_panel_remove(struct platform_device *pdev) ...@@ -292,7 +292,6 @@ static int seiko_panel_remove(struct platform_device *pdev)
{ {
struct seiko_panel *panel = dev_get_drvdata(&pdev->dev); struct seiko_panel *panel = dev_get_drvdata(&pdev->dev);
drm_panel_detach(&panel->base);
drm_panel_remove(&panel->base); drm_panel_remove(&panel->base);
seiko_panel_disable(&panel->base); seiko_panel_disable(&panel->base);
......
...@@ -418,7 +418,6 @@ static int sharp_panel_remove(struct mipi_dsi_device *dsi) ...@@ -418,7 +418,6 @@ static int sharp_panel_remove(struct mipi_dsi_device *dsi)
if (err < 0) if (err < 0)
dev_err(&dsi->dev, "failed to detach from DSI host: %d\n", err); dev_err(&dsi->dev, "failed to detach from DSI host: %d\n", err);
drm_panel_detach(&sharp->base);
sharp_panel_del(sharp); sharp_panel_del(sharp);
return 0; return 0;
......
...@@ -327,7 +327,6 @@ static int sharp_nt_panel_remove(struct mipi_dsi_device *dsi) ...@@ -327,7 +327,6 @@ static int sharp_nt_panel_remove(struct mipi_dsi_device *dsi)
if (ret < 0) if (ret < 0)
dev_err(&dsi->dev, "failed to detach from DSI host: %d\n", ret); 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); sharp_nt_panel_del(sharp_nt);
return 0; return 0;
......
...@@ -364,7 +364,6 @@ static int panel_simple_remove(struct device *dev) ...@@ -364,7 +364,6 @@ static int panel_simple_remove(struct device *dev)
{ {
struct panel_simple *panel = dev_get_drvdata(dev); struct panel_simple *panel = dev_get_drvdata(dev);
drm_panel_detach(&panel->base);
drm_panel_remove(&panel->base); drm_panel_remove(&panel->base);
panel_simple_disable(&panel->base); panel_simple_disable(&panel->base);
......
...@@ -419,7 +419,6 @@ static int st7789v_remove(struct spi_device *spi) ...@@ -419,7 +419,6 @@ static int st7789v_remove(struct spi_device *spi)
{ {
struct st7789v *ctx = spi_get_drvdata(spi); struct st7789v *ctx = spi_get_drvdata(spi);
drm_panel_detach(&ctx->panel);
drm_panel_remove(&ctx->panel); drm_panel_remove(&ctx->panel);
if (ctx->backlight) if (ctx->backlight)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment