Index: linux-2.6/drivers/hwmon/s3c24xx-adc.c
===================================================================
--- linux-2.6.orig/drivers/hwmon/s3c24xx-adc.c	2006-01-11 23:36:51.000000000 +0100
+++ linux-2.6/drivers/hwmon/s3c24xx-adc.c	2006-01-14 00:04:20.000000000 +0100
@@ -151,23 +151,31 @@
 				   struct pt_regs *regs)
 {
 	struct s3c24xx_adc *adc = dev_id;
-	unsigned long con;
+	unsigned long con,tsc;
 
-	adc->val  = adcts_readl(S3C2410_ADCDAT0);
-	adc->val &= S3C2410_ADCDAT0_XPDATA_MASK;
+	tsc = adcts_readl(S3C2410_ADCTSC);
 
-	dev_dbg(adc->dev, "read %08x from adc (con %08x)\n",
-		adc->val, adcts_readl(S3C2410_ADCCON));
+	/* xy_pst and auto_pst to 0 means adc conversion */
+	/* otherwise, it's for the touchscreen driver    */
+	if (!(tsc&7)) {
+		adc->val  = adcts_readl(S3C2410_ADCDAT0);
+		adc->val &= S3C2410_ADCDAT0_XPDATA_MASK;
 
-	/* place the adc back into standby mode */
+		dev_dbg(adc->dev, "read %08x from adc (con %08x)\n",
+			adc->val, adcts_readl(S3C2410_ADCCON));
 
-	con  = adcts_readl(S3C2410_ADCCON);
-	con |= S3C2410_ADCCON_STDBM;
-	con &= ~S3C2410_ADCCON_PRSCEN;
-	adcts_writel(con, S3C2410_ADCCON);
+		/* place the adc back into standby mode */
+
+		con  = adcts_readl(S3C2410_ADCCON);
+		con |= S3C2410_ADCCON_STDBM;
+		con &= ~S3C2410_ADCCON_PRSCEN;
+		adcts_writel(con, S3C2410_ADCCON);
 
-	wake_up(&adc->wait);
-	return IRQ_HANDLED;
+		wake_up(&adc->wait);
+		return IRQ_HANDLED;
+	}
+	else 
+		return IRQ_NONE;
 }
 
 
Index: linux-2.6/drivers/input/touchscreen/s3c2410_ts.c
===================================================================
--- linux-2.6.orig/drivers/input/touchscreen/s3c2410_ts.c	2006-01-04 02:19:22.000000000 +0100
+++ linux-2.6/drivers/input/touchscreen/s3c2410_ts.c	2006-01-14 00:03:44.000000000 +0100
@@ -176,25 +176,32 @@
 
 static irqreturn_t stylus_action(int irq, void *dev_id, struct pt_regs *regs)
 {
+	unsigned long tsc;
 	unsigned long data0;
 	unsigned long data1;
 
-	data0 = adcts_readl(S3C2410_ADCDAT0);
-	data1 = adcts_readl(S3C2410_ADCDAT1);
+	tsc = adcts_readl(S3C2410_ADCTSC);
+	
+	if (tsc&0x07) {
+		data0 = adcts_readl(S3C2410_ADCDAT0);
+		data1 = adcts_readl(S3C2410_ADCDAT1);
+
+		ts.xp += data0 & S3C2410_ADCDAT0_XPDATA_MASK;
+		ts.yp += data1 & S3C2410_ADCDAT1_YPDATA_MASK;
+		ts.count++;
+
+	        if (ts.count < (1<<ts.shift)) {
+			adcts_writel(S3C2410_ADCTSC_PULL_UP_DISABLE | AUTOPST, S3C2410_ADCTSC);
+			adcts_writel(adcts_readl(S3C2410_ADCCON) | S3C2410_ADCCON_ENABLE_START, S3C2410_ADCCON);
+		} else {
+			mod_timer(&touch_timer, jiffies+1);
+			adcts_writel(WAIT4INT(1), S3C2410_ADCTSC);
+		}
 
-	ts.xp += data0 & S3C2410_ADCDAT0_XPDATA_MASK;
-	ts.yp += data1 & S3C2410_ADCDAT1_YPDATA_MASK;
-	ts.count++;
-
-        if (ts.count < (1<<ts.shift)) {
-		adcts_writel(S3C2410_ADCTSC_PULL_UP_DISABLE | AUTOPST, S3C2410_ADCTSC);
-		adcts_writel(adcts_readl(S3C2410_ADCCON) | S3C2410_ADCCON_ENABLE_START, S3C2410_ADCCON);
-	} else {
-		mod_timer(&touch_timer, jiffies+1);
-		adcts_writel(WAIT4INT(1), S3C2410_ADCTSC);
+		return IRQ_HANDLED;
 	}
-
-	return IRQ_HANDLED;
+	else
+		return IRQ_NONE;
 }
 
 static struct clk	*adc_clock;

