aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/arm/plat-omap/include/plat/display.h3
-rw-r--r--drivers/video/omap2/dss/core.c35
-rw-r--r--drivers/video/omap2/dss/display.c32
3 files changed, 5 insertions, 65 deletions
diff --git a/arch/arm/plat-omap/include/plat/display.h b/arch/arm/plat-omap/include/plat/display.h
index 8c3688b45f3d..0022f6c878c1 100644
--- a/arch/arm/plat-omap/include/plat/display.h
+++ b/arch/arm/plat-omap/include/plat/display.h
@@ -431,14 +431,11 @@ struct omap_dss_device {
431 enum omap_panel_config config; 431 enum omap_panel_config config;
432 432
433 u8 recommended_bpp; 433 u8 recommended_bpp;
434
435 struct omap_dss_device *ctrl;
436 } panel; 434 } panel;
437 435
438 struct { 436 struct {
439 u8 pixel_size; 437 u8 pixel_size;
440 struct rfbi_timings rfbi_timings; 438 struct rfbi_timings rfbi_timings;
441 struct omap_dss_device *panel;
442 } ctrl; 439 } ctrl;
443 440
444 int reset_gpio; 441 int reset_gpio;
diff --git a/drivers/video/omap2/dss/core.c b/drivers/video/omap2/dss/core.c
index 72547dfc56b8..967cbda1fd72 100644
--- a/drivers/video/omap2/dss/core.c
+++ b/drivers/video/omap2/dss/core.c
@@ -771,11 +771,8 @@ static int dss_driver_probe(struct device *dev)
771 771
772 dss_init_device(core.pdev, dssdev); 772 dss_init_device(core.pdev, dssdev);
773 773
774 /* skip this if the device is behind a ctrl */ 774 force = pdata->default_device == dssdev;
775 if (!dssdev->panel.ctrl) { 775 dss_recheck_connections(dssdev, force);
776 force = pdata->default_device == dssdev;
777 dss_recheck_connections(dssdev, force);
778 }
779 776
780 r = dssdrv->probe(dssdev); 777 r = dssdrv->probe(dssdev);
781 778
@@ -861,8 +858,6 @@ static void omap_dss_dev_release(struct device *dev)
861int omap_dss_register_device(struct omap_dss_device *dssdev) 858int omap_dss_register_device(struct omap_dss_device *dssdev)
862{ 859{
863 static int dev_num; 860 static int dev_num;
864 static int panel_num;
865 int r;
866 861
867 WARN_ON(!dssdev->driver_name); 862 WARN_ON(!dssdev->driver_name);
868 863
@@ -871,36 +866,12 @@ int omap_dss_register_device(struct omap_dss_device *dssdev)
871 dssdev->dev.parent = &dss_bus; 866 dssdev->dev.parent = &dss_bus;
872 dssdev->dev.release = omap_dss_dev_release; 867 dssdev->dev.release = omap_dss_dev_release;
873 dev_set_name(&dssdev->dev, "display%d", dev_num++); 868 dev_set_name(&dssdev->dev, "display%d", dev_num++);
874 r = device_register(&dssdev->dev); 869 return device_register(&dssdev->dev);
875 if (r)
876 return r;
877
878 if (dssdev->ctrl.panel) {
879 struct omap_dss_device *panel = dssdev->ctrl.panel;
880
881 panel->panel.ctrl = dssdev;
882
883 reset_device(&panel->dev, 1);
884 panel->dev.bus = &dss_bus_type;
885 panel->dev.parent = &dssdev->dev;
886 panel->dev.release = omap_dss_dev_release;
887 dev_set_name(&panel->dev, "panel%d", panel_num++);
888 r = device_register(&panel->dev);
889 if (r)
890 return r;
891 }
892
893 return 0;
894} 870}
895 871
896void omap_dss_unregister_device(struct omap_dss_device *dssdev) 872void omap_dss_unregister_device(struct omap_dss_device *dssdev)
897{ 873{
898 device_unregister(&dssdev->dev); 874 device_unregister(&dssdev->dev);
899
900 if (dssdev->ctrl.panel) {
901 struct omap_dss_device *panel = dssdev->ctrl.panel;
902 device_unregister(&panel->dev);
903 }
904} 875}
905 876
906/* BUS */ 877/* BUS */
diff --git a/drivers/video/omap2/dss/display.c b/drivers/video/omap2/dss/display.c
index 3b92b84b9560..3f345b8cbcb0 100644
--- a/drivers/video/omap2/dss/display.c
+++ b/drivers/video/omap2/dss/display.c
@@ -591,10 +591,6 @@ struct omap_dss_device *omap_dss_get_next_device(struct omap_dss_device *from)
591 591
592 int match(struct device *dev, void *data) 592 int match(struct device *dev, void *data)
593 { 593 {
594 /* skip panels connected to controllers */
595 if (to_dss_device(dev)->panel.ctrl)
596 return 0;
597
598 return 1; 594 return 1;
599 } 595 }
600 596
@@ -626,45 +622,21 @@ EXPORT_SYMBOL(omap_dss_find_device);
626 622
627int omap_dss_start_device(struct omap_dss_device *dssdev) 623int omap_dss_start_device(struct omap_dss_device *dssdev)
628{ 624{
629 int r;
630
631 if (!dssdev->driver) { 625 if (!dssdev->driver) {
632 DSSDBG("no driver\n"); 626 DSSDBG("no driver\n");
633 r = -ENODEV; 627 return -ENODEV;
634 goto err0;
635 }
636
637 if (dssdev->ctrl.panel && !dssdev->ctrl.panel->driver) {
638 DSSDBG("no panel driver\n");
639 r = -ENODEV;
640 goto err0;
641 } 628 }
642 629
643 if (!try_module_get(dssdev->dev.driver->owner)) { 630 if (!try_module_get(dssdev->dev.driver->owner)) {
644 r = -ENODEV; 631 return -ENODEV;
645 goto err0;
646 }
647
648 if (dssdev->ctrl.panel) {
649 if (!try_module_get(dssdev->ctrl.panel->dev.driver->owner)) {
650 r = -ENODEV;
651 goto err1;
652 }
653 } 632 }
654 633
655 return 0; 634 return 0;
656err1:
657 module_put(dssdev->dev.driver->owner);
658err0:
659 return r;
660} 635}
661EXPORT_SYMBOL(omap_dss_start_device); 636EXPORT_SYMBOL(omap_dss_start_device);
662 637
663void omap_dss_stop_device(struct omap_dss_device *dssdev) 638void omap_dss_stop_device(struct omap_dss_device *dssdev)
664{ 639{
665 if (dssdev->ctrl.panel)
666 module_put(dssdev->ctrl.panel->dev.driver->owner);
667
668 module_put(dssdev->dev.driver->owner); 640 module_put(dssdev->dev.driver->owner);
669} 641}
670EXPORT_SYMBOL(omap_dss_stop_device); 642EXPORT_SYMBOL(omap_dss_stop_device);