aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTomi Valkeinen <tomi.valkeinen@ti.com>2013-04-25 06:12:07 -0400
committerTomi Valkeinen <tomi.valkeinen@ti.com>2013-06-17 07:00:51 -0400
commitd3923933930273a2c1f724c50fe1dd829e196b31 (patch)
tree6aaadb4635ff6622ddf1a6e44f5fdc30c151ec0c
parentecc8b370898660613e846667f9c1e8a94f8d4aaa (diff)
OMAPDSS: remove omap_dss_start/stop_device()
The omap_dss_start_device() and omap_dss_stop_device(), called by the DSS output drivers, are old relics. They originally did something totally else, but nowadays they increase the module ref count for panels that are enabled. This model is quite broken: the panel modules may be used even before they are enabled. For example, configuring the panel requires calls to functions located in the panel modules. In the following patches we try to improve the ref count management for the modules and display devices. The first step, however, is to remove the omap_dss_start/stop_device() totally. Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
-rw-r--r--drivers/video/omap2/dss/display.c20
-rw-r--r--drivers/video/omap2/dss/dpi.c10
-rw-r--r--drivers/video/omap2/dss/dsi.c10
-rw-r--r--drivers/video/omap2/dss/hdmi.c12
-rw-r--r--drivers/video/omap2/dss/rfbi.c9
-rw-r--r--drivers/video/omap2/dss/sdi.c10
-rw-r--r--drivers/video/omap2/dss/venc.c12
-rw-r--r--include/video/omapdss.h3
8 files changed, 2 insertions, 84 deletions
diff --git a/drivers/video/omap2/dss/display.c b/drivers/video/omap2/dss/display.c
index a9a1d5563aa0..809676473a99 100644
--- a/drivers/video/omap2/dss/display.c
+++ b/drivers/video/omap2/dss/display.c
@@ -233,26 +233,6 @@ struct omap_dss_device *omap_dss_find_device(void *data,
233} 233}
234EXPORT_SYMBOL(omap_dss_find_device); 234EXPORT_SYMBOL(omap_dss_find_device);
235 235
236int omap_dss_start_device(struct omap_dss_device *dssdev)
237{
238 if (!dssdev->driver) {
239 DSSDBG("no driver\n");
240 return -ENODEV;
241 }
242
243 if (!try_module_get(dssdev->dev->driver->owner))
244 return -ENODEV;
245
246 return 0;
247}
248EXPORT_SYMBOL(omap_dss_start_device);
249
250void omap_dss_stop_device(struct omap_dss_device *dssdev)
251{
252 module_put(dssdev->dev->driver->owner);
253}
254EXPORT_SYMBOL(omap_dss_stop_device);
255
256void videomode_to_omap_video_timings(const struct videomode *vm, 236void videomode_to_omap_video_timings(const struct videomode *vm,
257 struct omap_video_timings *ovt) 237 struct omap_video_timings *ovt)
258{ 238{
diff --git a/drivers/video/omap2/dss/dpi.c b/drivers/video/omap2/dss/dpi.c
index aa653c46d9a4..e8cbf86eff9d 100644
--- a/drivers/video/omap2/dss/dpi.c
+++ b/drivers/video/omap2/dss/dpi.c
@@ -364,12 +364,6 @@ int omapdss_dpi_display_enable(struct omap_dss_device *dssdev)
364 goto err_no_out_mgr; 364 goto err_no_out_mgr;
365 } 365 }
366 366
367 r = omap_dss_start_device(dssdev);
368 if (r) {
369 DSSERR("failed to start device\n");
370 goto err_start_dev;
371 }
372
373 if (dss_has_feature(FEAT_DPI_USES_VDDS_DSI)) { 367 if (dss_has_feature(FEAT_DPI_USES_VDDS_DSI)) {
374 r = regulator_enable(dpi.vdds_dsi_reg); 368 r = regulator_enable(dpi.vdds_dsi_reg);
375 if (r) 369 if (r)
@@ -424,8 +418,6 @@ err_get_dispc:
424 if (dss_has_feature(FEAT_DPI_USES_VDDS_DSI)) 418 if (dss_has_feature(FEAT_DPI_USES_VDDS_DSI))
425 regulator_disable(dpi.vdds_dsi_reg); 419 regulator_disable(dpi.vdds_dsi_reg);
426err_reg_enable: 420err_reg_enable:
427 omap_dss_stop_device(dssdev);
428err_start_dev:
429err_no_out_mgr: 421err_no_out_mgr:
430err_no_reg: 422err_no_reg:
431 mutex_unlock(&dpi.lock); 423 mutex_unlock(&dpi.lock);
@@ -452,8 +444,6 @@ void omapdss_dpi_display_disable(struct omap_dss_device *dssdev)
452 if (dss_has_feature(FEAT_DPI_USES_VDDS_DSI)) 444 if (dss_has_feature(FEAT_DPI_USES_VDDS_DSI))
453 regulator_disable(dpi.vdds_dsi_reg); 445 regulator_disable(dpi.vdds_dsi_reg);
454 446
455 omap_dss_stop_device(dssdev);
456
457 mutex_unlock(&dpi.lock); 447 mutex_unlock(&dpi.lock);
458} 448}
459EXPORT_SYMBOL(omapdss_dpi_display_disable); 449EXPORT_SYMBOL(omapdss_dpi_display_disable);
diff --git a/drivers/video/omap2/dss/dsi.c b/drivers/video/omap2/dss/dsi.c
index 7d9e5ccb41e1..26aa4c324c18 100644
--- a/drivers/video/omap2/dss/dsi.c
+++ b/drivers/video/omap2/dss/dsi.c
@@ -4592,12 +4592,6 @@ int omapdss_dsi_display_enable(struct omap_dss_device *dssdev)
4592 4592
4593 mutex_lock(&dsi->lock); 4593 mutex_lock(&dsi->lock);
4594 4594
4595 r = omap_dss_start_device(dssdev);
4596 if (r) {
4597 DSSERR("failed to start device\n");
4598 goto err_start_dev;
4599 }
4600
4601 r = dsi_runtime_get(dsidev); 4595 r = dsi_runtime_get(dsidev);
4602 if (r) 4596 if (r)
4603 goto err_get_dsi; 4597 goto err_get_dsi;
@@ -4618,8 +4612,6 @@ err_init_dsi:
4618 dsi_enable_pll_clock(dsidev, 0); 4612 dsi_enable_pll_clock(dsidev, 0);
4619 dsi_runtime_put(dsidev); 4613 dsi_runtime_put(dsidev);
4620err_get_dsi: 4614err_get_dsi:
4621 omap_dss_stop_device(dssdev);
4622err_start_dev:
4623 mutex_unlock(&dsi->lock); 4615 mutex_unlock(&dsi->lock);
4624 DSSDBG("dsi_display_enable FAILED\n"); 4616 DSSDBG("dsi_display_enable FAILED\n");
4625 return r; 4617 return r;
@@ -4648,8 +4640,6 @@ void omapdss_dsi_display_disable(struct omap_dss_device *dssdev,
4648 dsi_runtime_put(dsidev); 4640 dsi_runtime_put(dsidev);
4649 dsi_enable_pll_clock(dsidev, 0); 4641 dsi_enable_pll_clock(dsidev, 0);
4650 4642
4651 omap_dss_stop_device(dssdev);
4652
4653 mutex_unlock(&dsi->lock); 4643 mutex_unlock(&dsi->lock);
4654} 4644}
4655EXPORT_SYMBOL(omapdss_dsi_display_disable); 4645EXPORT_SYMBOL(omapdss_dsi_display_disable);
diff --git a/drivers/video/omap2/dss/hdmi.c b/drivers/video/omap2/dss/hdmi.c
index 86b495c4b90f..1804f1e28b97 100644
--- a/drivers/video/omap2/dss/hdmi.c
+++ b/drivers/video/omap2/dss/hdmi.c
@@ -735,23 +735,15 @@ int omapdss_hdmi_display_enable(struct omap_dss_device *dssdev)
735 735
736 hdmi.ip_data.hpd_gpio = hdmi.hpd_gpio; 736 hdmi.ip_data.hpd_gpio = hdmi.hpd_gpio;
737 737
738 r = omap_dss_start_device(dssdev);
739 if (r) {
740 DSSERR("failed to start device\n");
741 goto err0;
742 }
743
744 r = hdmi_power_on_full(dssdev); 738 r = hdmi_power_on_full(dssdev);
745 if (r) { 739 if (r) {
746 DSSERR("failed to power on device\n"); 740 DSSERR("failed to power on device\n");
747 goto err1; 741 goto err0;
748 } 742 }
749 743
750 mutex_unlock(&hdmi.lock); 744 mutex_unlock(&hdmi.lock);
751 return 0; 745 return 0;
752 746
753err1:
754 omap_dss_stop_device(dssdev);
755err0: 747err0:
756 mutex_unlock(&hdmi.lock); 748 mutex_unlock(&hdmi.lock);
757 return r; 749 return r;
@@ -765,8 +757,6 @@ void omapdss_hdmi_display_disable(struct omap_dss_device *dssdev)
765 757
766 hdmi_power_off_full(dssdev); 758 hdmi_power_off_full(dssdev);
767 759
768 omap_dss_stop_device(dssdev);
769
770 mutex_unlock(&hdmi.lock); 760 mutex_unlock(&hdmi.lock);
771} 761}
772 762
diff --git a/drivers/video/omap2/dss/rfbi.c b/drivers/video/omap2/dss/rfbi.c
index cfcb52f088a2..30ff0e0d4629 100644
--- a/drivers/video/omap2/dss/rfbi.c
+++ b/drivers/video/omap2/dss/rfbi.c
@@ -902,12 +902,6 @@ int omapdss_rfbi_display_enable(struct omap_dss_device *dssdev)
902 if (r) 902 if (r)
903 return r; 903 return r;
904 904
905 r = omap_dss_start_device(dssdev);
906 if (r) {
907 DSSERR("failed to start device\n");
908 goto err0;
909 }
910
911 r = dss_mgr_register_framedone_handler(out->manager, 905 r = dss_mgr_register_framedone_handler(out->manager,
912 framedone_callback, NULL); 906 framedone_callback, NULL);
913 if (r) { 907 if (r) {
@@ -924,8 +918,6 @@ int omapdss_rfbi_display_enable(struct omap_dss_device *dssdev)
924 918
925 return 0; 919 return 0;
926err1: 920err1:
927 omap_dss_stop_device(dssdev);
928err0:
929 rfbi_runtime_put(); 921 rfbi_runtime_put();
930 return r; 922 return r;
931} 923}
@@ -937,7 +929,6 @@ void omapdss_rfbi_display_disable(struct omap_dss_device *dssdev)
937 929
938 dss_mgr_unregister_framedone_handler(out->manager, 930 dss_mgr_unregister_framedone_handler(out->manager,
939 framedone_callback, NULL); 931 framedone_callback, NULL);
940 omap_dss_stop_device(dssdev);
941 932
942 rfbi_runtime_put(); 933 rfbi_runtime_put();
943} 934}
diff --git a/drivers/video/omap2/dss/sdi.c b/drivers/video/omap2/dss/sdi.c
index ab67953f09b1..d4f3313bc378 100644
--- a/drivers/video/omap2/dss/sdi.c
+++ b/drivers/video/omap2/dss/sdi.c
@@ -138,12 +138,6 @@ int omapdss_sdi_display_enable(struct omap_dss_device *dssdev)
138 return -ENODEV; 138 return -ENODEV;
139 } 139 }
140 140
141 r = omap_dss_start_device(dssdev);
142 if (r) {
143 DSSERR("failed to start device\n");
144 goto err_start_dev;
145 }
146
147 r = regulator_enable(sdi.vdds_sdi_reg); 141 r = regulator_enable(sdi.vdds_sdi_reg);
148 if (r) 142 if (r)
149 goto err_reg_enable; 143 goto err_reg_enable;
@@ -215,8 +209,6 @@ err_calc_clock_div:
215err_get_dispc: 209err_get_dispc:
216 regulator_disable(sdi.vdds_sdi_reg); 210 regulator_disable(sdi.vdds_sdi_reg);
217err_reg_enable: 211err_reg_enable:
218 omap_dss_stop_device(dssdev);
219err_start_dev:
220 return r; 212 return r;
221} 213}
222EXPORT_SYMBOL(omapdss_sdi_display_enable); 214EXPORT_SYMBOL(omapdss_sdi_display_enable);
@@ -232,8 +224,6 @@ void omapdss_sdi_display_disable(struct omap_dss_device *dssdev)
232 dispc_runtime_put(); 224 dispc_runtime_put();
233 225
234 regulator_disable(sdi.vdds_sdi_reg); 226 regulator_disable(sdi.vdds_sdi_reg);
235
236 omap_dss_stop_device(dssdev);
237} 227}
238EXPORT_SYMBOL(omapdss_sdi_display_disable); 228EXPORT_SYMBOL(omapdss_sdi_display_disable);
239 229
diff --git a/drivers/video/omap2/dss/venc.c b/drivers/video/omap2/dss/venc.c
index f6d2b3f98885..d529a9249432 100644
--- a/drivers/video/omap2/dss/venc.c
+++ b/drivers/video/omap2/dss/venc.c
@@ -513,23 +513,15 @@ int omapdss_venc_display_enable(struct omap_dss_device *dssdev)
513 goto err0; 513 goto err0;
514 } 514 }
515 515
516 r = omap_dss_start_device(dssdev);
517 if (r) {
518 DSSERR("failed to start device\n");
519 goto err0;
520 }
521
522 r = venc_power_on(dssdev); 516 r = venc_power_on(dssdev);
523 if (r) 517 if (r)
524 goto err1; 518 goto err0;
525 519
526 venc.wss_data = 0; 520 venc.wss_data = 0;
527 521
528 mutex_unlock(&venc.venc_lock); 522 mutex_unlock(&venc.venc_lock);
529 523
530 return 0; 524 return 0;
531err1:
532 omap_dss_stop_device(dssdev);
533err0: 525err0:
534 mutex_unlock(&venc.venc_lock); 526 mutex_unlock(&venc.venc_lock);
535 return r; 527 return r;
@@ -543,8 +535,6 @@ void omapdss_venc_display_disable(struct omap_dss_device *dssdev)
543 535
544 venc_power_off(dssdev); 536 venc_power_off(dssdev);
545 537
546 omap_dss_stop_device(dssdev);
547
548 mutex_unlock(&venc.venc_lock); 538 mutex_unlock(&venc.venc_lock);
549} 539}
550 540
diff --git a/include/video/omapdss.h b/include/video/omapdss.h
index b7d975755cff..6a699f537a68 100644
--- a/include/video/omapdss.h
+++ b/include/video/omapdss.h
@@ -779,9 +779,6 @@ struct omap_dss_device *omap_dss_find_device(void *data,
779 int (*match)(struct omap_dss_device *dssdev, void *data)); 779 int (*match)(struct omap_dss_device *dssdev, void *data));
780const char *omapdss_get_default_display_name(void); 780const char *omapdss_get_default_display_name(void);
781 781
782int omap_dss_start_device(struct omap_dss_device *dssdev);
783void omap_dss_stop_device(struct omap_dss_device *dssdev);
784
785void videomode_to_omap_video_timings(const struct videomode *vm, 782void videomode_to_omap_video_timings(const struct videomode *vm,
786 struct omap_video_timings *ovt); 783 struct omap_video_timings *ovt);
787void omap_video_timings_to_videomode(const struct omap_video_timings *ovt, 784void omap_video_timings_to_videomode(const struct omap_video_timings *ovt,