Index: drivers/input/touchscreen/ts-adc-debounce.c
===================================================================
RCS file: /cvs/linux/kernel26/drivers/input/touchscreen/ts-adc-debounce.c,v
retrieving revision 1.56
diff -u -d -b -B -r1.56 ts-adc-debounce.c
--- drivers/input/touchscreen/ts-adc-debounce.c	26 Jun 2007 20:21:01 -0000	1.56
+++ drivers/input/touchscreen/ts-adc-debounce.c	26 Jun 2007 22:02:22 -0000
@@ -35,8 +35,6 @@
 #include <asm/irq.h>
 #include <asm/mach/irq.h>
 
-#define Z_READINGS 2
-
 #define BIG_VALUE 999999
 
 #define SAMPLE_TIMEOUT 20	/* sample every 20ms */
@@ -103,11 +101,11 @@
 		printk("%04d ", pins[ptr++].value);
 	}
 	printk("| ");
-	for (i = 0; i < Z_READINGS; i++) {
+	for (i = 0; i < params->num_z_samples; i++) {
 		printk("%04d ", pins[ptr++].value);
 	}
 	printk("| ");
-	for (i = 0; i < Z_READINGS; i++) {
+	for (i = 0; i < params->num_z_samples; i++) {
 		printk("%04d ", pins[ptr++].value);
 	}
 	printk("\n");
@@ -116,6 +114,7 @@
 	/* X-axis */
 	ptr = 0;
 	x = pins[ptr++].value;
+	/* Do real debouncing only if multiple xy samples requested. */
 	if (params->num_xy_samples > 1) {
 		/* Run thru samples and see if they converge */
 		for (i = params->num_xy_samples - 1; i > 0; i--) {
@@ -132,6 +131,7 @@
 	/* Y-axis */
 	ptr = params->num_xy_samples;
 	y = pins[ptr++].value;
+	/* Do real debouncing only if multiple xy samples requested. */
 	if (params->num_xy_samples > 1) {
 		for (i = params->num_xy_samples - 1; i > 0; i--) {
 			t = y;
@@ -145,10 +145,12 @@
 
 	/* Pressure */
 	ptr = params->num_xy_samples * 2;
-	/* Discard first sample as unstable */
+	/* Discard first sample as unstable if more than one z reading requested */
+	if (params->num_z_samples > 1)
 		ptr++;
 	z1 = pins[ptr++].value;
 
+	if (params->num_z_samples > 1)
 		ptr++;
 	z2 = pins[ptr++].value;
 
@@ -274,17 +276,18 @@
 	platform_set_drvdata(pdev, ts);
 
 	pdata->num_xy_samples = pdata->num_xy_samples ?: 10;
+	pdata->num_z_samples  = pdata->num_xy_samples ?: 2;
 
-	ts->pins = kmalloc(sizeof(*ts->pins) * (pdata->num_xy_samples*2 + Z_READINGS*2), GFP_KERNEL);
+	ts->pins = kmalloc(sizeof(*ts->pins) * (pdata->num_xy_samples*2 + pdata->num_z_samples*2), GFP_KERNEL);
 	ts->req.senses = ts->pins;
-	ts->req.num_senses = (pdata->num_xy_samples*2 + Z_READINGS*2);
+	ts->req.num_senses = (pdata->num_xy_samples*2 + pdata->num_z_samples*2);
 	i = 0;
 	fill_pins(ts->pins, i, pdata->num_xy_samples, pdata->x_pin);
 	fill_pins(ts->pins, i += pdata->num_xy_samples, 
 		pdata->num_xy_samples, pdata->y_pin);
 	fill_pins(ts->pins, i += pdata->num_xy_samples,  
-		Z_READINGS, pdata->z1_pin);
-	fill_pins(ts->pins, i +=  Z_READINGS,  Z_READINGS, pdata->z2_pin);
+		pdata->num_z_samples, pdata->z1_pin);
+	fill_pins(ts->pins, i +=  pdata->num_z_samples,  pdata->num_z_samples, pdata->z2_pin);
 	adc_request_register(&ts->req);
 
 	ts->work.pdev = pdev;
Index: include/linux/touchscreen-adc.h
===================================================================
RCS file: /cvs/linux/kernel26/include/linux/touchscreen-adc.h,v
retrieving revision 1.10
diff -u -d -b -B -r1.10 touchscreen-adc.h
--- include/linux/touchscreen-adc.h	19 Jun 2007 21:55:23 -0000	1.10
+++ include/linux/touchscreen-adc.h	26 Jun 2007 22:02:23 -0000
@@ -30,6 +30,8 @@
 	// Debouncing parameters
 	/* Number of X/Y samplings done for one measurement */
 	int num_xy_samples;
+	/* Number of Z1/Z2 samplings done for one measurement */
+	int num_z_samples;
 	/* Samples during measurement must converge to be within bounds
 	   of this value, or the whole measurement will be discarded. */
 	int max_jitter;
Index: drivers/mfd/hamcop_base.c
===================================================================
RCS file: /cvs/linux/kernel26/drivers/mfd/hamcop_base.c,v
retrieving revision 1.74
diff -u -d -b -B -r1.74 hamcop_base.c
--- drivers/mfd/hamcop_base.c	26 Jun 2007 20:07:46 -0000	1.74
+++ drivers/mfd/hamcop_base.c	26 Jun 2007 22:02:24 -0000
@@ -1111,6 +1111,9 @@
 	.y_pin = "samcop adc:y",
 	.z1_pin = "samcop adc:z1",
 	.z2_pin = "samcop adc:z2",
+	.num_xy_samples = 1,
+	.num_z_samples = 1,
+	.delayed_pressure = 1,
 	.max_jitter = 10,
 	.delayed_pressure = 1,
 };

