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>
This commit is contained in:
parent
69584bd6d2
commit
ad577f8da9
3 changed files with 28 additions and 1 deletions
|
@ -100,6 +100,7 @@ struct iio_ring_access_funcs {
|
|||
* @access_id: device id number
|
||||
* @length: [DEVICE] number of datums in ring
|
||||
* @bpd: [DEVICE] size of individual datum including timestamp
|
||||
* @bpe: [DEVICE] size of individual channel value
|
||||
* @loopcount: [INTERN] number of times the ring has looped
|
||||
* @access_handler: [INTERN] chrdev access handling
|
||||
* @ev_int: [INTERN] chrdev interface for the event chrdev
|
||||
|
@ -121,6 +122,7 @@ struct iio_ring_buffer {
|
|||
int access_id;
|
||||
int length;
|
||||
int bpd;
|
||||
int bpe;
|
||||
int loopcount;
|
||||
struct iio_handler access_handler;
|
||||
struct iio_event_interface ev_int;
|
||||
|
|
|
@ -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");
|
||||
|
|
|
@ -207,7 +207,7 @@ struct iio_sw_ring_buffer {
|
|||
struct iio_ring_buffer *iio_sw_rb_allocate(struct iio_dev *indio_dev);
|
||||
void iio_sw_rb_free(struct iio_ring_buffer *ring);
|
||||
|
||||
|
||||
int iio_sw_ring_preenable(struct iio_dev *indio_dev);
|
||||
|
||||
#else /* CONFIG_IIO_RING_BUFFER*/
|
||||
static inline void iio_ring_sw_register_funcs(struct iio_ring_access_funcs *ra)
|
||||
|
|
Loading…
Reference in a new issue