From 20489a5096778f6b6f9399e05f0ce342a8bddfeb Mon Sep 17 00:00:00 2001 From: =?utf8?q?=E9=BB=84=E6=B6=9B?= Date: Wed, 23 Mar 2011 15:13:08 +0800 Subject: [PATCH] rk29: timer: try to fix stop on "Calibrating delay loop" bug --- arch/arm/mach-rk29/timer.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/arch/arm/mach-rk29/timer.c b/arch/arm/mach-rk29/timer.c index 89f24857346b..c390129d268f 100644 --- a/arch/arm/mach-rk29/timer.c +++ b/arch/arm/mach-rk29/timer.c @@ -95,9 +95,12 @@ static void rk29_timer_set_mode(enum clock_event_mode mode, struct clock_event_d { switch (mode) { case CLOCK_EVT_MODE_PERIODIC: - RK_TIMER_DISABLE(TIMER_CLKEVT); - RK_TIMER_SETCOUNT(TIMER_CLKEVT, 24000000/HZ - 1); - RK_TIMER_ENABLE(TIMER_CLKEVT); + do { + RK_TIMER_DISABLE(TIMER_CLKEVT); + RK_TIMER_SETCOUNT(TIMER_CLKEVT, 24000000/HZ - 1); + RK_TIMER_ENABLE(TIMER_CLKEVT); + } while (RK_TIMER_READVALUE(TIMER_CLKEVT) > (24000000/HZ - 1)); + break; case CLOCK_EVT_MODE_RESUME: case CLOCK_EVT_MODE_ONESHOT: break; -- 2.34.1