aboutsummaryrefslogtreecommitdiff
path: root/drivers/staging/iio/industrialio-trigger.c
diff options
context:
space:
mode:
authorMichael Hennerich <michael.hennerich@analog.com>2011-06-27 13:07:09 +0100
committerGreg Kroah-Hartman <gregkh@suse.de>2011-06-28 14:39:33 -0700
commit43a4360ea8f075540cb7c1efc8d643b4261eb901 (patch)
treee380d8c5563b32f13b7c7b06a224c32998a199d3 /drivers/staging/iio/industrialio-trigger.c
parent03e1672a70be991a9e84d67b2d2143313938e1a8 (diff)
iio: trigger: Add filter callback
Allow devices to reject triggers and vice versa. Changes since V1: Added kernel-doc Moved callback into iio_info Changed function naming Revised return value passing Add forward declaration to avoid warnings Signed-off-by: Michael Hennerich <michael.hennerich@analog.com> Acked-by: Jonathan Cameron <jic23@cam.ac.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/staging/iio/industrialio-trigger.c')
-rw-r--r--drivers/staging/iio/industrialio-trigger.c20
1 files changed, 19 insertions, 1 deletions
diff --git a/drivers/staging/iio/industrialio-trigger.c b/drivers/staging/iio/industrialio-trigger.c
index d504aa251ce..90ca2df23ea 100644
--- a/drivers/staging/iio/industrialio-trigger.c
+++ b/drivers/staging/iio/industrialio-trigger.c
@@ -340,6 +340,9 @@ static ssize_t iio_trigger_write_current(struct device *dev,
{
struct iio_dev *dev_info = dev_get_drvdata(dev);
struct iio_trigger *oldtrig = dev_info->trig;
+ struct iio_trigger *trig;
+ int ret;
+
mutex_lock(&dev_info->mlock);
if (dev_info->currentmode == INDIO_RING_TRIGGERED) {
mutex_unlock(&dev_info->mlock);
@@ -347,7 +350,22 @@ static ssize_t iio_trigger_write_current(struct device *dev,
}
mutex_unlock(&dev_info->mlock);
- dev_info->trig = iio_trigger_find_by_name(buf, len);
+ trig = iio_trigger_find_by_name(buf, len);
+
+ if (trig && dev_info->info->validate_trigger) {
+ ret = dev_info->info->validate_trigger(dev_info, trig);
+ if (ret)
+ return ret;
+ }
+
+ if (trig && trig->validate_device) {
+ ret = trig->validate_device(trig, dev_info);
+ if (ret)
+ return ret;
+ }
+
+ dev_info->trig = trig;
+
if (oldtrig && dev_info->trig != oldtrig)
iio_put_trigger(oldtrig);
if (dev_info->trig)