Re: [PATCH 2/5] iio: stmpe-adc: Reinit completion struct on begin conversion

From: Philippe Schenker
Date: Mon May 13 2019 - 03:28:19 EST


On Sat, 2019-05-11 at 11:08 +0100, Jonathan Cameron wrote:
> On Tue, 7 May 2019 16:36:12 +0200
> Philippe Schenker <dev@xxxxxxxxxxxx> wrote:
>
> > From: Philippe Schenker <philippe.schenker@xxxxxxxxxxx>
> >
> > In some cases, the wait_completion got interrupted. This caused the
> > error-handling to mutex_unlock the function. The before turned on
> > interrupt then got called anyway. In the ISR then completion() was
> > called causing wrong adc-values returned in a following adc-readout.
> >
> > Reinitialise completion struct to make sure the counter is zero
> > when beginning a new adc-conversion.
> >
> > Signed-off-by: Philippe Schenker <philippe.schenker@xxxxxxxxxxx>
> Hi Philippe,
>
> To me this looks like a fix that we should consider applying to stable.
> However, as it is in the middle of this series I'm not going to take
> it via the fast route (during rc's). If people want to backport it
> they will have to wait until after the next merge window.
> If anyone has an urgent need, then shout in the next week and I'll
> pull this version out and we can restructure the set.
>
> Applied to the togreg branch of iio.git and pushed out as testing
> for the autobuilders to play with it.
>
> Thanks,
>
> Jonathan

Hi Jonathan! I don't think that's necessary. As long as it gets into stable at
some point. Our customer use downstream anyway. Where I'm about to apply it now.

Thanks,
Philippe
>
> > ---
> >
> > drivers/iio/adc/stmpe-adc.c | 4 ++++
> > 1 file changed, 4 insertions(+)
> >
> > diff --git a/drivers/iio/adc/stmpe-adc.c b/drivers/iio/adc/stmpe-adc.c
> > index 9ec338ba3440..b3872eb37293 100644
> > --- a/drivers/iio/adc/stmpe-adc.c
> > +++ b/drivers/iio/adc/stmpe-adc.c
> > @@ -65,6 +65,8 @@ static int stmpe_read_voltage(struct stmpe_adc *info,
> >
> > mutex_lock(&info->lock);
> >
> > + reinit_completion(&info->completion);
> > +
> > info->channel = (u8)chan->channel;
> >
> > if (info->channel > STMPE_ADC_LAST_NR) {
> > @@ -105,6 +107,8 @@ static int stmpe_read_temp(struct stmpe_adc *info,
> >
> > mutex_lock(&info->lock);
> >
> > + reinit_completion(&info->completion);
> > +
> > info->channel = (u8)chan->channel;
> >
> > if (info->channel != STMPE_TEMP_CHANNEL) {