Commit ad577f8d authored by Barry Song's avatar Barry Song Committed by Greg Kroah-Hartman
Browse files

staging: iio: Add a bits per element element to ring_generic allowing a...


staging: iio: Add a bits per element element to ring_generic allowing a general ring_sw_preenable_function.

Signed-off-by: default avatarBarry Song <21cnbao@gmail.com>
Signed-off-by: default avatarJonathan Cameron <jic23@cam.ac.uk>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent 69584bd6
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -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;
+25 −0
Original line number Diff line number Diff line
@@ -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");
+1 −1
Original line number Diff line number Diff line
@@ -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)