iio: trigger: allow immutable triggers to be assigned
There are times when an assigned trigger to a device shouldn't ever change after intialization. Examples of this being used is when an provider device has a trigger that is assigned to an ADC, which uses it populate data into a callback buffer. Signed-off-by: Matt Ranostay <matt@ranostay.consulting> Signed-off-by: Jonathan Cameron <jic23@kernel.org>
This commit is contained in:

committed by
Jonathan Cameron

parent
a5c8b11a36
commit
c8cdf70890
@@ -119,6 +119,22 @@ void iio_trigger_unregister(struct iio_trigger *trig_info)
|
||||
}
|
||||
EXPORT_SYMBOL(iio_trigger_unregister);
|
||||
|
||||
int iio_trigger_set_immutable(struct iio_dev *indio_dev, struct iio_trigger *trig)
|
||||
{
|
||||
if (!indio_dev || !trig)
|
||||
return -EINVAL;
|
||||
|
||||
mutex_lock(&indio_dev->mlock);
|
||||
WARN_ON(indio_dev->trig_readonly);
|
||||
|
||||
indio_dev->trig = iio_trigger_get(trig);
|
||||
indio_dev->trig_readonly = true;
|
||||
mutex_unlock(&indio_dev->mlock);
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(iio_trigger_set_immutable);
|
||||
|
||||
/* Search for trigger by name, assuming iio_trigger_list_lock held */
|
||||
static struct iio_trigger *__iio_trigger_find_by_name(const char *name)
|
||||
{
|
||||
@@ -384,6 +400,10 @@ static ssize_t iio_trigger_write_current(struct device *dev,
|
||||
mutex_unlock(&indio_dev->mlock);
|
||||
return -EBUSY;
|
||||
}
|
||||
if (indio_dev->trig_readonly) {
|
||||
mutex_unlock(&indio_dev->mlock);
|
||||
return -EPERM;
|
||||
}
|
||||
mutex_unlock(&indio_dev->mlock);
|
||||
|
||||
trig = iio_trigger_find_by_name(buf, len);
|
||||
|
Reference in New Issue
Block a user