summaryrefslogtreecommitdiff
path: root/target/linux/s3c24xx/patches-2.6.26/0189-fix-touchscreen-meddling-divde.patch.patch
blob: 4ff79105ef2699abfc0b6f0d4e791560d5ff606b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
From 9bdb2dbc9725d7f2ba23566303d5abe0504beb83 Mon Sep 17 00:00:00 2001
From: Andy Green <andy@openmoko.com>
Date: Fri, 25 Jul 2008 23:06:16 +0100
Subject: [PATCH] fix-touchscreen-meddling-divde.patch
 Reported-by: Holger Freyther <zecke@openmoko.org>

length can be zero... blowing a divide by zero exception...
which somehow I don't get (?)  Anyway the code is wrong and
this should fix it.

Signed-off-by: Andy Green <andy@openmoko.com>
---
 drivers/input/touchscreen/s3c2410_ts.c |   12 +++++++++---
 1 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/drivers/input/touchscreen/s3c2410_ts.c b/drivers/input/touchscreen/s3c2410_ts.c
index b1ba73d..5bc347f 100644
--- a/drivers/input/touchscreen/s3c2410_ts.c
+++ b/drivers/input/touchscreen/s3c2410_ts.c
@@ -226,12 +226,18 @@ static irqreturn_t stylus_action(int irq, void *dev_id)
 	unsigned long x;
 	unsigned long y;
 	int length = (ts.head_raw_fifo - ts.tail_raw_fifo) & (ts.extent - 1);
-	int scaled_avg_x = ts.raw_running_avg.x / length;
-	int scaled_avg_y = ts.raw_running_avg.y / length;
+	int scaled_avg_x;
+	int scaled_avg_y;
 
 	x = readl(base_addr + S3C2410_ADCDAT0) & S3C2410_ADCDAT0_XPDATA_MASK;
 	y = readl(base_addr + S3C2410_ADCDAT1) & S3C2410_ADCDAT1_YPDATA_MASK;
 
+	if (!length)
+		goto store_sample;
+
+	scaled_avg_x = ts.raw_running_avg.x / length;
+	scaled_avg_y = ts.raw_running_avg.y / length;
+
 	/* we appear to accept every sample into both the running average FIFO
 	 * and the summing average.  BUT, if the last sample crossed a
 	 * machine-set threshold, each time we do a beauty contest
@@ -280,7 +286,7 @@ static irqreturn_t stylus_action(int irq, void *dev_id)
 	else
 		ts.flag_previous_exceeded_threshold = 1;
 
-	/* accepted */
+store_sample:
 	ts.xp += x;
 	ts.yp += y;
 	ts.count++;
-- 
1.5.6.3