aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm
diff options
context:
space:
mode:
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>2018-09-08 04:45:14 -0400
committerTomi Valkeinen <tomi.valkeinen@ti.com>2019-03-18 05:42:11 -0400
commit3f3623dd0f881dd5615097fdc9eeeb1ec732e59a (patch)
tree4e9d22064b71ce48e28efc4478b79bdb35be3d46 /drivers/gpu/drm
parentb49a2139ba67da43915a483a2a7e8490ba6c2b57 (diff)
drm/omap: Remove enable checks from display .enable() and .remove()
The displays (connectors, panels and encoders) bail out from their .enable() and .disable() handlers if the dss device is already enabled or disabled. Those safety checks are not needed when the functions are called through the omapdss_device_ops, as the .enable() and .disable() handlers are called from the DRM atomic helpers that already guarantee that no double enabling or disabling can occur. However, the handlers are also called directly from the .remove() handler. While this shouldn't be needed either as the modules can't be removed as long as the device is in use, it's still a good practice to disable the device explicitly. There is currently a safety check in .remove() in some drivers but not all of them. Remove the safety checks from the .enable() and .disable() handlers, and add missing ones in the .remove() handler. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Sebastian Reichel <sebastian.reichel@collabora.com> Tested-by: Sebastian Reichel <sebastian.reichel@collabora.com> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Diffstat (limited to 'drivers/gpu/drm')
-rw-r--r--drivers/gpu/drm/omapdrm/displays/connector-analog-tv.c6
-rw-r--r--drivers/gpu/drm/omapdrm/displays/connector-dvi.c6
-rw-r--r--drivers/gpu/drm/omapdrm/displays/connector-hdmi.c6
-rw-r--r--drivers/gpu/drm/omapdrm/displays/encoder-opa362.c6
-rw-r--r--drivers/gpu/drm/omapdrm/displays/encoder-tfp410.c6
-rw-r--r--drivers/gpu/drm/omapdrm/displays/panel-dpi.c6
-rw-r--r--drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c11
-rw-r--r--drivers/gpu/drm/omapdrm/displays/panel-lgphilips-lb035q02.c6
-rw-r--r--drivers/gpu/drm/omapdrm/displays/panel-nec-nl8048hl11.c6
-rw-r--r--drivers/gpu/drm/omapdrm/displays/panel-sharp-ls037v7dw01.c6
-rw-r--r--drivers/gpu/drm/omapdrm/displays/panel-sony-acx565akm.c6
-rw-r--r--drivers/gpu/drm/omapdrm/displays/panel-tpo-td028ttec1.c6
-rw-r--r--drivers/gpu/drm/omapdrm/displays/panel-tpo-td043mtea1.c6
-rw-r--r--drivers/gpu/drm/omapdrm/omap_encoder.c6
14 files changed, 25 insertions, 64 deletions
diff --git a/drivers/gpu/drm/omapdrm/displays/connector-analog-tv.c b/drivers/gpu/drm/omapdrm/displays/connector-analog-tv.c
index 910a5b9c036a..2b5b77627cfb 100644
--- a/drivers/gpu/drm/omapdrm/displays/connector-analog-tv.c
+++ b/drivers/gpu/drm/omapdrm/displays/connector-analog-tv.c
@@ -46,9 +46,6 @@ static void tvc_disable(struct omap_dss_device *dssdev)
46{ 46{
47 struct omap_dss_device *src = dssdev->src; 47 struct omap_dss_device *src = dssdev->src;
48 48
49 if (!omapdss_device_is_enabled(dssdev))
50 return;
51
52 src->ops->disable(src); 49 src->ops->disable(src);
53} 50}
54 51
@@ -92,7 +89,8 @@ static int __exit tvc_remove(struct platform_device *pdev)
92 89
93 omapdss_device_unregister(&ddata->dssdev); 90 omapdss_device_unregister(&ddata->dssdev);
94 91
95 tvc_disable(dssdev); 92 if (omapdss_device_is_enabled(dssdev))
93 tvc_disable(dssdev);
96 94
97 return 0; 95 return 0;
98} 96}
diff --git a/drivers/gpu/drm/omapdrm/displays/connector-dvi.c b/drivers/gpu/drm/omapdrm/displays/connector-dvi.c
index 1e0925791c3d..a1784e263835 100644
--- a/drivers/gpu/drm/omapdrm/displays/connector-dvi.c
+++ b/drivers/gpu/drm/omapdrm/displays/connector-dvi.c
@@ -57,9 +57,6 @@ static void dvic_disable(struct omap_dss_device *dssdev)
57{ 57{
58 struct omap_dss_device *src = dssdev->src; 58 struct omap_dss_device *src = dssdev->src;
59 59
60 if (!omapdss_device_is_enabled(dssdev))
61 return;
62
63 src->ops->disable(src); 60 src->ops->disable(src);
64} 61}
65 62
@@ -282,7 +279,8 @@ static int __exit dvic_remove(struct platform_device *pdev)
282 279
283 omapdss_device_unregister(&ddata->dssdev); 280 omapdss_device_unregister(&ddata->dssdev);
284 281
285 dvic_disable(dssdev); 282 if (omapdss_device_is_enabled(dssdev))
283 dvic_disable(dssdev);
286 284
287 i2c_put_adapter(ddata->i2c_adapter); 285 i2c_put_adapter(ddata->i2c_adapter);
288 286
diff --git a/drivers/gpu/drm/omapdrm/displays/connector-hdmi.c b/drivers/gpu/drm/omapdrm/displays/connector-hdmi.c
index 649364e04edd..05cd503c4d29 100644
--- a/drivers/gpu/drm/omapdrm/displays/connector-hdmi.c
+++ b/drivers/gpu/drm/omapdrm/displays/connector-hdmi.c
@@ -52,9 +52,6 @@ static void hdmic_disable(struct omap_dss_device *dssdev)
52{ 52{
53 struct omap_dss_device *src = dssdev->src; 53 struct omap_dss_device *src = dssdev->src;
54 54
55 if (!omapdss_device_is_enabled(dssdev))
56 return;
57
58 src->ops->disable(src); 55 src->ops->disable(src);
59} 56}
60 57
@@ -179,7 +176,8 @@ static int __exit hdmic_remove(struct platform_device *pdev)
179 176
180 omapdss_device_unregister(&ddata->dssdev); 177 omapdss_device_unregister(&ddata->dssdev);
181 178
182 hdmic_disable(dssdev); 179 if (omapdss_device_is_enabled(dssdev))
180 hdmic_disable(dssdev);
183 181
184 return 0; 182 return 0;
185} 183}
diff --git a/drivers/gpu/drm/omapdrm/displays/encoder-opa362.c b/drivers/gpu/drm/omapdrm/displays/encoder-opa362.c
index 0b1032625e42..ce116c28479f 100644
--- a/drivers/gpu/drm/omapdrm/displays/encoder-opa362.c
+++ b/drivers/gpu/drm/omapdrm/displays/encoder-opa362.c
@@ -49,9 +49,6 @@ static int opa362_enable(struct omap_dss_device *dssdev)
49 49
50 dev_dbg(dssdev->dev, "enable\n"); 50 dev_dbg(dssdev->dev, "enable\n");
51 51
52 if (omapdss_device_is_enabled(dssdev))
53 return 0;
54
55 r = src->ops->enable(src); 52 r = src->ops->enable(src);
56 if (r) 53 if (r)
57 return r; 54 return r;
@@ -71,9 +68,6 @@ static void opa362_disable(struct omap_dss_device *dssdev)
71 68
72 dev_dbg(dssdev->dev, "disable\n"); 69 dev_dbg(dssdev->dev, "disable\n");
73 70
74 if (!omapdss_device_is_enabled(dssdev))
75 return;
76
77 if (ddata->enable_gpio) 71 if (ddata->enable_gpio)
78 gpiod_set_value_cansleep(ddata->enable_gpio, 0); 72 gpiod_set_value_cansleep(ddata->enable_gpio, 0);
79 73
diff --git a/drivers/gpu/drm/omapdrm/displays/encoder-tfp410.c b/drivers/gpu/drm/omapdrm/displays/encoder-tfp410.c
index fcc2dc5188a2..d51410ed1e13 100644
--- a/drivers/gpu/drm/omapdrm/displays/encoder-tfp410.c
+++ b/drivers/gpu/drm/omapdrm/displays/encoder-tfp410.c
@@ -42,9 +42,6 @@ static int tfp410_enable(struct omap_dss_device *dssdev)
42 struct omap_dss_device *src = dssdev->src; 42 struct omap_dss_device *src = dssdev->src;
43 int r; 43 int r;
44 44
45 if (omapdss_device_is_enabled(dssdev))
46 return 0;
47
48 r = src->ops->enable(src); 45 r = src->ops->enable(src);
49 if (r) 46 if (r)
50 return r; 47 return r;
@@ -62,9 +59,6 @@ static void tfp410_disable(struct omap_dss_device *dssdev)
62 struct panel_drv_data *ddata = to_panel_data(dssdev); 59 struct panel_drv_data *ddata = to_panel_data(dssdev);
63 struct omap_dss_device *src = dssdev->src; 60 struct omap_dss_device *src = dssdev->src;
64 61
65 if (!omapdss_device_is_enabled(dssdev))
66 return;
67
68 if (ddata->pd_gpio) 62 if (ddata->pd_gpio)
69 gpiod_set_value_cansleep(ddata->pd_gpio, 0); 63 gpiod_set_value_cansleep(ddata->pd_gpio, 0);
70 64
diff --git a/drivers/gpu/drm/omapdrm/displays/panel-dpi.c b/drivers/gpu/drm/omapdrm/displays/panel-dpi.c
index ded779a598d3..3ef4596a3698 100644
--- a/drivers/gpu/drm/omapdrm/displays/panel-dpi.c
+++ b/drivers/gpu/drm/omapdrm/displays/panel-dpi.c
@@ -72,9 +72,6 @@ static void panel_dpi_disable(struct omap_dss_device *dssdev)
72 struct panel_drv_data *ddata = to_panel_data(dssdev); 72 struct panel_drv_data *ddata = to_panel_data(dssdev);
73 struct omap_dss_device *src = dssdev->src; 73 struct omap_dss_device *src = dssdev->src;
74 74
75 if (!omapdss_device_is_enabled(dssdev))
76 return;
77
78 backlight_disable(ddata->backlight); 75 backlight_disable(ddata->backlight);
79 76
80 gpiod_set_value_cansleep(ddata->enable_gpio, 0); 77 gpiod_set_value_cansleep(ddata->enable_gpio, 0);
@@ -182,7 +179,8 @@ static int __exit panel_dpi_remove(struct platform_device *pdev)
182 179
183 omapdss_device_unregister(dssdev); 180 omapdss_device_unregister(dssdev);
184 181
185 panel_dpi_disable(dssdev); 182 if (omapdss_device_is_enabled(dssdev))
183 panel_dpi_disable(dssdev);
186 184
187 return 0; 185 return 0;
188} 186}
diff --git a/drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c b/drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c
index e346451647c4..a7c8688237fb 100644
--- a/drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c
+++ b/drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c
@@ -829,11 +829,9 @@ static void dsicm_disable(struct omap_dss_device *dssdev)
829 829
830 src->ops->dsi.bus_lock(src); 830 src->ops->dsi.bus_lock(src);
831 831
832 if (omapdss_device_is_enabled(dssdev)) { 832 r = dsicm_wake_up(ddata);
833 r = dsicm_wake_up(ddata); 833 if (!r)
834 if (!r) 834 dsicm_power_off(ddata);
835 dsicm_power_off(ddata);
836 }
837 835
838 src->ops->dsi.bus_unlock(src); 836 src->ops->dsi.bus_unlock(src);
839 837
@@ -1367,7 +1365,8 @@ static int __exit dsicm_remove(struct platform_device *pdev)
1367 1365
1368 omapdss_device_unregister(dssdev); 1366 omapdss_device_unregister(dssdev);
1369 1367
1370 dsicm_disable(dssdev); 1368 if (omapdss_device_is_enabled(dssdev))
1369 dsicm_disable(dssdev);
1371 omapdss_device_disconnect(dssdev->src, dssdev); 1370 omapdss_device_disconnect(dssdev->src, dssdev);
1372 1371
1373 sysfs_remove_group(&pdev->dev.kobj, &dsicm_attr_group); 1372 sysfs_remove_group(&pdev->dev.kobj, &dsicm_attr_group);
diff --git a/drivers/gpu/drm/omapdrm/displays/panel-lgphilips-lb035q02.c b/drivers/gpu/drm/omapdrm/displays/panel-lgphilips-lb035q02.c
index 19c0c3e85aa5..2c3b15ba5a39 100644
--- a/drivers/gpu/drm/omapdrm/displays/panel-lgphilips-lb035q02.c
+++ b/drivers/gpu/drm/omapdrm/displays/panel-lgphilips-lb035q02.c
@@ -144,9 +144,6 @@ static void lb035q02_disable(struct omap_dss_device *dssdev)
144 struct panel_drv_data *ddata = to_panel_data(dssdev); 144 struct panel_drv_data *ddata = to_panel_data(dssdev);
145 struct omap_dss_device *src = dssdev->src; 145 struct omap_dss_device *src = dssdev->src;
146 146
147 if (!omapdss_device_is_enabled(dssdev))
148 return;
149
150 if (ddata->enable_gpio) 147 if (ddata->enable_gpio)
151 gpiod_set_value_cansleep(ddata->enable_gpio, 0); 148 gpiod_set_value_cansleep(ddata->enable_gpio, 0);
152 149
@@ -235,7 +232,8 @@ static int lb035q02_panel_spi_remove(struct spi_device *spi)
235 232
236 omapdss_device_unregister(dssdev); 233 omapdss_device_unregister(dssdev);
237 234
238 lb035q02_disable(dssdev); 235 if (omapdss_device_is_enabled(dssdev))
236 lb035q02_disable(dssdev);
239 237
240 return 0; 238 return 0;
241} 239}
diff --git a/drivers/gpu/drm/omapdrm/displays/panel-nec-nl8048hl11.c b/drivers/gpu/drm/omapdrm/displays/panel-nec-nl8048hl11.c
index 9cef1d16d7d3..ef83459611be 100644
--- a/drivers/gpu/drm/omapdrm/displays/panel-nec-nl8048hl11.c
+++ b/drivers/gpu/drm/omapdrm/displays/panel-nec-nl8048hl11.c
@@ -138,9 +138,6 @@ static void nec_8048_disable(struct omap_dss_device *dssdev)
138 struct panel_drv_data *ddata = to_panel_data(dssdev); 138 struct panel_drv_data *ddata = to_panel_data(dssdev);
139 struct omap_dss_device *src = dssdev->src; 139 struct omap_dss_device *src = dssdev->src;
140 140
141 if (!omapdss_device_is_enabled(dssdev))
142 return;
143
144 gpiod_set_value_cansleep(ddata->res_gpio, 0); 141 gpiod_set_value_cansleep(ddata->res_gpio, 0);
145 142
146 src->ops->disable(src); 143 src->ops->disable(src);
@@ -226,7 +223,8 @@ static int nec_8048_remove(struct spi_device *spi)
226 223
227 omapdss_device_unregister(dssdev); 224 omapdss_device_unregister(dssdev);
228 225
229 nec_8048_disable(dssdev); 226 if (omapdss_device_is_enabled(dssdev))
227 nec_8048_disable(dssdev);
230 228
231 return 0; 229 return 0;
232} 230}
diff --git a/drivers/gpu/drm/omapdrm/displays/panel-sharp-ls037v7dw01.c b/drivers/gpu/drm/omapdrm/displays/panel-sharp-ls037v7dw01.c
index 5a06fbb7984a..0c5b405b4c9e 100644
--- a/drivers/gpu/drm/omapdrm/displays/panel-sharp-ls037v7dw01.c
+++ b/drivers/gpu/drm/omapdrm/displays/panel-sharp-ls037v7dw01.c
@@ -97,9 +97,6 @@ static void sharp_ls_disable(struct omap_dss_device *dssdev)
97 struct panel_drv_data *ddata = to_panel_data(dssdev); 97 struct panel_drv_data *ddata = to_panel_data(dssdev);
98 struct omap_dss_device *src = dssdev->src; 98 struct omap_dss_device *src = dssdev->src;
99 99
100 if (!omapdss_device_is_enabled(dssdev))
101 return;
102
103 if (ddata->ini_gpio) 100 if (ddata->ini_gpio)
104 gpiod_set_value_cansleep(ddata->ini_gpio, 0); 101 gpiod_set_value_cansleep(ddata->ini_gpio, 0);
105 102
@@ -233,7 +230,8 @@ static int __exit sharp_ls_remove(struct platform_device *pdev)
233 230
234 omapdss_device_unregister(dssdev); 231 omapdss_device_unregister(dssdev);
235 232
236 sharp_ls_disable(dssdev); 233 if (omapdss_device_is_enabled(dssdev))
234 sharp_ls_disable(dssdev);
237 235
238 return 0; 236 return 0;
239} 237}
diff --git a/drivers/gpu/drm/omapdrm/displays/panel-sony-acx565akm.c b/drivers/gpu/drm/omapdrm/displays/panel-sony-acx565akm.c
index 209a87c70c99..99c2c4f27dd5 100644
--- a/drivers/gpu/drm/omapdrm/displays/panel-sony-acx565akm.c
+++ b/drivers/gpu/drm/omapdrm/displays/panel-sony-acx565akm.c
@@ -605,9 +605,6 @@ static void acx565akm_disable(struct omap_dss_device *dssdev)
605{ 605{
606 struct panel_drv_data *ddata = to_panel_data(dssdev); 606 struct panel_drv_data *ddata = to_panel_data(dssdev);
607 607
608 if (!omapdss_device_is_enabled(dssdev))
609 return;
610
611 mutex_lock(&ddata->mutex); 608 mutex_lock(&ddata->mutex);
612 acx565akm_panel_power_off(dssdev); 609 acx565akm_panel_power_off(dssdev);
613 mutex_unlock(&ddata->mutex); 610 mutex_unlock(&ddata->mutex);
@@ -750,7 +747,8 @@ static int acx565akm_remove(struct spi_device *spi)
750 747
751 omapdss_device_unregister(dssdev); 748 omapdss_device_unregister(dssdev);
752 749
753 acx565akm_disable(dssdev); 750 if (omapdss_device_is_enabled(dssdev))
751 acx565akm_disable(dssdev);
754 752
755 return 0; 753 return 0;
756} 754}
diff --git a/drivers/gpu/drm/omapdrm/displays/panel-tpo-td028ttec1.c b/drivers/gpu/drm/omapdrm/displays/panel-tpo-td028ttec1.c
index b09fea97a441..8551a1df3ad6 100644
--- a/drivers/gpu/drm/omapdrm/displays/panel-tpo-td028ttec1.c
+++ b/drivers/gpu/drm/omapdrm/displays/panel-tpo-td028ttec1.c
@@ -270,9 +270,6 @@ static void td028ttec1_panel_disable(struct omap_dss_device *dssdev)
270 struct panel_drv_data *ddata = to_panel_data(dssdev); 270 struct panel_drv_data *ddata = to_panel_data(dssdev);
271 struct omap_dss_device *src = dssdev->src; 271 struct omap_dss_device *src = dssdev->src;
272 272
273 if (!omapdss_device_is_enabled(dssdev))
274 return;
275
276 dev_dbg(dssdev->dev, "td028ttec1_panel_disable()\n"); 273 dev_dbg(dssdev->dev, "td028ttec1_panel_disable()\n");
277 274
278 jbt_ret_write_0(ddata, JBT_REG_DISPLAY_OFF); 275 jbt_ret_write_0(ddata, JBT_REG_DISPLAY_OFF);
@@ -357,7 +354,8 @@ static int td028ttec1_panel_remove(struct spi_device *spi)
357 354
358 omapdss_device_unregister(dssdev); 355 omapdss_device_unregister(dssdev);
359 356
360 td028ttec1_panel_disable(dssdev); 357 if (omapdss_device_is_enabled(dssdev))
358 td028ttec1_panel_disable(dssdev);
361 359
362 return 0; 360 return 0;
363} 361}
diff --git a/drivers/gpu/drm/omapdrm/displays/panel-tpo-td043mtea1.c b/drivers/gpu/drm/omapdrm/displays/panel-tpo-td043mtea1.c
index 998f21f7701a..527abed69d34 100644
--- a/drivers/gpu/drm/omapdrm/displays/panel-tpo-td043mtea1.c
+++ b/drivers/gpu/drm/omapdrm/displays/panel-tpo-td043mtea1.c
@@ -350,9 +350,6 @@ static void tpo_td043_disable(struct omap_dss_device *dssdev)
350 struct panel_drv_data *ddata = to_panel_data(dssdev); 350 struct panel_drv_data *ddata = to_panel_data(dssdev);
351 struct omap_dss_device *src = dssdev->src; 351 struct omap_dss_device *src = dssdev->src;
352 352
353 if (!omapdss_device_is_enabled(dssdev))
354 return;
355
356 src->ops->disable(src); 353 src->ops->disable(src);
357 354
358 if (!ddata->spi_suspended) 355 if (!ddata->spi_suspended)
@@ -457,7 +454,8 @@ static int tpo_td043_remove(struct spi_device *spi)
457 454
458 omapdss_device_unregister(dssdev); 455 omapdss_device_unregister(dssdev);
459 456
460 tpo_td043_disable(dssdev); 457 if (omapdss_device_is_enabled(dssdev))
458 tpo_td043_disable(dssdev);
461 459
462 sysfs_remove_group(&spi->dev.kobj, &tpo_td043_attr_group); 460 sysfs_remove_group(&spi->dev.kobj, &tpo_td043_attr_group);
463 461
diff --git a/drivers/gpu/drm/omapdrm/omap_encoder.c b/drivers/gpu/drm/omapdrm/omap_encoder.c
index 3c3d88e1df38..d14d465392dd 100644
--- a/drivers/gpu/drm/omapdrm/omap_encoder.c
+++ b/drivers/gpu/drm/omapdrm/omap_encoder.c
@@ -151,9 +151,6 @@ static void omap_encoder_disable(struct drm_encoder *encoder)
151 151
152 dev_dbg(dev->dev, "disable(%s)\n", dssdev->name); 152 dev_dbg(dev->dev, "disable(%s)\n", dssdev->name);
153 153
154 if (!omapdss_device_is_enabled(dssdev))
155 return;
156
157 dssdev->ops->disable(dssdev); 154 dssdev->ops->disable(dssdev);
158 155
159 dssdev->state = OMAP_DSS_DISPLAY_DISABLED; 156 dssdev->state = OMAP_DSS_DISPLAY_DISABLED;
@@ -168,9 +165,6 @@ static void omap_encoder_enable(struct drm_encoder *encoder)
168 165
169 dev_dbg(dev->dev, "enable(%s)\n", dssdev->name); 166 dev_dbg(dev->dev, "enable(%s)\n", dssdev->name);
170 167
171 if (omapdss_device_is_enabled(dssdev))
172 return;
173
174 r = dssdev->ops->enable(dssdev); 168 r = dssdev->ops->enable(dssdev);
175 if (r) { 169 if (r) {
176 dev_err(dev->dev, "Failed to enable display '%s': %d\n", 170 dev_err(dev->dev, "Failed to enable display '%s': %d\n",