Message ID | 1369847397-27451-6-git-send-email-bigeasy@linutronix.de (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On 05/29/2013 06:09 PM, Sebastian Andrzej Siewior wrote: > Usually we get all the values we wanted but it is possible, that te ADC > unit is busy performing the conversation for the HW events. In that case > -EBUSY is returned and the user may re-call the function. > > Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> Acked-by: Jonathan Cameron <jic23@kernel.org> > --- > drivers/iio/adc/ti_am335x_adc.c | 7 ++++++- > 1 file changed, 6 insertions(+), 1 deletion(-) > > diff --git a/drivers/iio/adc/ti_am335x_adc.c b/drivers/iio/adc/ti_am335x_adc.c > index df2de4c..6a00874 100644 > --- a/drivers/iio/adc/ti_am335x_adc.c > +++ b/drivers/iio/adc/ti_am335x_adc.c > @@ -161,6 +161,7 @@ static int tiadc_read_raw(struct iio_dev *indio_dev, > int i; > unsigned int fifo1count, read; > u32 step = UINT_MAX; > + bool found = false; > > /* > * When the sub-system is first enabled, > @@ -185,10 +186,14 @@ static int tiadc_read_raw(struct iio_dev *indio_dev, > fifo1count = tiadc_readl(adc_dev, REG_FIFO1CNT); > for (i = 0; i < fifo1count; i++) { > read = tiadc_readl(adc_dev, REG_FIFO1); > - if (read >> 16 == step) > + if (read >> 16 == step) { > *val = read & 0xfff; > + found = true; > + } > } > tiadc_writel(adc_dev, REG_SE, STPENB_STEPENB); > + if (found == false) > + return -EBUSY; > > return IIO_VAL_INT; > } > -- To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/iio/adc/ti_am335x_adc.c b/drivers/iio/adc/ti_am335x_adc.c index df2de4c..6a00874 100644 --- a/drivers/iio/adc/ti_am335x_adc.c +++ b/drivers/iio/adc/ti_am335x_adc.c @@ -161,6 +161,7 @@ static int tiadc_read_raw(struct iio_dev *indio_dev, int i; unsigned int fifo1count, read; u32 step = UINT_MAX; + bool found = false; /* * When the sub-system is first enabled, @@ -185,10 +186,14 @@ static int tiadc_read_raw(struct iio_dev *indio_dev, fifo1count = tiadc_readl(adc_dev, REG_FIFO1CNT); for (i = 0; i < fifo1count; i++) { read = tiadc_readl(adc_dev, REG_FIFO1); - if (read >> 16 == step) + if (read >> 16 == step) { *val = read & 0xfff; + found = true; + } } tiadc_writel(adc_dev, REG_SE, STPENB_STEPENB); + if (found == false) + return -EBUSY; return IIO_VAL_INT; }
Usually we get all the values we wanted but it is possible, that te ADC unit is busy performing the conversation for the HW events. In that case -EBUSY is returned and the user may re-call the function. Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> --- drivers/iio/adc/ti_am335x_adc.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-)