Commit 43c11b43 authored by Jonathan Cameron's avatar Jonathan Cameron Committed by Greg Kroah-Hartman
Browse files

staging: iio: Make extensive use of iio_sw_ring_preenable

parent ad577f8d
Loading
Loading
Loading
Loading
+2 −29
Original line number Diff line number Diff line
@@ -147,34 +147,6 @@ static void adis16209_trigger_bh_to_ring(struct work_struct *work_s)
	return;
}

/* in these circumstances is it better to go with unaligned packing and
 * deal with the cost?*/
static int adis16209_data_rdy_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->ring->access.set_bpd) {
		if (indio_dev->scan_timestamp)
			if (indio_dev->scan_count)
				/* Timestamp (aligned to s64) and data */
				size = (((indio_dev->scan_count * sizeof(s16))
					 + sizeof(s64) - 1)
					& ~(sizeof(s64) - 1))
					+ sizeof(s64);
			else /* Timestamp only  */
				size = sizeof(s64);
		else /* Data only */
			size = indio_dev->scan_count*sizeof(s16);
		indio_dev->ring->access.set_bpd(indio_dev->ring, size);
	}

	return 0;
}

void adis16209_unconfigure_ring(struct iio_dev *indio_dev)
{
	kfree(indio_dev->pollfunc);
@@ -209,7 +181,8 @@ int adis16209_configure_ring(struct iio_dev *indio_dev)
	indio_dev->ring = ring;
	/* Effectively select the ring buffer implementation */
	iio_ring_sw_register_funcs(&ring->access);
	ring->preenable = &adis16209_data_rdy_ring_preenable;
	ring->bpe = 2;
	ring->preenable = &iio_sw_ring_preenable;
	ring->postenable = &iio_triggered_ring_postenable;
	ring->predisable = &iio_triggered_ring_predisable;
	ring->owner = THIS_MODULE;
+2 −27
Original line number Diff line number Diff line
@@ -139,32 +139,6 @@ static void adis16240_trigger_bh_to_ring(struct work_struct *work_s)
	return;
}

static int adis16240_data_rdy_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->ring->access.set_bpd) {
		if (indio_dev->scan_timestamp)
			if (indio_dev->scan_count)
				/* Timestamp (aligned sizeof(s64) and data */
				size = (((indio_dev->scan_count * sizeof(s16))
					 + sizeof(s64) - 1)
					& ~(sizeof(s64) - 1))
					+ sizeof(s64);
			else /* Timestamp only  */
				size = sizeof(s64);
		else /* Data only */
			size = indio_dev->scan_count*sizeof(s16);
		indio_dev->ring->access.set_bpd(indio_dev->ring, size);
	}

	return 0;
}

void adis16240_unconfigure_ring(struct iio_dev *indio_dev)
{
	kfree(indio_dev->pollfunc);
@@ -197,7 +171,8 @@ int adis16240_configure_ring(struct iio_dev *indio_dev)
	indio_dev->ring = ring;
	/* Effectively select the ring buffer implementation */
	iio_ring_sw_register_funcs(&ring->access);
	ring->preenable = &adis16240_data_rdy_ring_preenable;
	ring->bpe = 2;
	ring->preenable = &iio_sw_ring_preenable;
	ring->postenable = &iio_triggered_ring_postenable;
	ring->predisable = &iio_triggered_ring_predisable;
	ring->owner = THIS_MODULE;
+2 −23
Original line number Diff line number Diff line
@@ -315,28 +315,6 @@ static void lis3l02dq_trigger_bh_to_ring(struct work_struct *work_s)

	return;
}
/* in these circumstances is it better to go with unaligned packing and
 * deal with the cost?*/
