diff options
author | Barry Song <21cnbao@gmail.com> | 2010-07-11 16:39:16 +0100 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2010-07-22 11:38:29 -0700 |
commit | ad577f8da9e469a88d24c37a8ec2314c12162256 (patch) | |
tree | d37caec83b5d4e50785ca33f9fb6503baf41db56 /drivers/staging/iio/ring_sw.c | |
parent | 69584bd6d257e008fe4eeebd95c318201dc71d83 (diff) | |
download | op-kernel-dev-ad577f8da9e469a88d24c37a8ec2314c12162256.zip op-kernel-dev-ad577f8da9e469a88d24c37a8ec2314c12162256.tar.gz |
staging: iio: Add a bits per element element to ring_generic allowing a general ring_sw_preenable_function.
Signed-off-by: Barry Song <21cnbao@gmail.com>
Signed-off-by: Jonathan Cameron <jic23@cam.ac.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/staging/iio/ring_sw.c')
-rw-r--r-- | drivers/staging/iio/ring_sw.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/drivers/staging/iio/ring_sw.c b/drivers/staging/iio/ring_sw.c index 294272d..ca0e79e4 100644 --- a/drivers/staging/iio/ring_sw.c +++ b/drivers/staging/iio/ring_sw.c @@ -431,5 +431,30 @@ void iio_sw_rb_free(struct iio_ring_buffer *r) iio_put_ring_buffer(r); } EXPORT_SYMBOL(iio_sw_rb_free); + +int iio_sw_ring_preenable(struct iio_dev *indio_dev) +{ + size_t size; + dev_dbg(&indio_dev->dev, "%s\n", __func__); + /* Check if there are any scan elements enabled, if not fail*/ + if (!(indio_dev->scan_count || indio_dev->scan_timestamp)) + return -EINVAL; + if (indio_dev->scan_timestamp) + if (indio_dev->scan_count) + /* Timestamp (aligned to s64) and data */ + size = (((indio_dev->scan_count * indio_dev->ring->bpe) + + sizeof(s64) - 1) + & ~(sizeof(s64) - 1)) + + sizeof(s64); + else /* Timestamp only */ + size = sizeof(s64); + else /* Data only */ + size = indio_dev->scan_count * indio_dev->ring->bpe; + indio_dev->ring->access.set_bpd(indio_dev->ring, size); + + return 0; +} +EXPORT_SYMBOL(iio_sw_ring_preenable); + MODULE_DESCRIPTION("Industrialio I/O software ring buffer"); MODULE_LICENSE("GPL"); |