Commit 84b36ce5 authored by Jonathan Cameron's avatar Jonathan Cameron
Browse files

staging:iio: Add support for multiple buffers



Route all buffer writes through the demux.
Addition or removal of a buffer results in tear down and
setup of all the buffers for a given device.

Signed-off-by: default avatarJonathan Cameron <jic23@kernel.org>
Tested-by: default avatarsrinivas pandruvada <srinivas.pandruvada@intel.com>
parent 4eb3ccf1
Loading
Loading
Loading
Loading
+1 −14
Original line number Diff line number Diff line
@@ -197,21 +197,8 @@ static const struct iio_info accel_3d_info = {
/* Function to push data to buffer */
static void hid_sensor_push_data(struct iio_dev *indio_dev, u8 *data, int len)
{
	struct iio_buffer *buffer = indio_dev->buffer;
	int datum_sz;

	dev_dbg(&indio_dev->dev, "hid_sensor_push_data\n");
	if (!buffer) {
		dev_err(&indio_dev->dev, "Buffer == NULL\n");
		return;
	}
	datum_sz = buffer->access->get_bytes_per_datum(buffer);
	if (len > datum_sz) {
		dev_err(&indio_dev->dev, "Datum size mismatch %d:%d\n", len,
				datum_sz);
		return;
	}
	iio_push_to_buffer(buffer, (u8 *)data);
	iio_push_to_buffers(indio_dev, (u8 *)data);
}

/* Callback handler to send event after all samples are received and captured */
+1 −2
Original line number Diff line number Diff line
@@ -91,7 +91,6 @@ static irqreturn_t ad7266_trigger_handler(int irq, void *p)
{
	struct iio_poll_func *pf = p;
	struct iio_dev *indio_dev = pf->indio_dev;
	struct iio_buffer *buffer = indio_dev->buffer;
	struct ad7266_state *st = iio_priv(indio_dev);
	int ret;

@@ -99,7 +98,7 @@ static irqreturn_t ad7266_trigger_handler(int irq, void *p)
	if (ret == 0) {
		if (indio_dev->scan_timestamp)
			((s64 *)st->data)[1] = pf->timestamp;
		iio_push_to_buffer(buffer, (u8 *)st->data);
		iio_push_to_buffers(indio_dev, (u8 *)st->data);
	}

	iio_trigger_notify_done(indio_dev->trig);
+1 −1
Original line number Diff line number Diff line
@@ -76,7 +76,7 @@ static irqreturn_t ad7476_trigger_handler(int irq, void *p)
	if (indio_dev->scan_timestamp)
		((s64 *)st->data)[1] = time_ns;

	iio_push_to_buffer(indio_dev->buffer, st->data);
	iio_push_to_buffers(indio_dev, st->data);
done:
	iio_trigger_notify_done(indio_dev->trig);

+1 −1
Original line number Diff line number Diff line
@@ -134,7 +134,7 @@ static irqreturn_t ad7887_trigger_handler(int irq, void *p)
		memcpy(st->data + indio_dev->scan_bytes - sizeof(s64),
		       &time_ns, sizeof(time_ns));

	iio_push_to_buffer(indio_dev->buffer, st->data);
	iio_push_to_buffers(indio_dev, st->data);
done:
	iio_trigger_notify_done(indio_dev->trig);

+1 −1
Original line number Diff line number Diff line
@@ -391,7 +391,7 @@ static irqreturn_t ad_sd_trigger_handler(int irq, void *p)
		break;
	}

	iio_push_to_buffer(indio_dev->buffer, (uint8_t *)data);
	iio_push_to_buffers(indio_dev, (uint8_t *)data);

	iio_trigger_notify_done(indio_dev->trig);
	sigma_delta->irq_dis = false;
Loading