aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSenthilvadivu Guruswamy <svadivu@ti.com>2011-01-24 01:22:01 -0500
committerTomi Valkeinen <tomi.valkeinen@ti.com>2011-03-11 08:46:20 -0500
commit30ea50c9f5166a375b4dc0109d18a5d21bab5711 (patch)
tree604bc1862a890093950c7759b0085b146695802b
parent060b6d9cbab03f1379dbe00393ab26d6eb371ce2 (diff)
OMAP2, 3: DSS2: VENC: create platform_driver, move init, exit to driver
Hwmod adaptation design requires each of the DSS HW IP to be a platform driver. So a platform_driver for VENC is created and init exit methods are moved from core.c to its driver probe,remove. pdev member has to be maintained by its own drivers. Also, venc_vdda_dac reading is moved to venc.c. VENC platform driver is registered from inside omap_dss_probe, in the order desired. Signed-off-by: Senthilvadivu Guruswamy <svadivu@ti.com> Signed-off-by: Sumit Semwal <sumit.semwal@ti.com> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
-rw-r--r--arch/arm/mach-omap2/board-3430sdp.c2
-rw-r--r--arch/arm/mach-omap2/board-cm-t35.c2
-rw-r--r--arch/arm/mach-omap2/board-devkit8000.c2
-rw-r--r--arch/arm/mach-omap2/board-omap3beagle.c2
-rw-r--r--arch/arm/mach-omap2/board-omap3evm.c2
-rw-r--r--arch/arm/mach-omap2/board-omap3pandora.c2
-rw-r--r--arch/arm/mach-omap2/board-omap3stalker.c2
-rw-r--r--arch/arm/mach-omap2/board-rx51-peripherals.c2
-rw-r--r--arch/arm/mach-omap2/board-zoom-peripherals.c2
-rw-r--r--drivers/video/omap2/dss/core.c28
-rw-r--r--drivers/video/omap2/dss/dss.h9
-rw-r--r--drivers/video/omap2/dss/venc.c116
12 files changed, 93 insertions, 78 deletions
diff --git a/arch/arm/mach-omap2/board-3430sdp.c b/arch/arm/mach-omap2/board-3430sdp.c
index e018472861e6..652e7c38c62e 100644
--- a/arch/arm/mach-omap2/board-3430sdp.c
+++ b/arch/arm/mach-omap2/board-3430sdp.c
@@ -395,7 +395,7 @@ static struct regulator_consumer_supply sdp3430_vaux3_supplies[] = {
395}; 395};
396 396
397static struct regulator_consumer_supply sdp3430_vdda_dac_supplies[] = { 397static struct regulator_consumer_supply sdp3430_vdda_dac_supplies[] = {
398 REGULATOR_SUPPLY("vdda_dac", "omapdss"), 398 REGULATOR_SUPPLY("vdda_dac", "omapdss_venc"),
399}; 399};
400 400
401/* VPLL2 for digital video outputs */ 401/* VPLL2 for digital video outputs */
diff --git a/arch/arm/mach-omap2/board-cm-t35.c b/arch/arm/mach-omap2/board-cm-t35.c
index 27bea540ccbb..e55fde0a720d 100644
--- a/arch/arm/mach-omap2/board-cm-t35.c
+++ b/arch/arm/mach-omap2/board-cm-t35.c
@@ -488,7 +488,7 @@ static struct regulator_consumer_supply cm_t35_vsim_supply = {
488}; 488};
489 489
490static struct regulator_consumer_supply cm_t35_vdac_supply = 490static struct regulator_consumer_supply cm_t35_vdac_supply =
491 REGULATOR_SUPPLY("vdda_dac", "omapdss"); 491 REGULATOR_SUPPLY("vdda_dac", "omapdss_venc");
492 492
493static struct regulator_consumer_supply cm_t35_vdvi_supply = 493static struct regulator_consumer_supply cm_t35_vdvi_supply =
494 REGULATOR_SUPPLY("vdvi", "omapdss"); 494 REGULATOR_SUPPLY("vdvi", "omapdss");
diff --git a/arch/arm/mach-omap2/board-devkit8000.c b/arch/arm/mach-omap2/board-devkit8000.c
index 728f27c5bcb1..b64774b3d82c 100644
--- a/arch/arm/mach-omap2/board-devkit8000.c
+++ b/arch/arm/mach-omap2/board-devkit8000.c
@@ -196,7 +196,7 @@ static struct omap_dss_board_info devkit8000_dss_data = {
196}; 196};
197 197
198static struct regulator_consumer_supply devkit8000_vdda_dac_supply = 198static struct regulator_consumer_supply devkit8000_vdda_dac_supply =
199 REGULATOR_SUPPLY("vdda_dac", "omapdss"); 199 REGULATOR_SUPPLY("vdda_dac", "omapdss_venc");
200 200
201static uint32_t board_keymap[] = { 201static uint32_t board_keymap[] = {
202 KEY(0, 0, KEY_1), 202 KEY(0, 0, KEY_1),
diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
index 20c5dbea8953..2fad38f9e683 100644
--- a/arch/arm/mach-omap2/board-omap3beagle.c
+++ b/arch/arm/mach-omap2/board-omap3beagle.c
@@ -232,7 +232,7 @@ static struct omap_dss_board_info beagle_dss_data = {
232}; 232};
233 233
234static struct regulator_consumer_supply beagle_vdac_supply = 234static struct regulator_consumer_supply beagle_vdac_supply =
235 REGULATOR_SUPPLY("vdda_dac", "omapdss"); 235 REGULATOR_SUPPLY("vdda_dac", "omapdss_venc");
236 236
237static struct regulator_consumer_supply beagle_vdvi_supply = 237static struct regulator_consumer_supply beagle_vdvi_supply =
238 REGULATOR_SUPPLY("vdds_dsi", "omapdss"); 238 REGULATOR_SUPPLY("vdds_dsi", "omapdss");
diff --git a/arch/arm/mach-omap2/board-omap3evm.c b/arch/arm/mach-omap2/board-omap3evm.c
index b65848c59e1d..a6564b41b97a 100644
--- a/arch/arm/mach-omap2/board-omap3evm.c
+++ b/arch/arm/mach-omap2/board-omap3evm.c
@@ -542,7 +542,7 @@ static struct twl4030_codec_data omap3evm_codec_data = {
542}; 542};
543 543
544static struct regulator_consumer_supply omap3_evm_vdda_dac_supply = 544static struct regulator_consumer_supply omap3_evm_vdda_dac_supply =
545 REGULATOR_SUPPLY("vdda_dac", "omapdss"); 545 REGULATOR_SUPPLY("vdda_dac", "omapdss_venc");
546 546
547/* VDAC for DSS driving S-Video */ 547/* VDAC for DSS driving S-Video */
548static struct regulator_init_data omap3_evm_vdac = { 548static struct regulator_init_data omap3_evm_vdac = {
diff --git a/arch/arm/mach-omap2/board-omap3pandora.c b/arch/arm/mach-omap2/board-omap3pandora.c
index 5386a8190ea1..37de418edd2a 100644
--- a/arch/arm/mach-omap2/board-omap3pandora.c
+++ b/arch/arm/mach-omap2/board-omap3pandora.c
@@ -342,7 +342,7 @@ static struct regulator_consumer_supply pandora_vmmc3_supply =
342 REGULATOR_SUPPLY("vmmc", "omap_hsmmc.2"); 342 REGULATOR_SUPPLY("vmmc", "omap_hsmmc.2");
343 343
344static struct regulator_consumer_supply pandora_vdda_dac_supply = 344static struct regulator_consumer_supply pandora_vdda_dac_supply =
345 REGULATOR_SUPPLY("vdda_dac", "omapdss"); 345 REGULATOR_SUPPLY("vdda_dac", "omapdss_venc");
346 346
347static struct regulator_consumer_supply pandora_vdds_supplies[] = { 347static struct regulator_consumer_supply pandora_vdds_supplies[] = {
348 REGULATOR_SUPPLY("vdds_sdi", "omapdss"), 348 REGULATOR_SUPPLY("vdds_sdi", "omapdss"),
diff --git a/arch/arm/mach-omap2/board-omap3stalker.c b/arch/arm/mach-omap2/board-omap3stalker.c
index 15ede8b49815..bd0eed858078 100644
--- a/arch/arm/mach-omap2/board-omap3stalker.c
+++ b/arch/arm/mach-omap2/board-omap3stalker.c
@@ -439,7 +439,7 @@ static struct twl4030_codec_data omap3stalker_codec_data = {
439}; 439};
440 440
441static struct regulator_consumer_supply omap3_stalker_vdda_dac_supply = 441static struct regulator_consumer_supply omap3_stalker_vdda_dac_supply =
442 REGULATOR_SUPPLY("vdda_dac", "omapdss"); 442 REGULATOR_SUPPLY("vdda_dac", "omapdss_venc");
443 443
444/* VDAC for DSS driving S-Video */ 444/* VDAC for DSS driving S-Video */
445static struct regulator_init_data omap3_stalker_vdac = { 445static struct regulator_init_data omap3_stalker_vdac = {
diff --git a/arch/arm/mach-omap2/board-rx51-peripherals.c b/arch/arm/mach-omap2/board-rx51-peripherals.c
index 5f1900c532ec..bbcb6775a6a3 100644
--- a/arch/arm/mach-omap2/board-rx51-peripherals.c
+++ b/arch/arm/mach-omap2/board-rx51-peripherals.c
@@ -372,7 +372,7 @@ static struct regulator_consumer_supply rx51_vaux1_consumers[] = {
372}; 372};
373 373
374static struct regulator_consumer_supply rx51_vdac_supply[] = { 374static struct regulator_consumer_supply rx51_vdac_supply[] = {
375 REGULATOR_SUPPLY("vdda_dac", "omapdss"), 375 REGULATOR_SUPPLY("vdda_dac", "omapdss_venc"),
376}; 376};
377 377
378static struct regulator_init_data rx51_vaux1 = { 378static struct regulator_init_data rx51_vaux1 = {
diff --git a/arch/arm/mach-omap2/board-zoom-peripherals.c b/arch/arm/mach-omap2/board-zoom-peripherals.c
index 448ab60195d5..405400c4762b 100644
--- a/arch/arm/mach-omap2/board-zoom-peripherals.c
+++ b/arch/arm/mach-omap2/board-zoom-peripherals.c
@@ -230,7 +230,7 @@ static struct regulator_consumer_supply zoom_vpll2_supply =
230 REGULATOR_SUPPLY("vdds_dsi", "omapdss"); 230 REGULATOR_SUPPLY("vdds_dsi", "omapdss");
231 231
232static struct regulator_consumer_supply zoom_vdda_dac_supply = 232static struct regulator_consumer_supply zoom_vdda_dac_supply =
233 REGULATOR_SUPPLY("vdda_dac", "omapdss"); 233 REGULATOR_SUPPLY("vdda_dac", "omapdss_venc");
234 234
235static struct regulator_init_data zoom_vpll2 = { 235static struct regulator_init_data zoom_vpll2 = {
236 .constraints = { 236 .constraints = {
diff --git a/drivers/video/omap2/dss/core.c b/drivers/video/omap2/dss/core.c
index 8b7eab83e412..57c6303cb1cd 100644
--- a/drivers/video/omap2/dss/core.c
+++ b/drivers/video/omap2/dss/core.c
@@ -43,7 +43,6 @@ static struct {
43 43
44 struct regulator *vdds_dsi_reg; 44 struct regulator *vdds_dsi_reg;
45 struct regulator *vdds_sdi_reg; 45 struct regulator *vdds_sdi_reg;
46 struct regulator *vdda_dac_reg;
47} core; 46} core;
48 47
49static char *def_disp_name; 48static char *def_disp_name;
@@ -85,20 +84,6 @@ struct regulator *dss_get_vdds_sdi(void)
85 return reg; 84 return reg;
86} 85}
87 86
88struct regulator *dss_get_vdda_dac(void)
89{
90 struct regulator *reg;
91
92 if (core.vdda_dac_reg != NULL)
93 return core.vdda_dac_reg;
94
95 reg = regulator_get(&core.pdev->dev, "vdda_dac");
96 if (!IS_ERR(reg))
97 core.vdda_dac_reg = reg;
98
99 return reg;
100}
101
102#if defined(CONFIG_DEBUG_FS) && defined(CONFIG_OMAP2_DSS_DEBUG_SUPPORT) 87#if defined(CONFIG_DEBUG_FS) && defined(CONFIG_OMAP2_DSS_DEBUG_SUPPORT)
103static int dss_debug_show(struct seq_file *s, void *unused) 88static int dss_debug_show(struct seq_file *s, void *unused)
104{ 89{
@@ -219,9 +204,9 @@ static int omap_dss_probe(struct platform_device *pdev)
219 goto err_dispc; 204 goto err_dispc;
220 } 205 }
221 206
222 r = venc_init(pdev); 207 r = venc_init_platform_driver();
223 if (r) { 208 if (r) {
224 DSSERR("Failed to initialize venc\n"); 209 DSSERR("Failed to initialize venc platform driver\n");
225 goto err_venc; 210 goto err_venc;
226 } 211 }
227 212
@@ -279,7 +264,7 @@ err_dsi:
279 if (cpu_is_omap34xx()) 264 if (cpu_is_omap34xx())
280 sdi_exit(); 265 sdi_exit();
281err_sdi: 266err_sdi:
282 venc_exit(); 267 venc_uninit_platform_driver();
283err_venc: 268err_venc:
284 dispc_uninit_platform_driver(); 269 dispc_uninit_platform_driver();
285err_dispc: 270err_dispc:
@@ -300,7 +285,7 @@ static int omap_dss_remove(struct platform_device *pdev)
300 285
301 dss_uninitialize_debugfs(); 286 dss_uninitialize_debugfs();
302 287
303 venc_exit(); 288 venc_uninit_platform_driver();
304 dispc_uninit_platform_driver(); 289 dispc_uninit_platform_driver();
305 dpi_exit(); 290 dpi_exit();
306 rfbi_uninit_platform_driver(); 291 rfbi_uninit_platform_driver();
@@ -597,11 +582,6 @@ static void __exit omap_dss_exit(void)
597 core.vdds_sdi_reg = NULL; 582 core.vdds_sdi_reg = NULL;
598 } 583 }
599 584
600 if (core.vdda_dac_reg != NULL) {
601 regulator_put(core.vdda_dac_reg);
602 core.vdda_dac_reg = NULL;
603 }
604
605 platform_driver_unregister(&omap_dss_driver); 585 platform_driver_unregister(&omap_dss_driver);
606 586
607 omap_dss_bus_unregister(); 587 omap_dss_bus_unregister();
diff --git a/drivers/video/omap2/dss/dss.h b/drivers/video/omap2/dss/dss.h
index f4835c85db90..931385185dc6 100644
--- a/drivers/video/omap2/dss/dss.h
+++ b/drivers/video/omap2/dss/dss.h
@@ -172,7 +172,6 @@ struct platform_device;
172struct bus_type *dss_get_bus(void); 172struct bus_type *dss_get_bus(void);
173struct regulator *dss_get_vdds_dsi(void); 173struct regulator *dss_get_vdds_dsi(void);
174struct regulator *dss_get_vdds_sdi(void); 174struct regulator *dss_get_vdds_sdi(void);
175struct regulator *dss_get_vdda_dac(void);
176 175
177/* display */ 176/* display */
178int dss_suspend_all_devices(void); 177int dss_suspend_all_devices(void);
@@ -412,16 +411,16 @@ int dispc_get_clock_div(enum omap_channel channel,
412 411
413/* VENC */ 412/* VENC */
414#ifdef CONFIG_OMAP2_DSS_VENC 413#ifdef CONFIG_OMAP2_DSS_VENC
415int venc_init(struct platform_device *pdev); 414int venc_init_platform_driver(void);
416void venc_exit(void); 415void venc_uninit_platform_driver(void);
417void venc_dump_regs(struct seq_file *s); 416void venc_dump_regs(struct seq_file *s);
418int venc_init_display(struct omap_dss_device *display); 417int venc_init_display(struct omap_dss_device *display);
419#else 418#else
420static inline int venc_init(struct platform_device *pdev) 419static inline int venc_init_platform_driver(void)
421{ 420{
422 return 0; 421 return 0;
423} 422}
424static inline void venc_exit(void) 423static inline void venc_uninit_platform_driver(void)
425{ 424{
426} 425}
427#endif 426#endif
diff --git a/drivers/video/omap2/dss/venc.c b/drivers/video/omap2/dss/venc.c
index eff35050e28a..765a4ac44ecd 100644
--- a/drivers/video/omap2/dss/venc.c
+++ b/drivers/video/omap2/dss/venc.c
@@ -289,6 +289,7 @@ const struct omap_video_timings omap_dss_ntsc_timings = {
289EXPORT_SYMBOL(omap_dss_ntsc_timings); 289EXPORT_SYMBOL(omap_dss_ntsc_timings);
290 290
291static struct { 291static struct {
292 struct platform_device *pdev;
292 void __iomem *base; 293 void __iomem *base;
293 struct mutex venc_lock; 294 struct mutex venc_lock;
294 u32 wss_data; 295 u32 wss_data;
@@ -306,6 +307,17 @@ static inline u32 venc_read_reg(int idx)
306 return l; 307 return l;
307} 308}
308 309
310static struct regulator *venc_get_vdda_dac(void)
311{
312 struct regulator *reg;
313
314 reg = regulator_get(&venc.pdev->dev, "vdda_dac");
315 if (!IS_ERR(reg))
316 venc.vdda_dac_reg = reg;
317
318 return reg;
319}
320
309static void venc_write_config(const struct venc_config *config) 321static void venc_write_config(const struct venc_config *config)
310{ 322{
311 DSSDBG("write venc conf\n"); 323 DSSDBG("write venc conf\n");
@@ -641,46 +653,6 @@ static struct omap_dss_driver venc_driver = {
641}; 653};
642/* driver end */ 654/* driver end */
643 655
644
645
646int venc_init(struct platform_device *pdev)
647{
648 u8 rev_id;
649
650 mutex_init(&venc.venc_lock);
651
652 venc.wss_data = 0;
653
654 venc.base = ioremap(VENC_BASE, SZ_1K);
655 if (!venc.base) {
656 DSSERR("can't ioremap VENC\n");
657 return -ENOMEM;
658 }
659
660 venc.vdda_dac_reg = dss_get_vdda_dac();
661 if (IS_ERR(venc.vdda_dac_reg)) {
662 iounmap(venc.base);
663 DSSERR("can't get VDDA_DAC regulator\n");
664 return PTR_ERR(venc.vdda_dac_reg);
665 }
666
667 venc_enable_clocks(1);
668
669 rev_id = (u8)(venc_read_reg(VENC_REV_ID) & 0xff);
670 printk(KERN_INFO "OMAP VENC rev %d\n", rev_id);
671
672 venc_enable_clocks(0);
673
674 return omap_dss_register_driver(&venc_driver);
675}
676
677void venc_exit(void)
678{
679 omap_dss_unregister_driver(&venc_driver);
680
681 iounmap(venc.base);
682}
683
684int venc_init_display(struct omap_dss_device *dssdev) 656int venc_init_display(struct omap_dss_device *dssdev)
685{ 657{
686 DSSDBG("init_display\n"); 658 DSSDBG("init_display\n");
@@ -740,3 +712,67 @@ void venc_dump_regs(struct seq_file *s)
740 712
741#undef DUMPREG 713#undef DUMPREG
742} 714}
715
716/* VENC HW IP initialisation */
717static int omap_venchw_probe(struct platform_device *pdev)
718{
719 u8 rev_id;
720 venc.pdev = pdev;
721
722 mutex_init(&venc.venc_lock);
723
724 venc.wss_data = 0;
725
726 venc.base = ioremap(VENC_BASE, SZ_1K);
727 if (!venc.base) {
728 DSSERR("can't ioremap VENC\n");
729 return -ENOMEM;
730 }
731
732 venc.vdda_dac_reg = venc_get_vdda_dac();
733 if (IS_ERR(venc.vdda_dac_reg)) {
734 iounmap(venc.base);
735 DSSERR("can't get VDDA_DAC regulator\n");
736 return PTR_ERR(venc.vdda_dac_reg);
737 }
738
739 venc_enable_clocks(1);
740
741 rev_id = (u8)(venc_read_reg(VENC_REV_ID) & 0xff);
742 printk(KERN_INFO "OMAP VENC rev %d\n", rev_id);
743
744 venc_enable_clocks(0);
745
746 return omap_dss_register_driver(&venc_driver);
747}
748
749static int omap_venchw_remove(struct platform_device *pdev)
750{
751 if (venc.vdda_dac_reg != NULL) {
752 regulator_put(venc.vdda_dac_reg);
753 venc.vdda_dac_reg = NULL;
754 }
755 omap_dss_unregister_driver(&venc_driver);
756
757 iounmap(venc.base);
758 return 0;
759}
760
761static struct platform_driver omap_venchw_driver = {
762 .probe = omap_venchw_probe,
763 .remove = omap_venchw_remove,
764 .driver = {
765 .name = "omapdss_venc",
766 .owner = THIS_MODULE,
767 },
768};
769
770int venc_init_platform_driver(void)
771{
772 return platform_driver_register(&omap_venchw_driver);
773}
774
775void venc_uninit_platform_driver(void)
776{
777 return platform_driver_unregister(&omap_venchw_driver);
778}