diff options
-rw-r--r-- | arch/arm/plat-omap/dmtimer.c | 31 | ||||
-rw-r--r-- | arch/arm/plat-omap/include/plat/dmtimer.h | 3 |
2 files changed, 33 insertions, 1 deletions
diff --git a/arch/arm/plat-omap/dmtimer.c b/arch/arm/plat-omap/dmtimer.c index a38e8964c820..b4e6634380e5 100644 --- a/arch/arm/plat-omap/dmtimer.c +++ b/arch/arm/plat-omap/dmtimer.c | |||
@@ -661,6 +661,37 @@ int omap_dm_timer_set_int_enable(struct omap_dm_timer *timer, | |||
661 | } | 661 | } |
662 | EXPORT_SYMBOL_GPL(omap_dm_timer_set_int_enable); | 662 | EXPORT_SYMBOL_GPL(omap_dm_timer_set_int_enable); |
663 | 663 | ||
664 | /** | ||
665 | * omap_dm_timer_set_int_disable - disable timer interrupts | ||
666 | * @timer: pointer to timer handle | ||
667 | * @mask: bit mask of interrupts to be disabled | ||
668 | * | ||
669 | * Disables the specified timer interrupts for a timer. | ||
670 | */ | ||
671 | int omap_dm_timer_set_int_disable(struct omap_dm_timer *timer, u32 mask) | ||
672 | { | ||
673 | u32 l = mask; | ||
674 | |||
675 | if (unlikely(!timer)) | ||
676 | return -EINVAL; | ||
677 | |||
678 | omap_dm_timer_enable(timer); | ||
679 | |||
680 | if (timer->revision == 1) | ||
681 | l = __raw_readl(timer->irq_ena) & ~mask; | ||
682 | |||
683 | __raw_writel(l, timer->irq_dis); | ||
684 | l = omap_dm_timer_read_reg(timer, OMAP_TIMER_WAKEUP_EN_REG) & ~mask; | ||
685 | omap_dm_timer_write_reg(timer, OMAP_TIMER_WAKEUP_EN_REG, l); | ||
686 | |||
687 | /* Save the context */ | ||
688 | timer->context.tier &= ~mask; | ||
689 | timer->context.twer &= ~mask; | ||
690 | omap_dm_timer_disable(timer); | ||
691 | return 0; | ||
692 | } | ||
693 | EXPORT_SYMBOL_GPL(omap_dm_timer_set_int_disable); | ||
694 | |||
664 | unsigned int omap_dm_timer_read_status(struct omap_dm_timer *timer) | 695 | unsigned int omap_dm_timer_read_status(struct omap_dm_timer *timer) |
665 | { | 696 | { |
666 | unsigned int l; | 697 | unsigned int l; |
diff --git a/arch/arm/plat-omap/include/plat/dmtimer.h b/arch/arm/plat-omap/include/plat/dmtimer.h index 0c07e3753470..769efb6f30d5 100644 --- a/arch/arm/plat-omap/include/plat/dmtimer.h +++ b/arch/arm/plat-omap/include/plat/dmtimer.h | |||
@@ -135,6 +135,7 @@ int omap_dm_timer_set_pwm(struct omap_dm_timer *timer, int def_on, int toggle, i | |||
135 | int omap_dm_timer_set_prescaler(struct omap_dm_timer *timer, int prescaler); | 135 | int omap_dm_timer_set_prescaler(struct omap_dm_timer *timer, int prescaler); |
136 | 136 | ||
137 | int omap_dm_timer_set_int_enable(struct omap_dm_timer *timer, unsigned int value); | 137 | int omap_dm_timer_set_int_enable(struct omap_dm_timer *timer, unsigned int value); |
138 | int omap_dm_timer_set_int_disable(struct omap_dm_timer *timer, u32 mask); | ||
138 | 139 | ||
139 | unsigned int omap_dm_timer_read_status(struct omap_dm_timer *timer); | 140 | unsigned int omap_dm_timer_read_status(struct omap_dm_timer *timer); |
140 | int omap_dm_timer_write_status(struct omap_dm_timer *timer, unsigned int value); | 141 | int omap_dm_timer_write_status(struct omap_dm_timer *timer, unsigned int value); |
@@ -321,7 +322,7 @@ static inline void __omap_dm_timer_init_regs(struct omap_dm_timer *timer) | |||
321 | OMAP_TIMER_V1_SYS_STAT_OFFSET; | 322 | OMAP_TIMER_V1_SYS_STAT_OFFSET; |
322 | timer->irq_stat = timer->io_base + OMAP_TIMER_V1_STAT_OFFSET; | 323 | timer->irq_stat = timer->io_base + OMAP_TIMER_V1_STAT_OFFSET; |
323 | timer->irq_ena = timer->io_base + OMAP_TIMER_V1_INT_EN_OFFSET; | 324 | timer->irq_ena = timer->io_base + OMAP_TIMER_V1_INT_EN_OFFSET; |
324 | timer->irq_dis = NULL; | 325 | timer->irq_dis = timer->io_base + OMAP_TIMER_V1_INT_EN_OFFSET; |
325 | timer->pend = timer->io_base + _OMAP_TIMER_WRITE_PEND_OFFSET; | 326 | timer->pend = timer->io_base + _OMAP_TIMER_WRITE_PEND_OFFSET; |
326 | timer->func_base = timer->io_base; | 327 | timer->func_base = timer->io_base; |
327 | } else { | 328 | } else { |