static int lis3l02dq_data_rdy_ring_preenable(struct iio_dev *indio_dev)
{
	size_t size;
	/* 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->ring->access.set_bpd) {
		if (indio_dev->scan_timestamp)
			if (indio_dev->scan_count) /* Timestamp and data */
				size = 2*sizeof(s64);
			else /* Timestamp only  */
				size = sizeof(s64);
		else /* Data only */
			size = indio_dev->scan_count*sizeof(s16);
		indio_dev->ring->access.set_bpd(indio_dev->ring, size);
	}

	return 0;
}

/* Caller responsible for locking as necessary. */
static int
@@ -543,7 +521,8 @@ int lis3l02dq_configure_ring(struct iio_dev *indio_dev)
	indio_dev->ring = ring;
	/* Effectively select the ring buffer implementation */
	iio_ring_sw_register_funcs(&ring->access);
	ring->preenable = &lis3l02dq_data_rdy_ring_preenable;
	ring->bpe = 2;
	ring->preenable = &iio_sw_ring_preenable;
	ring->postenable = &iio_triggered_ring_postenable;
	ring->predisable = &iio_triggered_ring_predisable;
	ring->owner = THIS_MODULE;
+2 −27
Original line number Diff line number Diff line
@@ -142,32 +142,6 @@ static void adis16260_trigger_bh_to_ring(struct work_struct *work_s)
	return;
}

static int adis16260_data_rdy_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->ring->access.set_bpd) {
		if (indio_dev->scan_timestamp)
			if (indio_dev->scan_count)
				/* Timestamp (aligned s64) and data */
				size = (((indio_dev->scan_count * sizeof(s16))
						+ sizeof(s64) - 1)
					& ~(sizeof(s64) - 1))
					+ sizeof(s64);
			else /* Timestamp only  */
				size = sizeof(s64);
		else /* Data only */
			size = indio_dev->scan_count*sizeof(s16);
		indio_dev->ring->access.set_bpd(indio_dev->ring, size);
	}

	return 0;
}

void adis16260_unconfigure_ring(struct iio_dev *indio_dev)
{
	kfree(indio_dev->pollfunc);
@@ -199,7 +173,8 @@ int adis16260_configure_ring(struct iio_dev *indio_dev)
	indio_dev->ring = ring;
	/* Effectively select the ring buffer implementation */
	iio_ring_sw_register_funcs(&ring->access);
	ring->preenable = &adis16260_data_rdy_ring_preenable;
	ring->bpe = 2;
	ring->preenable = &iio_sw_ring_preenable;
	ring->postenable = &iio_triggered_ring_postenable;
	ring->predisable = &iio_triggered_ring_predisable;
	ring->owner = THIS_MODULE;
+2 −24
Original line number Diff line number Diff line
@@ -165,29 +165,6 @@ static void adis16300_trigger_bh_to_ring(struct work_struct *work_s)

	return;
}
/* in these circumstances is it better to go with unaligned packing and
 * deal with the cost?*/
static int adis16300_data_rdy_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->ring->access.set_bpd) {
		if (indio_dev->scan_timestamp)
			if (indio_dev->scan_count) /* Timestamp and data */
				size = 4*sizeof(s64);
			else /* Timestamp only  */
				size = sizeof(s64);
		else /* Data only */
			size = indio_dev->scan_count*sizeof(s16);
		indio_dev->ring->access.set_bpd(indio_dev->ring, size);
	}

	return 0;
}

void adis16300_unconfigure_ring(struct iio_dev *indio_dev)
{
@@ -224,7 +201,8 @@ int adis16300_configure_ring(struct iio_dev *indio_dev)
	indio_dev->ring = ring;
	/* Effectively select the ring buffer implementation */
	iio_ring_sw_register_funcs(&ring->access);
	ring->preenable = &adis16300_data_rdy_ring_preenable;
	ring->bpe = 2;
	ring->preenable = &iio_sw_ring_preenable;
	ring->postenable = &iio_triggered_ring_postenable;
	ring->predisable = &iio_triggered_ring_predisable;
	ring->owner = THIS_MODULE;
Loading