aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/video/omap2/dss/manager.c
diff options
context:
space:
mode:
authorTomi Valkeinen <tomi.valkeinen@ti.com>2011-12-08 03:32:37 -0500
committerTomi Valkeinen <tomi.valkeinen@ti.com>2012-01-02 01:51:25 -0500
commit6ac48d1e3ac788ad1d54895acd83be26cefb4fe9 (patch)
tree511d3080a4c3964095da524af8404493285e80bf /drivers/video/omap2/dss/manager.c
parent5af661ce1a8c7672364c2c911b76186589db0f0e (diff)
OMAPDSS: APPLY: move check functions
The functions dss_ovl_check, dss_mgr_check_zorder, dss_mgr_check in apply.c are not really part of the apply mechanism, and can be moved to overlay.c and manager.c. Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Diffstat (limited to 'drivers/video/omap2/dss/manager.c')
-rw-r--r--drivers/video/omap2/dss/manager.c63
1 files changed, 63 insertions, 0 deletions
diff --git a/drivers/video/omap2/dss/manager.c b/drivers/video/omap2/dss/manager.c
index 8c967ef2ae9..542258dbdcc 100644
--- a/drivers/video/omap2/dss/manager.c
+++ b/drivers/video/omap2/dss/manager.c
@@ -592,3 +592,66 @@ struct omap_overlay_manager *omap_dss_get_overlay_manager(int num)
592} 592}
593EXPORT_SYMBOL(omap_dss_get_overlay_manager); 593EXPORT_SYMBOL(omap_dss_get_overlay_manager);
594 594
595static int dss_mgr_check_zorder(struct omap_overlay_manager *mgr,
596 struct omap_overlay_info **overlay_infos)
597{
598 struct omap_overlay *ovl1, *ovl2;
599 struct omap_overlay_info *info1, *info2;
600
601 list_for_each_entry(ovl1, &mgr->overlays, list) {
602 info1 = overlay_infos[ovl1->id];
603
604 if (info1 == NULL)
605 continue;
606
607 list_for_each_entry(ovl2, &mgr->overlays, list) {
608 if (ovl1 == ovl2)
609 continue;
610
611 info2 = overlay_infos[ovl2->id];
612
613 if (info2 == NULL)
614 continue;
615
616 if (info1->zorder == info2->zorder) {
617 DSSERR("overlays %d and %d have the same "
618 "zorder %d\n",
619 ovl1->id, ovl2->id, info1->zorder);
620 return -EINVAL;
621 }
622 }
623 }
624
625 return 0;
626}
627
628int dss_mgr_check(struct omap_overlay_manager *mgr,
629 struct omap_dss_device *dssdev,
630 struct omap_overlay_manager_info *info,
631 struct omap_overlay_info **overlay_infos)
632{
633 struct omap_overlay *ovl;
634 int r;
635
636 if (dss_has_feature(FEAT_ALPHA_FREE_ZORDER)) {
637 r = dss_mgr_check_zorder(mgr, overlay_infos);
638 if (r)
639 return r;
640 }
641
642 list_for_each_entry(ovl, &mgr->overlays, list) {
643 struct omap_overlay_info *oi;
644 int r;
645
646 oi = overlay_infos[ovl->id];
647
648 if (oi == NULL)
649 continue;
650
651 r = dss_ovl_check(ovl, oi, dssdev);
652 if (r)
653 return r;
654 }
655
656 return 0;
657}