Tero Kristo <[email protected]> writes:

> From: Tero Kristo <[email protected]>
>
> OMAP GP timers keep running for a few cycles after they are stopped,
> which can cause the timer to expire and generate an interrupt. The pending
> interrupt will prevent OMAP from entering suspend, thus we ack it manually.
>
> Signed-off-by: Tero Kristo <[email protected]>
>
> ---
>  arch/arm/mach-omap2/timer-gp.c |   14 +++++++++++++-
>  1 files changed, 13 insertions(+), 1 deletions(-)
>
> diff --git a/arch/arm/mach-omap2/timer-gp.c b/arch/arm/mach-omap2/timer-gp.c
> index 9c056ff..c9d47bb 100644
> --- a/arch/arm/mach-omap2/timer-gp.c
> +++ b/arch/arm/mach-omap2/timer-gp.c
> @@ -92,9 +92,21 @@ static void omap2_gp_timer_set_mode(enum clock_event_mode 
> mode,
>       case CLOCK_EVT_MODE_ONESHOT:
>               break;
>       case CLOCK_EVT_MODE_UNUSED:
> -     case CLOCK_EVT_MODE_SHUTDOWN:
>       case CLOCK_EVT_MODE_RESUME:
>               break;
> +     case CLOCK_EVT_MODE_SHUTDOWN:
> +             /*
> +              * Wait for min period x 2 to make sure that timer is
> +              * stopped
> +              */
> +             udelay(evt->min_delta_ns / 500);
> +             /*
> +              * Clear possibly pending interrupt, this will occasionally
> +              * generate spurious timer IRQs during suspend but this
> +              * is okay, as another option is not to enter suspend at all
> +              */
> +             omap_dm_timer_write_status(gptimer, OMAP_TIMER_INT_OVERFLOW);
> +             break;

Seems to me that this fix should just be done in omap_dm_timer_stop()
since it could also result in extra interrupts in when using oneshot
mode under dyntick.

Kevin

--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to