aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/video/omap2/dss
diff options
context:
space:
mode:
authorTomi Valkeinen <tomi.valkeinen@ti.com>2012-12-07 05:50:08 -0500
committerTomi Valkeinen <tomi.valkeinen@ti.com>2012-12-07 09:55:04 -0500
commit486c0e17b7d1a4f8f057a97f2e48f715208f950d (patch)
treed8ece0b76b86b47973921d33f5971d3a5be5d79a /drivers/video/omap2/dss
parent09a8c45cbb872f5e861c4385d6967d0aa7f637f1 (diff)
OMAPDSS: manage output-dssdev connection in output drivers
We currently attach an output to a dssdev in the initialization code for dssdevices in display.c. This works, but doesn't quite make sense: an output entity represents (surprisingly) an output of DSS, which is managed by an output driver. The output driver also handles adding new dssdev's for that particular output. It makes more sense to make the output-dssdev connection in the output driver. This is also in line with common display framework. Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Diffstat (limited to 'drivers/video/omap2/dss')
-rw-r--r--drivers/video/omap2/dss/display.c12
-rw-r--r--drivers/video/omap2/dss/dpi.c9
-rw-r--r--drivers/video/omap2/dss/dsi.c10
-rw-r--r--drivers/video/omap2/dss/dss.h1
-rw-r--r--drivers/video/omap2/dss/hdmi.c9
-rw-r--r--drivers/video/omap2/dss/output.c33
-rw-r--r--drivers/video/omap2/dss/rfbi.c9
-rw-r--r--drivers/video/omap2/dss/sdi.c9
-rw-r--r--drivers/video/omap2/dss/venc.c9
9 files changed, 55 insertions, 46 deletions
diff --git a/drivers/video/omap2/dss/display.c b/drivers/video/omap2/dss/display.c
index 008e9eecaf72..05f21b6231b7 100644
--- a/drivers/video/omap2/dss/display.c
+++ b/drivers/video/omap2/dss/display.c
@@ -79,17 +79,8 @@ EXPORT_SYMBOL(omapdss_default_get_timings);
79int dss_init_device(struct platform_device *pdev, 79int dss_init_device(struct platform_device *pdev,
80 struct omap_dss_device *dssdev) 80 struct omap_dss_device *dssdev)
81{ 81{
82 struct omap_dss_output *out;
83 int r; 82 int r;
84 83
85 out = omapdss_get_output_from_dssdev(dssdev);
86
87 r = omapdss_output_set_device(out, dssdev);
88 if (r) {
89 DSSERR("failed to connect output to new device\n");
90 return r;
91 }
92
93 r = display_init_sysfs(pdev, dssdev); 84 r = display_init_sysfs(pdev, dssdev);
94 if (r) { 85 if (r) {
95 omapdss_output_unset_device(dssdev->output); 86 omapdss_output_unset_device(dssdev->output);
@@ -103,9 +94,6 @@ void dss_uninit_device(struct platform_device *pdev,
103 struct omap_dss_device *dssdev) 94 struct omap_dss_device *dssdev)
104{ 95{
105 display_uninit_sysfs(pdev, dssdev); 96 display_uninit_sysfs(pdev, dssdev);
106
107 if (dssdev->output)
108 omapdss_output_unset_device(dssdev->output);
109} 97}
110 98
111static int dss_suspend_device(struct device *dev, void *data) 99static int dss_suspend_device(struct device *dev, void *data)
diff --git a/drivers/video/omap2/dss/dpi.c b/drivers/video/omap2/dss/dpi.c
index c109fa68c01d..d5bc47a4f3ee 100644
--- a/drivers/video/omap2/dss/dpi.c
+++ b/drivers/video/omap2/dss/dpi.c
@@ -477,9 +477,18 @@ static void __init dpi_probe_pdata(struct platform_device *dpidev)
477 return; 477 return;
478 } 478 }
479 479
480 r = omapdss_output_set_device(&dpi.output, dssdev);
481 if (r) {
482 DSSERR("failed to connect output to new device: %s\n",
483 dssdev->name);
484 dss_put_device(dssdev);
485 return;
486 }
487
480 r = dss_add_device(dssdev); 488 r = dss_add_device(dssdev);
481 if (r) { 489 if (r) {
482 DSSERR("device %s register failed: %d\n", dssdev->name, r); 490 DSSERR("device %s register failed: %d\n", dssdev->name, r);
491 omapdss_output_unset_device(&dpi.output);
483 dss_put_device(dssdev); 492 dss_put_device(dssdev);
484 return; 493 return;
485 } 494 }
diff --git a/drivers/video/omap2/dss/dsi.c b/drivers/video/omap2/dss/dsi.c
index cf32dc7e70f2..db9663dcfbd0 100644
--- a/drivers/video/omap2/dss/dsi.c
+++ b/drivers/video/omap2/dss/dsi.c
@@ -5146,6 +5146,7 @@ static struct omap_dss_device * __init dsi_find_dssdev(struct platform_device *p
5146 5146
5147static void __init dsi_probe_pdata(struct platform_device *dsidev) 5147static void __init dsi_probe_pdata(struct platform_device *dsidev)
5148{ 5148{
5149 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev);
5149 struct omap_dss_device *plat_dssdev; 5150 struct omap_dss_device *plat_dssdev;
5150 struct omap_dss_device *dssdev; 5151 struct omap_dss_device *dssdev;
5151 int r; 5152 int r;
@@ -5168,9 +5169,18 @@ static void __init dsi_probe_pdata(struct platform_device *dsidev)
5168 return; 5169 return;
5169 } 5170 }
5170 5171
5172 r = omapdss_output_set_device(&dsi->output, dssdev);
5173 if (r) {
5174 DSSERR("failed to connect output to new device: %s\n",
5175 dssdev->name);
5176 dss_put_device(dssdev);
5177 return;
5178 }
5179
5171 r = dss_add_device(dssdev); 5180 r = dss_add_device(dssdev);
5172 if (r) { 5181 if (r) {
5173 DSSERR("device %s register failed: %d\n", dssdev->name, r); 5182 DSSERR("device %s register failed: %d\n", dssdev->name, r);
5183 omapdss_output_unset_device(&dsi->output);
5174 dss_put_device(dssdev); 5184 dss_put_device(dssdev);
5175 return; 5185 return;
5176 } 5186 }
diff --git a/drivers/video/omap2/dss/dss.h b/drivers/video/omap2/dss/dss.h
index 4d6f325cee84..bdf843135661 100644
--- a/drivers/video/omap2/dss/dss.h
+++ b/drivers/video/omap2/dss/dss.h
@@ -212,7 +212,6 @@ int dss_ovl_unset_manager(struct omap_overlay *ovl);
212/* output */ 212/* output */
213void dss_register_output(struct omap_dss_output *out); 213void dss_register_output(struct omap_dss_output *out);
214void dss_unregister_output(struct omap_dss_output *out); 214void dss_unregister_output(struct omap_dss_output *out);
215struct omap_dss_output *omapdss_get_output_from_dssdev(struct omap_dss_device *dssdev);
216 215
217/* display */ 216/* display */
218int dss_suspend_all_devices(void); 217int dss_suspend_all_devices(void);
diff --git a/drivers/video/omap2/dss/hdmi.c b/drivers/video/omap2/dss/hdmi.c
index 24a2eefb7e8c..769d0828581c 100644
--- a/drivers/video/omap2/dss/hdmi.c
+++ b/drivers/video/omap2/dss/hdmi.c
@@ -1026,9 +1026,18 @@ static void __init hdmi_probe_pdata(struct platform_device *pdev)
1026 return; 1026 return;
1027 } 1027 }
1028 1028
1029 r = omapdss_output_set_device(&hdmi.output, dssdev);
1030 if (r) {
1031 DSSERR("failed to connect output to new device: %s\n",
1032 dssdev->name);
1033 dss_put_device(dssdev);
1034 return;
1035 }
1036
1029 r = dss_add_device(dssdev); 1037 r = dss_add_device(dssdev);
1030 if (r) { 1038 if (r) {
1031 DSSERR("device %s register failed: %d\n", dssdev->name, r); 1039 DSSERR("device %s register failed: %d\n", dssdev->name, r);
1040 omapdss_output_unset_device(&hdmi.output);
1032 hdmi_uninit_display(dssdev); 1041 hdmi_uninit_display(dssdev);
1033 dss_put_device(dssdev); 1042 dss_put_device(dssdev);
1034 return; 1043 return;
diff --git a/drivers/video/omap2/dss/output.c b/drivers/video/omap2/dss/output.c
index 813f26682b7a..1a84b79d5580 100644
--- a/drivers/video/omap2/dss/output.c
+++ b/drivers/video/omap2/dss/output.c
@@ -113,36 +113,3 @@ struct omap_dss_output *omap_dss_get_output(enum omap_dss_output_id id)
113 113
114 return NULL; 114 return NULL;
115} 115}
116
117struct omap_dss_output *omapdss_get_output_from_dssdev(struct omap_dss_device *dssdev)
118{
119 struct omap_dss_output *out = NULL;
120 enum omap_dss_output_id id;
121
122 switch (dssdev->type) {
123 case OMAP_DISPLAY_TYPE_DPI:
124 out = omap_dss_get_output(OMAP_DSS_OUTPUT_DPI);
125 break;
126 case OMAP_DISPLAY_TYPE_DBI:
127 out = omap_dss_get_output(OMAP_DSS_OUTPUT_DBI);
128 break;
129 case OMAP_DISPLAY_TYPE_SDI:
130 out = omap_dss_get_output(OMAP_DSS_OUTPUT_SDI);
131 break;
132 case OMAP_DISPLAY_TYPE_VENC:
133 out = omap_dss_get_output(OMAP_DSS_OUTPUT_VENC);
134 break;
135 case OMAP_DISPLAY_TYPE_HDMI:
136 out = omap_dss_get_output(OMAP_DSS_OUTPUT_HDMI);
137 break;
138 case OMAP_DISPLAY_TYPE_DSI:
139 id = dssdev->phy.dsi.module == 0 ? OMAP_DSS_OUTPUT_DSI1 :
140 OMAP_DSS_OUTPUT_DSI2;
141 out = omap_dss_get_output(id);
142 break;
143 default:
144 break;
145 }
146
147 return out;
148}
diff --git a/drivers/video/omap2/dss/rfbi.c b/drivers/video/omap2/dss/rfbi.c
index 7bfeb13cf3d0..ec9fde52716c 100644
--- a/drivers/video/omap2/dss/rfbi.c
+++ b/drivers/video/omap2/dss/rfbi.c
@@ -999,9 +999,18 @@ static void __init rfbi_probe_pdata(struct platform_device *rfbidev)
999 return; 999 return;
1000 } 1000 }
1001 1001
1002 r = omapdss_output_set_device(&rfbi.output, dssdev);
1003 if (r) {
1004 DSSERR("failed to connect output to new device: %s\n",
1005 dssdev->name);
1006 dss_put_device(dssdev);
1007 return;
1008 }
1009
1002 r = dss_add_device(dssdev); 1010 r = dss_add_device(dssdev);
1003 if (r) { 1011 if (r) {
1004 DSSERR("device %s register failed: %d\n", dssdev->name, r); 1012 DSSERR("device %s register failed: %d\n", dssdev->name, r);
1013 omapdss_output_unset_device(&rfbi.output);
1005 dss_put_device(dssdev); 1014 dss_put_device(dssdev);
1006 return; 1015 return;
1007 } 1016 }
diff --git a/drivers/video/omap2/dss/sdi.c b/drivers/video/omap2/dss/sdi.c
index 882ce89765e7..62b5374ce438 100644
--- a/drivers/video/omap2/dss/sdi.c
+++ b/drivers/video/omap2/dss/sdi.c
@@ -254,9 +254,18 @@ static void __init sdi_probe_pdata(struct platform_device *sdidev)
254 return; 254 return;
255 } 255 }
256 256
257 r = omapdss_output_set_device(&sdi.output, dssdev);
258 if (r) {
259 DSSERR("failed to connect output to new device: %s\n",
260 dssdev->name);
261 dss_put_device(dssdev);
262 return;
263 }
264
257 r = dss_add_device(dssdev); 265 r = dss_add_device(dssdev);
258 if (r) { 266 if (r) {
259 DSSERR("device %s register failed: %d\n", dssdev->name, r); 267 DSSERR("device %s register failed: %d\n", dssdev->name, r);
268 omapdss_output_unset_device(&sdi.output);
260 dss_put_device(dssdev); 269 dss_put_device(dssdev);
261 return; 270 return;
262 } 271 }
diff --git a/drivers/video/omap2/dss/venc.c b/drivers/video/omap2/dss/venc.c
index e8fddc9012cb..006caf3cb509 100644
--- a/drivers/video/omap2/dss/venc.c
+++ b/drivers/video/omap2/dss/venc.c
@@ -795,9 +795,18 @@ static void __init venc_probe_pdata(struct platform_device *vencdev)
795 return; 795 return;
796 } 796 }
797 797
798 r = omapdss_output_set_device(&venc.output, dssdev);
799 if (r) {
800 DSSERR("failed to connect output to new device: %s\n",
801 dssdev->name);
802 dss_put_device(dssdev);
803 return;
804 }
805
798 r = dss_add_device(dssdev); 806 r = dss_add_device(dssdev);
799 if (r) { 807 if (r) {
800 DSSERR("device %s register failed: %d\n", dssdev->name, r); 808 DSSERR("device %s register failed: %d\n", dssdev->name, r);
809 omapdss_output_unset_device(&venc.output);
801 dss_put_device(dssdev); 810 dss_put_device(dssdev);
802 return; 811 return;
803 } 812 }