diff mbox

[RESEND,3/7] input: ti_am335x_tsc: Add variance filter

Message ID 1352271124-5513-4-git-send-email-rachna@ti.com (mailing list archive)
State New, archived
Headers show

Commit Message

Patil, Rachna Nov. 7, 2012, 6:52 a.m. UTC
Only fine tuning variance parameter present in tslib
utility does not help in removing all the ADC noise.
This logic of filtering is necessary to get this
touchscreen to work finely.

Signed-off-by: Patil, Rachna <rachna@ti.com>
---
 drivers/input/touchscreen/ti_am335x_tsc.c |   15 ++++++++++++++-
 1 files changed, 14 insertions(+), 1 deletions(-)

Comments

Dmitry Torokhov Nov. 21, 2012, 6:33 p.m. UTC | #1
Hi Rachna,

On Wed, Nov 07, 2012 at 12:22:00PM +0530, Patil, Rachna wrote:
> Only fine tuning variance parameter present in tslib
> utility does not help in removing all the ADC noise.
> This logic of filtering is necessary to get this
> touchscreen to work finely.

No, if filtering in tslib is not adequate please fix tslib so that your
work is usable for other devices as well.

Thanks.
Patil, Rachna Nov. 27, 2012, 7:07 a.m. UTC | #2
On Thu, Nov 22, 2012 at 00:03:50, Dmitry Torokhov wrote:
> Hi Rachna,

Hi Dmitry,

> 
> On Wed, Nov 07, 2012 at 12:22:00PM +0530, Patil, Rachna wrote:
> > Only fine tuning variance parameter present in tslib utility does not 
> > help in removing all the ADC noise.
> > This logic of filtering is necessary to get this touchscreen to work 
> > finely.
> 
> No, if filtering in tslib is not adequate please fix tslib so that your work is usable for other devices as well.

For now I will drop this patch from the patch set and send across the next version of the set with review comments on remaining patches addressed.
I will take up tslib separately.

Regards,
Rachna

> 
> Thanks.
> 
> --
> Dmitry
> 

--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/drivers/input/touchscreen/ti_am335x_tsc.c b/drivers/input/touchscreen/ti_am335x_tsc.c
index 6a817a8..7a26810 100644
--- a/drivers/input/touchscreen/ti_am335x_tsc.c
+++ b/drivers/input/touchscreen/ti_am335x_tsc.c
@@ -32,6 +32,8 @@ 
 #define ADCFSM_STEPID		0x10
 #define SEQ_SETTLE		275
 #define MAX_12BIT		((1 << 12) - 1)
+#define TSCADC_DELTA_X		15
+#define TSCADC_DELTA_Y		15
 
 /*
  * Refer to function regbit_map() to
@@ -51,6 +53,8 @@  struct titsc {
 	unsigned int		wires;
 	unsigned int		x_plate_resistance;
 	unsigned int		enable_bits;
+	unsigned int		bckup_x;
+	unsigned int		bckup_y;
 	bool			pen_down;
 	int			steps_to_configure;
 	int			config_inp[20];
@@ -309,12 +313,18 @@  static irqreturn_t titsc_irq(int irq, void *dev)
 	unsigned int z1, z2, z;
 	unsigned int fsm;
 	unsigned int fifo1count, fifo0count;
+	unsigned int diffx = 0, diffy = 0;
 	int i;
 
 	status = titsc_readl(ts_dev, REG_IRQSTATUS);
 	if (status & IRQENB_FIFO0THRES) {
 		titsc_read_coordinates(ts_dev, &x, &y);
 
+		diffx = abs(x - (ts_dev->bckup_x));
+		diffy = abs(y - (ts_dev->bckup_y));
+		ts_dev->bckup_x = x;
+		ts_dev->bckup_y = y;
+
 		z1 = titsc_readl(ts_dev, REG_FIFO0) & 0xfff;
 		z2 = titsc_readl(ts_dev, REG_FIFO1) & 0xfff;
 
@@ -338,7 +348,8 @@  static irqreturn_t titsc_irq(int irq, void *dev)
 			z /= z1;
 			z = (z + 2047) >> 12;
 
-			if (z <= MAX_12BIT) {
+			if ((diffx < TSCADC_DELTA_X) &&
+			(diffy < TSCADC_DELTA_Y) && (z <= MAX_12BIT)) {
 				input_report_abs(input_dev, ABS_X, x);
 				input_report_abs(input_dev, ABS_Y, y);
 				input_report_abs(input_dev, ABS_PRESSURE, z);
@@ -361,6 +372,8 @@  static irqreturn_t titsc_irq(int irq, void *dev)
 		fsm = titsc_readl(ts_dev, REG_ADCFSM);
 		if (fsm == ADCFSM_STEPID) {
 			ts_dev->pen_down = false;
+			ts_dev->bckup_x = 0;
+			ts_dev->bckup_y = 0;
 			input_report_key(input_dev, BTN_TOUCH, 0);
 			input_report_abs(input_dev, ABS_PRESSURE, 0);
 			input_sync(input_dev);