mirror of
git://projects.qi-hardware.com/openwrt-xburst.git
synced 2024-11-19 20:10:39 +02:00
53 lines
1.8 KiB
Diff
53 lines
1.8 KiB
Diff
|
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
|
||
|
|