From: Imre Deak Date: Wed, 22 Mar 2006 15:42:07 +0000 (-0400) Subject: ads7846: filtering based on pressure value X-Git-Tag: v2.6.16-omap1~20^2~2 X-Git-Url: http://pilppa.com/gitweb/?a=commitdiff_plain;h=0bd6f714d5b86d58659ba184507b86f1f67cf802;p=linux-2.6-omap-h63xx.git ads7846: filtering based on pressure value Limit the pressure value to the maximum specified in the board- specific file. Samples with pressure values beyond the maximum are considered non-reliable. Report the previously measured X and Y values samples instead of the non-reliable ones. Signed-off-by: Imre Deak Signed-off-by: Juha Yrjola --- diff --git a/drivers/input/touchscreen/ads7846.c b/drivers/input/touchscreen/ads7846.c index 19d8f43e6c9..71fbcc4c58b 100644 --- a/drivers/input/touchscreen/ads7846.c +++ b/drivers/input/touchscreen/ads7846.c @@ -80,10 +80,14 @@ struct ads7846 { u16 model; u16 vref_delay_usecs; u16 x_plate_ohms; + u16 pressure_max; u8 read_x, read_y, read_z1, read_z2, pwrdown; u16 dummy; /* for the pwrdown read */ struct ts_event tc; + u16 last_x; + u16 last_y; + u16 last_pressure; struct spi_transfer xfer[10]; struct spi_message msg[5]; @@ -344,6 +348,18 @@ static void ads7846_rx(void *ads) } else Rt = 0; + if (Rt > ts->pressure_max) { + if (ts->last_pressure) { + x = ts->last_x; + y = ts->last_y; + } + Rt = ts->pressure_max; + } + + ts->last_x = x; + ts->last_y = y; + ts->last_pressure = Rt; + /* NOTE: "pendown" is inferred from pressure; we don't rely on * being able to check nPENIRQ status, or "friendly" trigger modes * (both-edges is much better than just-falling or low-level). @@ -593,6 +609,7 @@ static int __devinit ads7846_probe(struct spi_device *spi) ts->model = pdata->model ? : 7846; ts->vref_delay_usecs = pdata->vref_delay_usecs ? : 100; ts->x_plate_ohms = pdata->x_plate_ohms ? : 400; + ts->pressure_max = pdata->pressure_max ? : ~0; ts->debounce_max = pdata->debounce_max ? : 1; ts->debounce_tol = pdata->debounce_tol ? : 10;