diff options
-rw-r--r-- | drivers/video/omap2/dss/apply.c | 29 |
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 | ||
423 | static void dss_apply_irq_handler(void *data, u32 mask); | 428 | static void dss_apply_irq_handler(void *data, u32 mask); |
@@ -662,16 +667,28 @@ void dss_mgr_disable(struct omap_overlay_manager *mgr) | |||
662 | int dss_mgr_set_info(struct omap_overlay_manager *mgr, | 667 | int 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 | ||
671 | void dss_mgr_get_info(struct omap_overlay_manager *mgr, | 682 | void 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 | ||
677 | int dss_mgr_set_device(struct omap_overlay_manager *mgr, | 694 | int dss_mgr_set_device(struct omap_overlay_manager *mgr, |
@@ -745,16 +762,28 @@ err: | |||
745 | int dss_ovl_set_info(struct omap_overlay *ovl, | 762 | int 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 | ||
754 | void dss_ovl_get_info(struct omap_overlay *ovl, | 777 | void 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 | ||
760 | int dss_ovl_set_manager(struct omap_overlay *ovl, | 789 | int dss_ovl_set_manager(struct omap_overlay *ovl, |