Thread (23 messages) 23 messages, 3 authors, 2013-08-20

Re: [PATCH 4/4] iio: ti_am335x_adc: Add continuous sampling and trigger support

flat view

From: Zubair Lutfullah : <hidden>
Date: 2013-08-16 22:18:05
Also in: linux-iio, lkml

On Fri, Aug 16, 2013 at 03:25:49PM +0200, Sebastian Andrzej Siewior wrote:
* Zubair Lutfullah | 2013-08-13 21:05:03 [+0100]:
quoted
diff --git a/drivers/iio/adc/ti_am335x_adc.c b/drivers/iio/adc/ti_am335x_adc.c
index 3ceac3e..0d7e313 100644
--- a/drivers/iio/adc/ti_am335x_adc.c
+++ b/drivers/iio/adc/ti_am335x_adc.c
@@ -141,58 +350,51 @@ static int tiadc_read_raw(struct iio_dev *indio_dev,
{
…
quoted
+	if (iio_buffer_enabled(indio_dev))
+		return -EBUSY;
+	else {
You can drop else so you lose one ident level.
Noted.
quoted
+		unsigned long timeout = jiffies + usecs_to_jiffies
+					(IDLE_TIMEOUT * adc_dev->channels);
What computing this once? ->channels is assigned at probe time.
The timeout depends on number of SW enabled channels.
Hence the calculation. In this read_raw, one channel is to be
read. 
However, all channels are sampled. And the one that the 
userspace requires is pushed to user.
quoted
+		/* Wait for ADC sequencer to complete sampling */
+		while (tiadc_readl(adc_dev, REG_ADCFSM) & SEQ_STATUS) {
+			if (time_after(jiffies, timeout))
+				return -EAGAIN;
You should check the condition after the timeout occured once again. It
is possible that the task performing the read has been pushed away by a
higher prio task (or preempted incase this sounds like a bully) and
after it got back on the cpu the timeout occured but the condition is
valid and no reason for -EAGAIN.

Sebastian
Interesting catch. I'll look into it.

Thanks for pointing it out.

Zubair
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help