On Wed, Oct 12, 2022 at 6:15 PM Nuno Sá <nuno.sa@xxxxxxxxxx> wrote: > > These APIs are analogous to iio_device_claim_direct_mode() and > iio_device_release_direct_mode() but, as the name suggests, with the > logic flipped. While this looks odd enough, it will have at least two > users (in following changes) and it will be important to move the iio > mlock to the private struct. IIO > Signed-off-by: Nuno Sá <nuno.sa@xxxxxxxxxx> > --- > drivers/iio/industrialio-core.c | 38 +++++++++++++++++++++++++++++++++ > include/linux/iio/iio.h | 2 ++ > 2 files changed, 40 insertions(+) > > diff --git a/drivers/iio/industrialio-core.c b/drivers/iio/industrialio-core.c > index 151ff3993354..cf80f81e4665 100644 > --- a/drivers/iio/industrialio-core.c > +++ b/drivers/iio/industrialio-core.c > @@ -2083,6 +2083,44 @@ void iio_device_release_direct_mode(struct iio_dev *indio_dev) > } > EXPORT_SYMBOL_GPL(iio_device_release_direct_mode); > > +/** > + * iio_device_claim_buffer_mode - Keep device in buffer mode > + * @indio_dev: the iio_dev associated with the device > + * > + * If the device is in buffer mode it is guaranteed to stay > + * that way until iio_device_release_buffer_mode() is called. > + * > + * Use with iio_device_release_buffer_mode() Missed trailing period. > + * > + * Returns: 0 on success, -EBUSY on failure Ditto. > + */ > +int iio_device_claim_buffer_mode(struct iio_dev *indio_dev) > +{ > + mutex_lock(&indio_dev->mlock); > + > + if (iio_buffer_enabled(indio_dev)) > + return 0; > + > + mutex_unlock(&indio_dev->mlock); > + return -EBUSY; > +} > +EXPORT_SYMBOL_GPL(iio_device_claim_buffer_mode); > + > +/** > + * iio_device_release_buffer_mode - releases claim on buffer mode > + * @indio_dev: the iio_dev associated with the device > + * > + * Release the claim. Device is no longer guaranteed to stay > + * in buffer mode. > + * > + * Use with iio_device_claim_buffer_mode() Ditto. > + */ > +void iio_device_release_buffer_mode(struct iio_dev *indio_dev) > +{ > + mutex_unlock(&indio_dev->mlock); > +} > +EXPORT_SYMBOL_GPL(iio_device_release_buffer_mode); > + > /** > * iio_device_get_current_mode() - helper function providing read-only access to > * the opaque @currentmode variable > diff --git a/include/linux/iio/iio.h b/include/linux/iio/iio.h > index f0ec8a5e5a7a..9d3bd6379eb8 100644 > --- a/include/linux/iio/iio.h > +++ b/include/linux/iio/iio.h > @@ -629,6 +629,8 @@ int __devm_iio_device_register(struct device *dev, struct iio_dev *indio_dev, > int iio_push_event(struct iio_dev *indio_dev, u64 ev_code, s64 timestamp); > int iio_device_claim_direct_mode(struct iio_dev *indio_dev); > void iio_device_release_direct_mode(struct iio_dev *indio_dev); > +int iio_device_claim_buffer_mode(struct iio_dev *indio_dev); > +void iio_device_release_buffer_mode(struct iio_dev *indio_dev); > > extern struct bus_type iio_bus_type; > > -- > 2.38.0 > -- With Best Regards, Andy Shevchenko