aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/video/omap2/dss/apply.c29
1 files changed, 29 insertions, 0 deletions
diff --git a/drivers/video/omap2/dss/apply.c b/drivers/video/omap2/dss/apply.c
index d9424bee0457..eafa80846365 100644
--- a/drivers/video/omap2/dss/apply.c
+++ b/drivers/video/omap2/dss/apply.c
@@ -405,6 +405,9 @@ void dss_mgr_start_update(struct omap_overlay_manager *mgr)
405 struct mgr_priv_data *mp = get_mgr_priv(mgr); 405 struct mgr_priv_data *mp = get_mgr_priv(mgr);
406 struct ovl_priv_data *op; 406 struct ovl_priv_data *op;
407 struct omap_overlay *ovl; 407 struct omap_overlay *ovl;
408 unsigned long flags;
409
410 spin_lock_irqsave(&data_lock, flags);
408 411
409 mp->do_manual_update = true; 412 mp->do_manual_update = true;
410 dss_write_regs(); 413 dss_write_regs();
@@ -418,6 +421,8 @@ void dss_mgr_start_update(struct omap_overlay_manager *mgr)
418 mp->shadow_dirty = false; 421 mp->shadow_dirty = false;
419 422
420 dispc_mgr_enable(mgr->id, true); 423 dispc_mgr_enable(mgr->id, true);
424
425 spin_unlock_irqrestore(&data_lock, flags);
421} 426}
422 427
423static void dss_apply_irq_handler(void *data, u32 mask); 428static void dss_apply_irq_handler(void *data, u32 mask);
@@ -662,16 +667,28 @@ void dss_mgr_disable(struct omap_overlay_manager *mgr)
662int dss_mgr_set_info(struct omap_overlay_manager *mgr, 667int dss_mgr_set_info(struct omap_overlay_manager *mgr,
663 struct omap_overlay_manager_info *info) 668 struct omap_overlay_manager_info *info)
664{ 669{
670 unsigned long flags;
671
672 spin_lock_irqsave(&data_lock, flags);
673
665 mgr->info = *info; 674 mgr->info = *info;
666 mgr->info_dirty = true; 675 mgr->info_dirty = true;
667 676
677 spin_unlock_irqrestore(&data_lock, flags);
678
668 return 0; 679 return 0;
669} 680}
670 681
671void dss_mgr_get_info(struct omap_overlay_manager *mgr, 682void dss_mgr_get_info(struct omap_overlay_manager *mgr,
672 struct omap_overlay_manager_info *info) 683 struct omap_overlay_manager_info *info)
673{ 684{
685 unsigned long flags;
686
687 spin_lock_irqsave(&data_lock, flags);
688
674 *info = mgr->info; 689 *info = mgr->info;
690
691 spin_unlock_irqrestore(&data_lock, flags);
675} 692}
676 693
677int dss_mgr_set_device(struct omap_overlay_manager *mgr, 694int dss_mgr_set_device(struct omap_overlay_manager *mgr,
@@ -745,16 +762,28 @@ err:
745int dss_ovl_set_info(struct omap_overlay *ovl, 762int dss_ovl_set_info(struct omap_overlay *ovl,
746 struct omap_overlay_info *info) 763 struct omap_overlay_info *info)
747{ 764{
765 unsigned long flags;
766
767 spin_lock_irqsave(&data_lock, flags);
768
748 ovl->info = *info; 769 ovl->info = *info;
749 ovl->info_dirty = true; 770 ovl->info_dirty = true;
750 771
772 spin_unlock_irqrestore(&data_lock, flags);
773
751 return 0; 774 return 0;
752} 775}
753 776
754void dss_ovl_get_info(struct omap_overlay *ovl, 777void dss_ovl_get_info(struct omap_overlay *ovl,
755 struct omap_overlay_info *info) 778 struct omap_overlay_info *info)
756{ 779{
780 unsigned long flags;
781
782 spin_lock_irqsave(&data_lock, flags);
783
757 *info = ovl->info; 784 *info = ovl->info;
785
786 spin_unlock_irqrestore(&data_lock, flags);
758} 787}
759 788
760int dss_ovl_set_manager(struct omap_overlay *ovl, 789int dss_ovl_set_manager(struct omap_overlay *ovl,