mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-07 07:08:07 +00:00
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:
parent
a5c8b11a36
commit
c8cdf70890
3 changed files with 31 additions and 0 deletions
|
@ -119,6 +119,22 @@ void iio_trigger_unregister(struct iio_trigger *trig_info)
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(iio_trigger_unregister);
|
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 */
|
/* Search for trigger by name, assuming iio_trigger_list_lock held */
|
||||||
static struct iio_trigger *__iio_trigger_find_by_name(const char *name)
|
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);
|
mutex_unlock(&indio_dev->mlock);
|
||||||
return -EBUSY;
|
return -EBUSY;
|
||||||
}
|
}
|
||||||
|
if (indio_dev->trig_readonly) {
|
||||||
|
mutex_unlock(&indio_dev->mlock);
|
||||||
|
return -EPERM;
|
||||||
|
}
|
||||||
mutex_unlock(&indio_dev->mlock);
|
mutex_unlock(&indio_dev->mlock);
|
||||||
|
|
||||||
trig = iio_trigger_find_by_name(buf, len);
|
trig = iio_trigger_find_by_name(buf, len);
|
||||||
|
|
|
@ -483,6 +483,7 @@ struct iio_buffer_setup_ops {
|
||||||
* @scan_timestamp: [INTERN] set if any buffers have requested timestamp
|
* @scan_timestamp: [INTERN] set if any buffers have requested timestamp
|
||||||
* @scan_index_timestamp:[INTERN] cache of the index to the timestamp
|
* @scan_index_timestamp:[INTERN] cache of the index to the timestamp
|
||||||
* @trig: [INTERN] current device trigger (buffer modes)
|
* @trig: [INTERN] current device trigger (buffer modes)
|
||||||
|
* @trig_readonly [INTERN] mark the current trigger immutable
|
||||||
* @pollfunc: [DRIVER] function run on trigger being received
|
* @pollfunc: [DRIVER] function run on trigger being received
|
||||||
* @pollfunc_event: [DRIVER] function run on events trigger being received
|
* @pollfunc_event: [DRIVER] function run on events trigger being received
|
||||||
* @channels: [DRIVER] channel specification structure table
|
* @channels: [DRIVER] channel specification structure table
|
||||||
|
@ -523,6 +524,7 @@ struct iio_dev {
|
||||||
bool scan_timestamp;
|
bool scan_timestamp;
|
||||||
unsigned scan_index_timestamp;
|
unsigned scan_index_timestamp;
|
||||||
struct iio_trigger *trig;
|
struct iio_trigger *trig;
|
||||||
|
bool trig_readonly;
|
||||||
struct iio_poll_func *pollfunc;
|
struct iio_poll_func *pollfunc;
|
||||||
struct iio_poll_func *pollfunc_event;
|
struct iio_poll_func *pollfunc_event;
|
||||||
|
|
||||||
|
|
|
@ -131,6 +131,15 @@ int iio_trigger_register(struct iio_trigger *trig_info);
|
||||||
**/
|
**/
|
||||||
void iio_trigger_unregister(struct iio_trigger *trig_info);
|
void iio_trigger_unregister(struct iio_trigger *trig_info);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* iio_trigger_set_immutable() - set an immutable trigger on destination
|
||||||
|
*
|
||||||
|
* @indio_dev - IIO device structure containing the device
|
||||||
|
* @trig - trigger to assign to device
|
||||||
|
*
|
||||||
|
**/
|
||||||
|
int iio_trigger_set_immutable(struct iio_dev *indio_dev, struct iio_trigger *trig);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* iio_trigger_poll() - called on a trigger occurring
|
* iio_trigger_poll() - called on a trigger occurring
|
||||||
* @trig: trigger which occurred
|
* @trig: trigger which occurred
|
||||||
|
|
Loading…
Add table
Reference in a new issue