diff options
Diffstat (limited to 'target/linux/s3c24xx/patches/0004-resume-timers-wq.patch.patch')
-rwxr-xr-x | target/linux/s3c24xx/patches/0004-resume-timers-wq.patch.patch | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/target/linux/s3c24xx/patches/0004-resume-timers-wq.patch.patch b/target/linux/s3c24xx/patches/0004-resume-timers-wq.patch.patch new file mode 100755 index 0000000000..a67a5fea4f --- /dev/null +++ b/target/linux/s3c24xx/patches/0004-resume-timers-wq.patch.patch @@ -0,0 +1,45 @@ +From 62bc0d984e5c2778e09094ba2e4d885903c6c35b Mon Sep 17 00:00:00 2001 +From: mokopatches <mokopatches@openmoko.org> +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 + |