diff options
Diffstat (limited to 'drivers/iio/adc/stm32-adc.c')
| -rw-r--r-- | drivers/iio/adc/stm32-adc.c | 29 | 
1 files changed, 6 insertions, 23 deletions
| diff --git a/drivers/iio/adc/stm32-adc.c b/drivers/iio/adc/stm32-adc.c index 16c02c30dec7..c067c994dae2 100644 --- a/drivers/iio/adc/stm32-adc.c +++ b/drivers/iio/adc/stm32-adc.c @@ -1353,7 +1353,7 @@ static int stm32_adc_set_watermark(struct iio_dev *indio_dev, unsigned int val)  	 * dma cyclic transfers are used, buffer is split into two periods.  	 * There should be :  	 * - always one buffer (period) dma is working on -	 * - one buffer (period) driver can push with iio_trigger_poll(). +	 * - one buffer (period) driver can push data.  	 */  	watermark = min(watermark, val * (unsigned)(sizeof(u16)));  	adc->rx_buf_sz = min(rx_buf_sz, watermark * 2 * adc->num_conv); @@ -1616,31 +1616,14 @@ static irqreturn_t stm32_adc_trigger_handler(int irq, void *p)  	dev_dbg(&indio_dev->dev, "%s bufi=%d\n", __func__, adc->bufi); -	if (!adc->dma_chan) { -		/* reset buffer index */ -		adc->bufi = 0; -		iio_push_to_buffers_with_timestamp(indio_dev, adc->buffer, -						   pf->timestamp); -	} else { -		int residue = stm32_adc_dma_residue(adc); - -		while (residue >= indio_dev->scan_bytes) { -			u16 *buffer = (u16 *)&adc->rx_buf[adc->bufi]; - -			iio_push_to_buffers_with_timestamp(indio_dev, buffer, -							   pf->timestamp); -			residue -= indio_dev->scan_bytes; -			adc->bufi += indio_dev->scan_bytes; -			if (adc->bufi >= adc->rx_buf_sz) -				adc->bufi = 0; -		} -	} - +	/* reset buffer index */ +	adc->bufi = 0; +	iio_push_to_buffers_with_timestamp(indio_dev, adc->buffer, +					   pf->timestamp);  	iio_trigger_notify_done(indio_dev->trig);  	/* re-enable eoc irq */ -	if (!adc->dma_chan) -		stm32_adc_conv_irq_enable(adc); +	stm32_adc_conv_irq_enable(adc);  	return IRQ_HANDLED;  } | 
