On Fri, Jun 01, 2012 at 12:37:01PM +0200, michael.hennerich@xxxxxxxxxx wrote: > From: Michael Hennerich <michael.hennerich@xxxxxxxxxx> > > 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 <michael.hennerich@xxxxxxxxxx> > Reported-and-tested-by: Sebastian Zenker <sebastian.zenker@xxxxxx> 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 majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html