summaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorIoana Ciornei <ciorneiioana@gmail.com>2015-10-27 20:40:56 +0200
committerJonathan Cameron <jic23@kernel.org>2015-11-21 15:56:44 +0000
commit2e9fed42209b17116c6221e136ccbd3f252f5f86 (patch)
tree1eeeb8259272706e243aec8d1df95225c4628223 /drivers
parentb57f9f34e27bf81c97b10d6725d71824e448c37e (diff)
downloadlinux-stable-2e9fed42209b17116c6221e136ccbd3f252f5f86.tar.gz
linux-stable-2e9fed42209b17116c6221e136ccbd3f252f5f86.tar.bz2
linux-stable-2e9fed42209b17116c6221e136ccbd3f252f5f86.zip
staging: iio: dummy: complete IIO events delivery to userspace
Starting with commit fd2bb310ca (Staging: iio: Move evgen interrupt generation to irq_work) event processing is handled by calling both the top half and the threaded part properly simulating real hardware interrupts making use of threaded interrupts. This way the processing is split in 2 parts: * the IRQ handler that runs in IRQ context and only saves the event timestamp * the threaded handler that runs in process context, reads the events and pushes the in the userspace. If the IRQ handler returns IRQ_HANDLED the threaded handler is not even being called since the interrupt is considered to be processed. Because the iio dummy driver processes the events in the threaded handler the IRQ handler must return IRQ_WAKE_THREAD so that the threaded part would be awakened and called. Signed-off-by: Ioana Ciornei <ciorneiioana@gmail.com> Signed-off-by: Jonathan Cameron <jic23@kernel.org>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/staging/iio/iio_simple_dummy_events.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/staging/iio/iio_simple_dummy_events.c b/drivers/staging/iio/iio_simple_dummy_events.c
index bfbf1c56bd22..6eb600ff7056 100644
--- a/drivers/staging/iio/iio_simple_dummy_events.c
+++ b/drivers/staging/iio/iio_simple_dummy_events.c
@@ -159,7 +159,7 @@ static irqreturn_t iio_simple_dummy_get_timestamp(int irq, void *private)
struct iio_dummy_state *st = iio_priv(indio_dev);
st->event_timestamp = iio_get_time_ns();
- return IRQ_HANDLED;
+ return IRQ_WAKE_THREAD;
}
/**