From 62bc0d984e5c2778e09094ba2e4d885903c6c35b Mon Sep 17 00:00:00 2001 From: mokopatches Date: Wed, 16 Jul 2008 14:44:10 +0100 Subject: [PATCH] resume-timers-wq.patch The initialization of clocks uses mutexes, but we execute the resume in an interrupt context. We therefore have to hand this task to a non-interrupt. Adapted from a patch by Andy Green. --- arch/arm/plat-s3c24xx/time.c | 18 +++++++++++++++++- 1 files changed, 17 insertions(+), 1 deletions(-) diff --git a/arch/arm/plat-s3c24xx/time.c b/arch/arm/plat-s3c24xx/time.c index 766473b..f8d307b 100644 --- a/arch/arm/plat-s3c24xx/time.c +++ b/arch/arm/plat-s3c24xx/time.c @@ -253,8 +253,24 @@ static void __init s3c2410_timer_init (void) setup_irq(IRQ_TIMER4, &s3c2410_timer_irq); } +static void s3c2410_timer_resume_work(struct work_struct *work) +{ + s3c2410_timer_setup(); +} + +static void s3c2410_timer_resume(void) +{ + static DECLARE_WORK(work, s3c2410_timer_resume_work); + int res; + + res = schedule_work(&work); + if (!res) + printk(KERN_ERR + "s3c2410_timer_resume_work already queued ???\n"); +} + struct sys_timer s3c24xx_timer = { .init = s3c2410_timer_init, .offset = s3c2410_gettimeoffset, - .resume = s3c2410_timer_setup + .resume = s3c2410_timer_resume, }; -- 1.5.6.3