Index: linux-2.6/drivers/input/touchscreen/s3c2410_ts.c
===================================================================
--- linux-2.6.orig/drivers/input/touchscreen/s3c2410_ts.c	2006-03-25 16:10:31.000000000 +0100
+++ linux-2.6/drivers/input/touchscreen/s3c2410_ts.c	2006-05-09 21:41:09.000000000 +0200
@@ -52,6 +52,7 @@
 
 #include <asm/arch/regs-adc.h>
 #include <asm/arch/regs-gpio.h>
+#include <asm/arch/adcts_bus.h>
 #include <asm/arch/ts.h>
 
 /* For ts.dev.id.version */
@@ -90,7 +91,6 @@ struct s3c2410ts {
 };
 
 static struct s3c2410ts ts;
-static void __iomem *base_addr;
 
 static inline void s3c2410_ts_connect(void)
 {
@@ -106,8 +106,8 @@ static void touch_timer_fire(unsigned lo
   	unsigned long data1;
 	int updown;
 
-  	data0 = readl(base_addr+S3C2410_ADCDAT0);
-  	data1 = readl(base_addr+S3C2410_ADCDAT1);
+  	data0 = adcts_readl(S3C2410_ADCDAT0);
+  	data1 = adcts_readl(S3C2410_ADCDAT1);
 
  	updown = (!(data0 & S3C2410_ADCDAT0_UPDOWN)) && (!(data1 & S3C2410_ADCDAT0_UPDOWN));
 
@@ -136,8 +136,8 @@ static void touch_timer_fire(unsigned lo
  		ts.yp = 0;
  		ts.count = 0;
 
- 		writel(S3C2410_ADCTSC_PULL_UP_DISABLE | AUTOPST, base_addr+S3C2410_ADCTSC);
- 		writel(readl(base_addr+S3C2410_ADCCON) | S3C2410_ADCCON_ENABLE_START, base_addr+S3C2410_ADCCON);
+ 		adcts_writel(S3C2410_ADCTSC_PULL_UP_DISABLE | AUTOPST, S3C2410_ADCTSC);
+ 		adcts_writel(adcts_readl(S3C2410_ADCCON) | S3C2410_ADCCON_ENABLE_START, S3C2410_ADCCON);
  	} else {
  		ts.count = 0;
 
@@ -145,7 +145,7 @@ static void touch_timer_fire(unsigned lo
  		input_report_abs(ts.dev, ABS_PRESSURE, 0);
  		input_sync(ts.dev);
 
- 		writel(WAIT4INT(0), base_addr+S3C2410_ADCTSC);
+ 		adcts_writel(WAIT4INT(0), S3C2410_ADCTSC);
  	}
 }
 
@@ -156,10 +156,18 @@ static irqreturn_t stylus_updown(int irq
 {
 	unsigned long data0;
 	unsigned long data1;
+	unsigned long adccon;
 	int updown;
 
-	data0 = readl(base_addr+S3C2410_ADCDAT0);
-	data1 = readl(base_addr+S3C2410_ADCDAT1);
+	/* Ensure that we're not already running a conversion
+	 * eg in the ADC driver
+	 **/
+	adccon = adcts_readl(S3C2410_ADCCON);
+	if (!(adccon & S3C2410_ADCCON_ECFLG))
+		return IRQ_HANDLED;
+
+	data0 = adcts_readl(S3C2410_ADCDAT0);
+	data1 = adcts_readl(S3C2410_ADCDAT1);
 
 	updown = (!(data0 & S3C2410_ADCDAT0_UPDOWN)) && (!(data1 & S3C2410_ADCDAT0_UPDOWN));
 
@@ -179,19 +187,19 @@ static irqreturn_t stylus_action(int irq
 	unsigned long data0;
 	unsigned long data1;
 
-	data0 = readl(base_addr+S3C2410_ADCDAT0);
-	data1 = readl(base_addr+S3C2410_ADCDAT1);
+	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)) {
-		writel(S3C2410_ADCTSC_PULL_UP_DISABLE | AUTOPST, base_addr+S3C2410_ADCTSC);
-		writel(readl(base_addr+S3C2410_ADCCON) | S3C2410_ADCCON_ENABLE_START, base_addr+S3C2410_ADCCON);
+		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);
-		writel(WAIT4INT(1), base_addr+S3C2410_ADCTSC);
+		adcts_writel(WAIT4INT(1), S3C2410_ADCTSC);
 	}
 
 	return IRQ_HANDLED;
@@ -203,7 +211,7 @@ static struct clk	*adc_clock;
  * The functions for inserting/removing us as a module.
  */
 
-static int __init s3c2410ts_probe(struct platform_device *pdev)
+static int __init s3c2410ts_probe(struct adcts_device *pdev)
 {
 	struct s3c2410_ts_mach_info *info;
 	struct input_dev *input_dev;
@@ -231,28 +239,11 @@ static int __init s3c2410ts_probe(struct
 	printk(DEBUG_LVL "got and enabled clock\n");
 #endif
 
-	base_addr=ioremap(S3C2410_PA_ADC,0x20);
-	if (base_addr == NULL) {
-		printk(KERN_ERR "Failed to remap register block\n");
-		return -ENOMEM;
-	}
-
-
 	/* Configure GPIOs */
 	s3c2410_ts_connect();
 
-	if ((info->presc&0xff) > 0)
-		writel(S3C2410_ADCCON_PRSCEN | S3C2410_ADCCON_PRSCVL(info->presc&0xFF),\
-			     base_addr+S3C2410_ADCCON);
-	else
-		writel(0,base_addr+S3C2410_ADCCON);
-
-
 	/* Initialise registers */
-	if ((info->delay&0xffff) > 0)
-		writel(info->delay & 0xffff,  base_addr+S3C2410_ADCDLY);
-
-	writel(WAIT4INT(0), base_addr+S3C2410_ADCTSC);
+	adcts_writel(WAIT4INT(0), S3C2410_ADCTSC);
 
 	/* Initialise input stuff */
 	memset(&ts, 0, sizeof(struct s3c2410ts));
@@ -280,16 +271,14 @@ static int __init s3c2410ts_probe(struct
 	ts.shift = info->oversampling_shift;
 
 	/* Get irqs */
-	if (request_irq(IRQ_ADC, stylus_action, IRQF_SAMPLE_RANDOM,
+	if (request_irq(IRQ_ADC, stylus_action, IRQF_SHARED | IRQF_SAMPLE_RANDOM,
 		"s3c2410_action", ts.dev)) {
 		printk(KERN_ERR "s3c2410_ts.c: Could not allocate ts IRQ_ADC !\n");
-		iounmap(base_addr);
 		return -EIO;
 	}
-	if (request_irq(IRQ_TC, stylus_updown, IRQF_SAMPLE_RANDOM,
+	if (request_irq(IRQ_TC, stylus_updown, IRQF_SHARED | IRQF_SAMPLE_RANDOM,
 			"s3c2410_action", ts.dev)) {
 		printk(KERN_ERR "s3c2410_ts.c: Could not allocate ts IRQ_TC !\n");
-		iounmap(base_addr);
 		return -EIO;
 	}
 
@@ -301,7 +290,7 @@ static int __init s3c2410ts_probe(struct
 	return 0;
 }
 
-static int s3c2410ts_remove(struct platform_device *pdev)
+static int s3c2410ts_remove(struct adcts_device *pdev)
 {
 	disable_irq(IRQ_ADC);
 	disable_irq(IRQ_TC);
@@ -315,37 +304,28 @@ static int s3c2410ts_remove(struct platf
 	}
 
 	input_unregister_device(ts.dev);
-	iounmap(base_addr);
-
 	return 0;
 }
 
-static struct platform_driver s3c2410ts_driver = {
+static struct adcts_driver s3c2410ts_driver = {
        .driver         = {
 	       .name   = "s3c2410-ts",
 	       .owner  = THIS_MODULE,
        },
-       .probe          = s3c2410ts_probe,
-       .remove         = s3c2410ts_remove,
+       .bind           = s3c2410ts_probe,
+       .unbind         = s3c2410ts_remove,
 };
 
 
 static int __init s3c2410ts_init(void)
 {
-	return platform_driver_register(&s3c2410ts_driver);
+	return adcts_bus_register_driver (&s3c2410ts_driver);
 }
 
 static void __exit s3c2410ts_exit(void)
 {
-	platform_driver_unregister(&s3c2410ts_driver);
+	adcts_bus_unregister_driver(&s3c2410ts_driver);
 }
 
 module_init(s3c2410ts_init);
 module_exit(s3c2410ts_exit);
-
-/*
-    Local variables:
-        compile-command: "make ARCH=arm CROSS_COMPILE=/usr/local/arm/3.3.2/bin/arm-linux- -k -C ../../.."
-        c-basic-offset: 8
-    End:
-*/
Index: linux-2.6/arch/arm/mach-s3c2410/mach-h1940.c
===================================================================
--- linux-2.6.orig/arch/arm/mach-s3c2410/mach-h1940.c	2006-05-09 21:41:09.000000000 +0200
+++ linux-2.6/arch/arm/mach-s3c2410/mach-h1940.c	2006-05-09 21:41:09.000000000 +0200
@@ -165,8 +165,6 @@ static struct s3c2410_adcts_mach_info h1
 };
 
 static struct s3c2410_ts_mach_info h1940_ts_cfg __initdata = {
-		.delay = 10000,
-		.presc = 49,
 		.oversampling_shift = 2,
 };
 
@@ -371,7 +369,6 @@ static struct platform_device *h1940_dev
 	&s3c_device_iis,
 	&s3c_device_sdi,
 	&s3c_device_usbgadget,
-	&s3c_device_ts,
 	&s3c_device_adcts_bus,
 	&s3c_device_buttons,
 	&s3c_device_nand,
@@ -384,6 +381,7 @@ static struct platform_device *h1940_dev
 };
 
 static struct adcts_device *h1940_adevices[] __initdata = {
+	&s3c_device_ts,
 };
 
 static struct s3c24xx_board h1940_board __initdata = {
Index: linux-2.6/arch/arm/mach-s3c2410/devs.h
===================================================================
--- linux-2.6.orig/arch/arm/mach-s3c2410/devs.h	2006-05-09 21:41:09.000000000 +0200
+++ linux-2.6/arch/arm/mach-s3c2410/devs.h	2006-05-09 21:41:09.000000000 +0200
@@ -41,7 +41,7 @@ extern struct platform_device s3c_device
 
 extern struct platform_device s3c_device_usbgadget;
 extern struct platform_device s3c_device_adcts_bus;
-extern struct platform_device s3c_device_ts;
+extern struct adcts_device s3c_device_ts;
 extern struct platform_device s3c_device_buttons;
 
 /* s3c2440 specific devices */
Index: linux-2.6/arch/arm/mach-s3c2410/devs.c
===================================================================
--- linux-2.6.orig/arch/arm/mach-s3c2410/devs.c	2006-05-09 21:41:09.000000000 +0200
+++ linux-2.6/arch/arm/mach-s3c2410/devs.c	2006-05-09 21:41:09.000000000 +0200
@@ -164,9 +164,8 @@ struct platform_device s3c_device_adcts_
 EXPORT_SYMBOL(s3c_device_adcts_bus);
 
 /* Touchscreen */
-struct platform_device s3c_device_ts = {
+struct adcts_device s3c_device_ts = {
 	.name		  = "s3c2410-ts",
-	.id		  = -1,
 };
 
 EXPORT_SYMBOL(s3c_device_ts);
Index: linux-2.6/include/asm-arm/arch-s3c2410/ts.h
===================================================================
--- linux-2.6.orig/include/asm-arm/arch-s3c2410/ts.h	2006-03-25 16:10:31.000000000 +0100
+++ linux-2.6/include/asm-arm/arch-s3c2410/ts.h	2006-05-09 21:41:09.000000000 +0200
@@ -17,8 +17,6 @@
 #define __ASM_ARM_TS_H
 
 struct s3c2410_ts_mach_info {
-       int             delay;
-       int             presc;
        int             oversampling_shift;
 };
 
