From: Jonathan Cameron <jic23@kernel.org>
To: Lars-Peter Clausen <lars@metafoo.de>
Cc: linux-iio@vger.kernel.org,
Oleksandr Kravchenko <o.v.kravchenko@globallogic.com>,
Josh Wu <josh.wu@atmel.com>,
Denis Ciocca <denis.ciocca@gmail.com>,
Manuel Stahl <manuel.stahl@iis.fraunhofer.de>,
Ge Gao <ggao@invensense.com>, Peter Meerwald <pmeerw@pmeerw.net>,
Jacek Anaszewski <j.anaszewski@samsung.com>,
Fabio Estevam <fabio.estevam@freescale.com>,
Marek Vasut <marex@denx.de>
Subject: Re: [PATCH 04/27] iio: Add iio_push_buffers_with_timestamp() helper
Date: Mon, 16 Sep 2013 08:52:26 +0100 [thread overview]
Message-ID: <5236B8BA.5050402@kernel.org> (raw)
In-Reply-To: <1379263880-18405-4-git-send-email-lars@metafoo.de>
On 15/09/13 17:50, Lars-Peter Clausen wrote:
> Drivers using software buffers often store the timestamp in their data buffer
> before calling iio_push_to_buffers() with that data buffer. Storing the
> timestamp in the buffer usually involves some ugly pointer arithmetic. This
> patch adds a new helper function called iio_push_buffers_with_timestamp() which
> is similar to iio_push_to_buffers but takes an additional timestamp parameter.
> The function will help to hide to uglyness in one central place instead of
> exposing it in every driver. If timestamps are enabled for the IIO device
> iio_push_buffers_with_timestamp() will store the timestamp as the last element
> in buffer, before passing the buffer on to iio_push_buffers(). The buffer needs
> large enough to hold the timestamp in this case. If timestamps are disabled
> iio_push_buffers_with_timestamp() will behave just like iio_push_buffers().
>
> Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
> Cc: Oleksandr Kravchenko <o.v.kravchenko@globallogic.com>
> Cc: Josh Wu <josh.wu@atmel.com>
> Cc: Denis Ciocca <denis.ciocca@gmail.com>
> Cc: Manuel Stahl <manuel.stahl@iis.fraunhofer.de>
> Cc: Ge Gao <ggao@invensense.com>
> Cc: Peter Meerwald <pmeerw@pmeerw.net>
> Cc: Peter Meerwald <pmeerw@pmeerw.net>
> Cc: Jacek Anaszewski <j.anaszewski@samsung.com>
> Cc: Fabio Estevam <fabio.estevam@freescale.com>
> Cc: Marek Vasut <marex@denx.de>
Interesting. Whilst this obviously results in the removal of a lot of
repeated code, I am nervous about introducing the 'hidden' requirement
that the data buffer passed in must be bigger than is 'apparently' used
in the code calling this. I'm not sure what the right answer is though.
> ---
> include/linux/iio/buffer.h | 27 ++++++++++++++++++++++++++-
> 1 file changed, 26 insertions(+), 1 deletion(-)
>
> diff --git a/include/linux/iio/buffer.h b/include/linux/iio/buffer.h
> index e5507e9..1ebc382 100644
> --- a/include/linux/iio/buffer.h
> +++ b/include/linux/iio/buffer.h
> @@ -116,12 +116,37 @@ int iio_scan_mask_set(struct iio_dev *indio_dev,
> struct iio_buffer *buffer, int bit);
>
> /**
> - * iio_push_to_buffers() - push to a registered buffer.
> + * iio_push_to_buffers_with_timestamp() - push to a registered buffer.
> * @indio_dev: iio_dev structure for device.
> * @data: Full scan.
> */
> int iio_push_to_buffers(struct iio_dev *indio_dev, const void *data);
>
> +/*
> + * iio_push_to_buffers_with_timestamp() - push data and timestamp to buffers
> + * @indio_dev: iio_dev structure for device.
> + * @data: sample data
> + * @timestamp: timestamp for the sample data
> + *
> + * Pushes data to the IIO device's buffers. If timestamps are enabled for the
> + * device the function will store the supplied timestamp as the last element in
> + * the sample data buffer before pushing it to the device buffers. The sample
> + * data buffer needs to be large enough to hold the additional timestamp
> + * (usually the buffer should be indio->scan_bytes bytes large).
> + *
> + * Returns 0 on success, a negative error code otherwise.
> + */
> +static inline int iio_push_to_buffers_with_timestamp(struct iio_dev *indio_dev,
> + void *data, int64_t timestamp)
> +{
> + if (indio_dev->scan_timestamp) {
> + size_t ts_offset = indio_dev->scan_bytes / sizeof(int64_t) - 1;
> + ((int64_t *)data)[ts_offset] = timestamp;
> + }
> +
> + return iio_push_to_buffers(indio_dev, data);
> +}
> +
> int iio_update_demux(struct iio_dev *indio_dev);
>
> /**
>
next prev parent reply other threads:[~2013-09-16 7:52 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-09-15 16:50 [PATCH 01/27] iio: iio_push_to_buffers(): Change type of 'data' to const void * Lars-Peter Clausen
2013-09-15 16:50 ` [PATCH 02/27] iio: Remove unnecessary casts for iio_push_to_buffers() Lars-Peter Clausen
2013-09-15 18:05 ` Jonathan Cameron
2013-09-15 16:50 ` [PATCH 03/27] staging:iio: " Lars-Peter Clausen
2013-09-15 18:06 ` Jonathan Cameron
2013-09-15 16:50 ` [PATCH 04/27] iio: Add iio_push_buffers_with_timestamp() helper Lars-Peter Clausen
2013-09-15 17:44 ` Peter Meerwald
2013-09-16 7:52 ` Jonathan Cameron [this message]
2013-09-16 7:58 ` Peter Meerwald
2013-09-16 8:19 ` Lars-Peter Clausen
2013-09-16 18:35 ` Jonathan Cameron
2013-09-16 8:19 ` Lars-Peter Clausen
2013-09-16 18:37 ` Jonathan Cameron
2013-09-16 20:42 ` Lars-Peter Clausen
2013-09-15 16:50 ` [PATCH 05/27] iio:bma180: Use iio_push_buffers_with_timestamp() Lars-Peter Clausen
2013-09-15 16:50 ` [PATCH 06/27] iio:ad7266: Use iio_push_to_buffers_with_timestamp() Lars-Peter Clausen
2013-09-15 16:51 ` [PATCH 07/27] iio:ad7298: " Lars-Peter Clausen
2013-09-15 16:51 ` [PATCH 08/27] iio:ad7476: " Lars-Peter Clausen
2013-09-15 16:51 ` [PATCH 09/27] iio:ad7887: " Lars-Peter Clausen
2013-09-15 16:51 ` [PATCH 10/27] iio:ad7923: " Lars-Peter Clausen
2013-09-15 16:51 ` [PATCH 11/27] iio:ad_sigma_delta: " Lars-Peter Clausen
2013-09-15 16:51 ` [PATCH 12/27] iio:at91_adc: " Lars-Peter Clausen
2013-09-15 16:51 ` [PATCH 13/27] iio:max1363: " Lars-Peter Clausen
2013-09-15 16:51 ` [PATCH 14/27] iio:st_sensors: " Lars-Peter Clausen
2013-09-15 16:51 ` [PATCH 15/27] iio:itg3200: " Lars-Peter Clausen
2013-09-15 16:51 ` [PATCH 16/27] iio:adis16400: " Lars-Peter Clausen
2013-09-15 16:51 ` [PATCH 17/27] iio:adis_lib: " Lars-Peter Clausen
2013-09-15 16:51 ` [PATCH 18/27] iio:mpu6050: " Lars-Peter Clausen
2013-09-15 16:51 ` [PATCH 19/27] iio:adjd_s311: " Lars-Peter Clausen
2013-09-15 16:51 ` [PATCH 20/27] iio:tcs3472: " Lars-Peter Clausen
2013-09-15 16:51 ` [PATCH 21/27] iio:gp2ap020a00f: " Lars-Peter Clausen
2013-09-15 16:51 ` [PATCH 22/27] staging:iio:lis3l02dq: " Lars-Peter Clausen
2013-09-15 16:51 ` [PATCH 23/27] staging:iio:ad7606: " Lars-Peter Clausen
2013-09-15 16:51 ` [PATCH 24/27] staging:iio:ad799x: " Lars-Peter Clausen
2013-09-15 16:51 ` [PATCH 25/27] staging:iio:mxs-lradc: " Lars-Peter Clausen
2013-09-16 13:53 ` Marek Vasut
2013-09-16 16:54 ` Lars-Peter Clausen
2013-09-16 17:08 ` Marek Vasut
2013-09-15 16:51 ` [PATCH 26/27] staging:iio:dummy: " Lars-Peter Clausen
2013-09-15 16:51 ` [PATCH 27/27] staging:iio:ade7758: " Lars-Peter Clausen
2013-09-15 18:04 ` [PATCH 01/27] iio: iio_push_to_buffers(): Change type of 'data' to const void * Jonathan Cameron
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=5236B8BA.5050402@kernel.org \
--to=jic23@kernel.org \
--cc=denis.ciocca@gmail.com \
--cc=fabio.estevam@freescale.com \
--cc=ggao@invensense.com \
--cc=j.anaszewski@samsung.com \
--cc=josh.wu@atmel.com \
--cc=lars@metafoo.de \
--cc=linux-iio@vger.kernel.org \
--cc=manuel.stahl@iis.fraunhofer.de \
--cc=marex@denx.de \
--cc=o.v.kravchenko@globallogic.com \
--cc=pmeerw@pmeerw.net \
/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).