Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1758955AbaJaVEb (ORCPT ); Fri, 31 Oct 2014 17:04:31 -0400 Received: from mout.gmx.net ([212.227.17.22]:62771 "EHLO mout.gmx.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752060AbaJaVE2 (ORCPT ); Fri, 31 Oct 2014 17:04:28 -0400 Message-ID: <5453F935.10007@gmx.de> Date: Fri, 31 Oct 2014 22:03:49 +0100 From: Hartmut Knaack User-Agent: Mozilla/5.0 (X11; Linux i686; rv:32.0) Gecko/20100101 Firefox/32.0 SeaMonkey/2.29 MIME-Version: 1.0 To: Vignesh R , Rob Herring , Pawel Moll , Mark Rutland , Ian Campbell , Kumar Gala , Benoit Cousson , Tony Lindgren , Russell King , Jonathan Cameron , Dmitry Torokhov CC: Lars-Peter Clausen , Peter Meerwald , Samuel Ortiz , Lee Jones , Felipe Balbi , Sebastian Andrzej Siewior , Jan Kardell , Paul Gortmaker , Brad Griffis , devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-omap@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-iio@vger.kernel.org, linux-input@vger.kernel.org Subject: Re: [PATCH 1/4] input: touchscreen: ti_am335x_tsc Interchange touchscreen and ADC steps References: <1414408111-2631-1-git-send-email-vigneshr@ti.com> <1414408111-2631-2-git-send-email-vigneshr@ti.com> In-Reply-To: <1414408111-2631-2-git-send-email-vigneshr@ti.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Provags-ID: V03:K0:MSPRr2Igon0cOV/L4FV8nIf7Z6QLyOJv4M1P1DDX7JWYntFyiMU iULQg1hsZlej28D1NHfXKB7Ww8VJBRAZYPQAeYgQHYfWqO5cbZEGy+HrOcCxwyxdUZbpp+k C1u1tMkImGM3jy+QaGAfHKyhgs/kUOTuub1FjIeao645pDU9Lrg0iEDTFngpz/F3kPOfaJc 4DsUlQPFt1foQ+nrTvzRg== X-UI-Out-Filterresults: notjunk:1; Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Vignesh R schrieb am 27.10.2014 12:08: > From: Brad Griffis > > This patch makes the initial changes required to workaround TSC-false > pen-up interrupts. It is required to implement these changes in order to > remove udelay in the TSC interrupt handler and false pen-up events. > The charge step is to be executed immediately after sampling X+. Hence > TSC is made to use higher numbered steps (steps 5 to 16 for 5 co-ordinate > readouts, 4 wire TSC configuration) and ADC to use lower ones. Further > X co-ordinate readouts must be the last to be sampled, thus co-ordinates > are sampled in the order Y-Z-X. > > Signed-off-by: Brad Griffis > [vigneshr@ti.com: Ported the patch from v3.12 to v3.18rc2] > Signed-off-by: Vignesh R > --- > drivers/iio/adc/ti_am335x_adc.c | 2 +- > drivers/input/touchscreen/ti_am335x_tsc.c | 42 ++++++++++++++++++------------- > 2 files changed, 25 insertions(+), 19 deletions(-) > > diff --git a/drivers/iio/adc/ti_am335x_adc.c b/drivers/iio/adc/ti_am335x_adc.c > index b730864731e8..3f530ed6bd80 100644 > --- a/drivers/iio/adc/ti_am335x_adc.c > +++ b/drivers/iio/adc/ti_am335x_adc.c > @@ -98,7 +98,7 @@ static void tiadc_step_config(struct iio_dev *indio_dev) > * needs to be given to ADC to digitalize data. > */ > > - steps = TOTAL_STEPS - adc_dev->channels; > + steps = 0; You could even initialize it with zero during variable definition. And I think the above comment could need an update now. > if (iio_buffer_enabled(indio_dev)) > stepconfig = STEPCONFIG_AVG_16 | STEPCONFIG_FIFO1 > | STEPCONFIG_MODE_SWCNT; > diff --git a/drivers/input/touchscreen/ti_am335x_tsc.c b/drivers/input/touchscreen/ti_am335x_tsc.c > index 2ce649520fe0..1aeac9675fe7 100644 > --- a/drivers/input/touchscreen/ti_am335x_tsc.c > +++ b/drivers/input/touchscreen/ti_am335x_tsc.c > @@ -121,7 +121,7 @@ static void titsc_step_config(struct titsc *ts_dev) > { > unsigned int config; > int i; > - int end_step; > + int end_step, first_step, tsc_steps; > u32 stepenable; > > config = STEPCONFIG_MODE_HWSYNC | > @@ -140,9 +140,11 @@ static void titsc_step_config(struct titsc *ts_dev) > break; > } > > - /* 1 … coordinate_readouts is for X */ > - end_step = ts_dev->coordinate_readouts; > - for (i = 0; i < end_step; i++) { > + tsc_steps = ts_dev->coordinate_readouts * 2 + 2; > + first_step = TOTAL_STEPS - tsc_steps; > + /* Steps 16 to 16-coordinate_readouts is for X */ > + end_step = first_step + tsc_steps; > + for (i = end_step - ts_dev->coordinate_readouts; i < end_step; i++) { > titsc_writel(ts_dev, REG_STEPCONFIG(i), config); > titsc_writel(ts_dev, REG_STEPDELAY(i), STEPCONFIG_OPENDLY); > } > @@ -164,9 +166,9 @@ static void titsc_step_config(struct titsc *ts_dev) > break; > } > > - /* coordinate_readouts … coordinate_readouts * 2 is for Y */ > - end_step = ts_dev->coordinate_readouts * 2; > - for (i = ts_dev->coordinate_readouts; i < end_step; i++) { > + /* 1 ... coordinate_readouts is for Y */ > + end_step = first_step + ts_dev->coordinate_readouts; > + for (i = first_step; i < end_step; i++) { > titsc_writel(ts_dev, REG_STEPCONFIG(i), config); > titsc_writel(ts_dev, REG_STEPDELAY(i), STEPCONFIG_OPENDLY); > } > @@ -179,7 +181,7 @@ static void titsc_step_config(struct titsc *ts_dev) > titsc_writel(ts_dev, REG_CHARGECONFIG, config); > titsc_writel(ts_dev, REG_CHARGEDELAY, CHARGEDLY_OPENDLY); > > - /* coordinate_readouts * 2 … coordinate_readouts * 2 + 2 is for Z */ > + /* coordinate_readouts + 1 ... coordinate_readouts + 2 is for Z */ > config = STEPCONFIG_MODE_HWSYNC | > STEPCONFIG_AVG_16 | ts_dev->bit_yp | > ts_dev->bit_xn | STEPCONFIG_INM_ADCREFM | > @@ -194,8 +196,11 @@ static void titsc_step_config(struct titsc *ts_dev) > titsc_writel(ts_dev, REG_STEPDELAY(end_step), > STEPCONFIG_OPENDLY); > > - /* The steps1 … end and bit 0 for TS_Charge */ > - stepenable = (1 << (end_step + 2)) - 1; > + /* The steps end ... end - readouts * 2 + 2 and bit 0 for TS_Charge */ > + stepenable = 1; > + for (i = 0; i < tsc_steps; i++) > + stepenable |= 1 << (first_step + i + 1); > + > ts_dev->step_mask = stepenable; > am335x_tsc_se_set_cache(ts_dev->mfd_tscadc, ts_dev->step_mask); > } > @@ -209,6 +214,7 @@ static void titsc_read_coordinates(struct titsc *ts_dev, > unsigned int read, diff; > unsigned int i, channel; > unsigned int creads = ts_dev->coordinate_readouts; > + unsigned int first_step = TOTAL_STEPS - (creads * 2 + 2); > > *z1 = *z2 = 0; > if (fifocount % (creads * 2 + 2)) > @@ -226,7 +232,7 @@ static void titsc_read_coordinates(struct titsc *ts_dev, > > channel = (read & 0xf0000) >> 16; > read &= 0xfff; > - if (channel < creads) { > + if (channel > first_step + creads + 2) { > diff = abs(read - prev_val_x); > if (diff < prev_diff_x) { > prev_diff_x = diff; > @@ -234,19 +240,19 @@ static void titsc_read_coordinates(struct titsc *ts_dev, > } > prev_val_x = read; > > - } else if (channel < creads * 2) { > + } else if (channel == first_step + creads + 1) { > + *z1 = read; > + > + } else if (channel == first_step + creads + 2) { > + *z2 = read; > + > + } else if (channel > first_step) { > diff = abs(read - prev_val_y); > if (diff < prev_diff_y) { > prev_diff_y = diff; > *y = read; > } > prev_val_y = read; > - > - } else if (channel < creads * 2 + 1) { > - *z1 = read; > - > - } else if (channel < creads * 2 + 2) { > - *z2 = read; > } > } > } > -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/