summaryrefslogtreecommitdiffstats
path: root/target/linux/s3c24xx/patches-2.6.26/1004-resume-timers-wq.patch.patch
diff options
context:
space:
mode:
authormirko <mirko@3c298f89-4303-0410-b956-a3cf2f4a3e73>2008-12-13 01:54:56 +0000
committermirko <mirko@3c298f89-4303-0410-b956-a3cf2f4a3e73>2008-12-13 01:54:56 +0000
commita95f9f92e2953d5829a29e95644dc4c4bc93f590 (patch)
tree01f2bf78edb2e3bb1466df9bca72e068632d0e74 /target/linux/s3c24xx/patches-2.6.26/1004-resume-timers-wq.patch.patch
parent9fa649271dbc9c83417488203aeb1668a0238c54 (diff)
change prefix for kernelpatchbase 2.6.26
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@13619 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'target/linux/s3c24xx/patches-2.6.26/1004-resume-timers-wq.patch.patch')
-rwxr-xr-xtarget/linux/s3c24xx/patches-2.6.26/1004-resume-timers-wq.patch.patch45
1 files changed, 45 insertions, 0 deletions
diff --git a/target/linux/s3c24xx/patches-2.6.26/1004-resume-timers-wq.patch.patch b/target/linux/s3c24xx/patches-2.6.26/1004-resume-timers-wq.patch.patch
new file mode 100755
index 000000000..a67a5fea4
--- /dev/null
+++ b/target/linux/s3c24xx/patches-2.6.26/1004-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
+