On Fri, Jun 01, 2012 at 12:37:01PM +0200, [email protected] wrote:
> From: Michael Hennerich <[email protected]>
>
> Sebastian Zenker reported that driver swaps x and y samples when the
> touchscreen leads are connected in accordance with the datasheet
> specification.
> Transposed axis can be typically corrected by touch screen calibration
> however this bug also negatively influences touch pressure measurements.
>
> Add an option to correct x and y axis.
>
> Signed-off-by: Michael Hennerich <[email protected]>
> Reported-and-tested-by: Sebastian Zenker <[email protected]>
Applied, thank you Michael.
> ---
> drivers/input/touchscreen/ad7879.c | 5 +++++
> include/linux/spi/ad7879.h | 1 +
> 2 files changed, 6 insertions(+), 0 deletions(-)
>
> diff --git a/drivers/input/touchscreen/ad7879.c
> b/drivers/input/touchscreen/ad7879.c
> index e2482b4..e607092 100644
> --- a/drivers/input/touchscreen/ad7879.c
> +++ b/drivers/input/touchscreen/ad7879.c
> @@ -118,6 +118,7 @@ struct ad7879 {
> unsigned int irq;
> bool disabled; /* P: input->mutex */
> bool suspended; /* P: input->mutex */
> + bool swap_xy;
> u16 conversion_data[AD7879_NR_SENSE];
> char phys[32];
> u8 first_conversion_delay;
> @@ -161,6 +162,9 @@ static int ad7879_report(struct ad7879 *ts)
> z1 = ts->conversion_data[AD7879_SEQ_Z1] & MAX_12BIT;
> z2 = ts->conversion_data[AD7879_SEQ_Z2] & MAX_12BIT;
>
> + if (ts->swap_xy)
> + swap(x, y);
> +
> /*
> * The samples processed here are already preprocessed by the AD7879.
> * The preprocessing function consists of a median and an averaging
> @@ -520,6 +524,7 @@ struct ad7879 *ad7879_probe(struct device *dev, u8 devid,
> unsigned int irq,
> ts->dev = dev;
> ts->input = input_dev;
> ts->irq = irq;
> + ts->swap_xy = pdata->swap_xy;
>
> setup_timer(&ts->timer, ad7879_timer, (unsigned long) ts);
>
> diff --git a/include/linux/spi/ad7879.h b/include/linux/spi/ad7879.h
> index 6334cee..9113a59 100644
> --- a/include/linux/spi/ad7879.h
> +++ b/include/linux/spi/ad7879.h
> @@ -12,6 +12,7 @@ struct ad7879_platform_data {
> u16 y_min, y_max;
> u16 pressure_min, pressure_max;
>
> + bool swap_xy; /* swap x and y axes */
> /* [0..255] 0=OFF Starts at 1=550us and goes
> * all the way to 9.440ms in steps of 35us.
> */
> --
> 1.7.0.4
>
>
--
Dmitry
--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html