linux-iio.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Vlad Dogaru <vlad.dogaru@intel.com>
To: linux-iio@vger.kernel.org
Cc: Vlad Dogaru <vlad.dogaru@intel.com>
Subject: [RFC PATCH 4/4] iio: illustrate the use of a valid sample channel
Date: Tue, 25 Nov 2014 14:48:07 +0200	[thread overview]
Message-ID: <1416919687-14271-5-git-send-email-vlad.dogaru@intel.com> (raw)
In-Reply-To: <1416919687-14271-1-git-send-email-vlad.dogaru@intel.com>

Signed-off-by: Vlad Dogaru <vlad.dogaru@intel.com>
---
 drivers/staging/iio/iio_simple_dummy.c        | 18 +++++++++++++---
 drivers/staging/iio/iio_simple_dummy_buffer.c | 31 +++++++++++++++++++++++++--
 2 files changed, 44 insertions(+), 5 deletions(-)

diff --git a/drivers/staging/iio/iio_simple_dummy.c b/drivers/staging/iio/iio_simple_dummy.c
index 2948900..0e2ea40 100644
--- a/drivers/staging/iio/iio_simple_dummy.c
+++ b/drivers/staging/iio/iio_simple_dummy.c
@@ -230,11 +230,22 @@ static const struct iio_chan_spec iio_dummy_channels[] = {
 			.shift = 0, /* zero shift */
 		},
 	},
+	{
+		.type = IIO_VALIDSAMPLE,
+		.info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
+		.scan_index = 4,
+		.scan_type = {
+			.sign = 'u',
+			.realbits = 16,
+			.storagebits = 16,
+			.shift = 0,
+		},
+	},
 	/*
-	 * Convenience macro for timestamps. 4 is the index in
+	 * Convenience macro for timestamps. 5 is the index in
 	 * the buffer.
 	 */
-	IIO_CHAN_SOFT_TIMESTAMP(4),
+	IIO_CHAN_SOFT_TIMESTAMP(5),
 	/* DAC channel out_voltage0_raw */
 	{
 		.type = IIO_VOLTAGE,
@@ -647,7 +658,8 @@ static int iio_dummy_probe(int index)
 	 * number of channels by 1.
 	 */
 	ret = iio_simple_dummy_configure_buffer(indio_dev,
-						iio_dummy_channels, 5);
+						iio_dummy_channels,
+						indio_dev->num_channels);
 	if (ret < 0)
 		goto error_unregister_events;
 
diff --git a/drivers/staging/iio/iio_simple_dummy_buffer.c b/drivers/staging/iio/iio_simple_dummy_buffer.c
index fd74f91..89ed87c 100644
--- a/drivers/staging/iio/iio_simple_dummy_buffer.c
+++ b/drivers/staging/iio/iio_simple_dummy_buffer.c
@@ -48,6 +48,8 @@ static irqreturn_t iio_simple_dummy_trigger_h(int irq, void *p)
 	struct iio_dev *indio_dev = pf->indio_dev;
 	int len = 0;
 	u16 *data;
+	int validsample_idx = -1;
+	u16 validsample = 0;
 
 	data = kmalloc(indio_dev->scan_bytes, GFP_KERNEL);
 	if (data == NULL)
@@ -78,12 +80,37 @@ static irqreturn_t iio_simple_dummy_trigger_h(int irq, void *p)
 		     i++, j++) {
 			j = find_next_bit(indio_dev->active_scan_mask,
 					  indio_dev->masklength, j);
-			/* random access read from the 'device' */
-			data[i] = fakedata[j];
+			if (indio_dev->channels[j].type == IIO_VALIDSAMPLE)
+				validsample_idx = i;
+			else
+				/* random access read from the 'device' */
+				data[i] = fakedata[j];
+			/*
+			 * Let's assume that the acceleration channel is
+			 * sampled twice as slow as the other ones.
+			 * Normally, you would check your device to
+			 * learn if data is available.
+			 */
+			if (indio_dev->channels[j].type == IIO_ACCEL) {
+				static bool accel_valid;
+				if (accel_valid) {
+					validsample |= 1 << i;
+					data[i] = fakedata[j];
+				} else {
+					data[i] = 0;
+				}
+				accel_valid = !accel_valid;
+			} else {
+				validsample |= 1 << i;
+				data[i] = fakedata[j];
+			}
 			len += 2;
 		}
 	}
 
+	if (validsample_idx != -1)
+		memcpy(data + validsample_idx, &validsample, 2);
+
 	iio_push_to_buffers_with_timestamp(indio_dev, data, iio_get_time_ns());
 
 	kfree(data);
-- 
1.9.1


  parent reply	other threads:[~2014-11-25 12:47 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-11-25 12:48 [PATCH 0/4] Add valid sample channel Vlad Dogaru
2014-11-25 12:48 ` [PATCH 1/4] iio: dummy: set scan_index for unbuffered channels Vlad Dogaru
2014-11-25 16:11   ` Daniel Baluta
2014-12-12 11:48     ` Jonathan Cameron
2014-11-25 12:48 ` [PATCH 2/4] iio: ensure scan index is unique at buffer register Vlad Dogaru
2014-12-06 20:19   ` Hartmut Knaack
2014-12-12 11:50     ` Jonathan Cameron
2014-11-25 12:48 ` [RFC PATCH 3/4] iio: add valid sample channel Vlad Dogaru
2014-11-25 12:48 ` Vlad Dogaru [this message]
2014-11-25 16:36 ` [PATCH 0/4] Add " Lars-Peter Clausen
2014-11-25 16:55   ` Daniel Baluta
2014-11-25 17:00     ` Lars-Peter Clausen
2014-11-25 17:29       ` Jonathan Cameron
2014-11-25 18:27         ` Octavian Purdila
2014-11-25 18:53           ` Lars-Peter Clausen
2014-11-26 12:58         ` Daniel Baluta
2014-12-01 20:06           ` Lars-Peter Clausen
2014-12-01 20:46             ` Daniel Baluta
2014-12-01 20:51               ` Lars-Peter Clausen
2014-12-01 21:03                 ` Daniel Baluta

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1416919687-14271-5-git-send-email-vlad.dogaru@intel.com \
    --to=vlad.dogaru@intel.com \
    --cc=linux-iio@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).