diff options
Diffstat (limited to 'target/linux/s3c24xx/patches-2.6.24/1007-resume-timers-wq.patch.patch')
-rw-r--r-- | target/linux/s3c24xx/patches-2.6.24/1007-resume-timers-wq.patch.patch | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/target/linux/s3c24xx/patches-2.6.24/1007-resume-timers-wq.patch.patch b/target/linux/s3c24xx/patches-2.6.24/1007-resume-timers-wq.patch.patch new file mode 100644 index 0000000000..e7ce35ed3e --- /dev/null +++ b/target/linux/s3c24xx/patches-2.6.24/1007-resume-timers-wq.patch.patch @@ -0,0 +1,45 @@ +From fa1e8c2fc849472cddb65bc3138944382b320589 Mon Sep 17 00:00:00 2001 +From: mokopatches <mokopatches@openmoko.org> +Date: Fri, 4 Apr 2008 11:30:15 +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 2ec1daa..c11d0dd 100644 +--- a/arch/arm/plat-s3c24xx/time.c ++++ b/arch/arm/plat-s3c24xx/time.c +@@ -255,8 +255,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.5 + |