summaryrefslogtreecommitdiffstats
path: root/recipes
diff options
context:
space:
mode:
authorMartin Jansa <Martin.Jansa@gmail.com>2010-06-05 09:10:00 +0200
committerMartin Jansa <Martin.Jansa@gmail.com>2010-06-05 10:19:50 +0200
commit101d302e46ec667fdde1d933fd1c5400a97cb769 (patch)
treec586ce737b389d5107183702b56c870726d04866 /recipes
parent7e3937ebfdafb92fe499db61ccdf8dc5e48ae13d (diff)
downloadopenembedded-101d302e46ec667fdde1d933fd1c5400a97cb769.tar.gz
linux-openmoko-2.6.34: fix for lost touchscreen bug #2328
Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
Diffstat (limited to 'recipes')
-rw-r--r--recipes/linux/linux-openmoko-2.6.34/touchscreen_ignoreunexpectedintr34.patch93
-rw-r--r--recipes/linux/linux-openmoko-2.6.34_git.bb2
2 files changed, 95 insertions, 0 deletions
diff --git a/recipes/linux/linux-openmoko-2.6.34/touchscreen_ignoreunexpectedintr34.patch b/recipes/linux/linux-openmoko-2.6.34/touchscreen_ignoreunexpectedintr34.patch
new file mode 100644
index 0000000000..d68346a921
--- /dev/null
+++ b/recipes/linux/linux-openmoko-2.6.34/touchscreen_ignoreunexpectedintr34.patch
@@ -0,0 +1,93 @@
+diff --git a/drivers/input/touchscreen/s3c2410_ts.c b/drivers/input/touchscreen/s3c2410_ts.c
+index 98a7d12..8fba8a8 100644
+--- a/drivers/input/touchscreen/s3c2410_ts.c
++++ b/drivers/input/touchscreen/s3c2410_ts.c
+@@ -20,7 +20,7 @@
+ * Copyright 2009 Simtec Electronics <linux@simtec.co.uk>
+ *
+ * Additional work by Herbert Pƶtzl <herbert@13thfloor.at> and
+- * Harald Welte <laforge@openmoko.org>
++ * Harald Welte <laforge@openmoko.org> and Gennady Kupava <gb@bsdmn.com>
+ */
+
+ #include <linux/errno.h>
+@@ -83,10 +83,15 @@ struct s3c2410ts {
+ int irq_tc;
+ int count;
+ int shift;
++ int expectedintr; /* kind of interrupt we are waiting for */
+ };
+
+ static struct s3c2410ts ts;
+
++#define WAITFORINT_UP (0)
++#define WAITFORINT_DOWN (1)
++#define WAITFORINT_NOTHING (2)
++
+ /**
+ * s3c2410_ts_connect - configure gpio for s3c2410 systems
+ *
+@@ -154,7 +159,8 @@ static void touch_timer_fire(unsigned long data)
+
+ input_report_key(ts.input, BTN_TOUCH, 0);
+ input_sync(ts.input);
+-
++
++ ts.expectedintr = WAITFORINT_DOWN;
+ writel(WAIT4INT | INT_DOWN, ts.io + S3C2410_ADCTSC);
+ }
+ }
+@@ -179,9 +185,18 @@ static irqreturn_t stylus_irq(int irq, void *dev_id)
+
+ down = get_down(data0, data1);
+
+- /* TODO we should never get an interrupt with down set while
+- * the timer is running, but maybe we ought to verify that the
+- * timer isn't running anyways. */
++ /* sitautions below can actually happen on openmoko hardware while
++ various debugging facilities are turned off */
++ if (ts.expectedintr == WAITFORINT_NOTHING)
++ return IRQ_HANDLED;
++ if (!down && ts.expectedintr == WAITFORINT_DOWN) {
++ writel(WAIT4INT | INT_DOWN, ts.io + S3C2410_ADCTSC);
++ return IRQ_HANDLED;
++ } else if (down && ts.expectedintr == WAITFORINT_UP) {
++ writel(WAIT4INT | INT_UP, ts.io + S3C2410_ADCTSC);
++ return IRQ_HANDLED;
++ }
++ ts.expectedintr = WAITFORINT_NOTHING;
+
+ if (down)
+ s3c_adc_start(ts.client, 0, 1 << ts.shift);
+@@ -235,6 +250,7 @@ static void s3c24xx_ts_select(struct s3c_adc_client *client, unsigned select)
+ ts.io + S3C2410_ADCTSC);
+ } else {
+ mod_timer(&touch_timer, jiffies+1);
++ ts.expectedintr = WAITFORINT_UP;
+ writel(WAIT4INT | INT_UP, ts.io + S3C2410_ADCTSC);
+ }
+ }
+@@ -312,6 +328,7 @@ static int __devinit s3c2410ts_probe(struct platform_device *pdev)
+ if ((info->delay & 0xffff) > 0)
+ writel(info->delay & 0xffff, ts.io + S3C2410_ADCDLY);
+
++ ts.expectedintr = WAITFORINT_DOWN;
+ writel(WAIT4INT | INT_DOWN, ts.io + S3C2410_ADCTSC);
+
+ input_dev = input_allocate_device();
+@@ -389,6 +406,7 @@ static int __devexit s3c2410ts_remove(struct platform_device *pdev)
+ #ifdef CONFIG_PM
+ static int s3c2410ts_suspend(struct device *dev)
+ {
++ ts.expectedintr = WAITFORINT_NOTHING;
+ writel(TSC_SLEEP, ts.io + S3C2410_ADCTSC);
+ disable_irq(ts.irq_tc);
+ clk_disable(ts.clock);
+@@ -408,6 +426,7 @@ static int s3c2410ts_resume(struct device *dev)
+ if ((info->delay & 0xffff) > 0)
+ writel(info->delay & 0xffff, ts.io + S3C2410_ADCDLY);
+
++ ts.expectedintr = WAITFORINT_DOWN;
+ writel(WAIT4INT | INT_DOWN, ts.io + S3C2410_ADCTSC);
+
+ return 0;
diff --git a/recipes/linux/linux-openmoko-2.6.34_git.bb b/recipes/linux/linux-openmoko-2.6.34_git.bb
index 22fa3970a3..fd2ddb2ab5 100644
--- a/recipes/linux/linux-openmoko-2.6.34_git.bb
+++ b/recipes/linux/linux-openmoko-2.6.34_git.bb
@@ -11,6 +11,8 @@ SRC_URI = "\
git://git.openmoko.org/git/kernel.git;protocol=git;branch=om-gta02-2.6.34 \
# build fix
file://wm8753-fix-build-with-gcc-4.4.2-which-works-ok-with-.patch \
+# fix for lost touchscreen https://docs.openmoko.org/trac/ticket/2328
+ file://touchscreen_ignoreunexpectedintr34.patch \
# patches from Thomas White's gdrm-for-merging branch
file://0001-DRM-for-platform-devices.patch \
file://0002-Glamo-DRM-and-KMS-driver.patch \