mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Peter Meerwald <pmeerw@pmeerw.net>
To: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
Cc: jic23@kernel.org, linux-iio@vger.kernel.org,
	linux-kernel@vger.kernel.org
Subject: Re: [Patch v5 3/6] IIO: core: Modify scan element type
Date: Tue, 15 Apr 2014 00:33:12 +0200 (CEST)	[thread overview]
Message-ID: <alpine.DEB.2.01.1404150024030.11665@pmeerw.net> (raw)
In-Reply-To: <1397513467-21397-4-git-send-email-srinivas.pandruvada@linux.intel.com>

> The current scan element type uses the following format:
>   [be|le]:[s|u]bits/storagebits[>>shift].
> To specify multiple elements in this type, added a repeat value.
> So new format is:
>   [be|le]:[s|u]bits/storagebits{X[repeat]}[>>shift].
> Here X is specifying how may times, real/storage bits are repeating.
> 
> When X is value is 0 or 1, then repeat value is not used in the format,
> and it will be same as existing format.

minor comments inline

> ---
>  drivers/iio/industrialio-buffer.c | 41 +++++++++++++++++++++++++++++++++------
>  include/linux/iio/iio.h           |  9 +++++++++
>  2 files changed, 44 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/iio/industrialio-buffer.c b/drivers/iio/industrialio-buffer.c
> index e108f2a..aa90c68 100644
> --- a/drivers/iio/industrialio-buffer.c
> +++ b/drivers/iio/industrialio-buffer.c
> @@ -150,7 +150,16 @@ static ssize_t iio_show_fixed_type(struct device *dev,
>  		type = IIO_BE;
>  #endif
>  	}
> -	return sprintf(buf, "%s:%c%d/%d>>%u\n",
> +	if (this_attr->c->scan_type.repeat > 1)
> +		return sprintf(buf, "%s:%c%d/%d{%d[repeat]}>>%u\n",
> +		       iio_endian_prefix[type],
> +		       this_attr->c->scan_type.sign,
> +		       this_attr->c->scan_type.realbits,
> +		       this_attr->c->scan_type.storagebits,
> +		       this_attr->c->scan_type.repeat,
> +		       this_attr->c->scan_type.shift);
> +		else
> +			return sprintf(buf, "%s:%c%d/%d>>%u\n",
>  		       iio_endian_prefix[type],
>  		       this_attr->c->scan_type.sign,
>  		       this_attr->c->scan_type.realbits,
> @@ -474,14 +483,22 @@ static int iio_compute_scan_bytes(struct iio_dev *indio_dev,
>  	for_each_set_bit(i, mask,
>  			 indio_dev->masklength) {
>  		ch = iio_find_channel_from_si(indio_dev, i);
> -		length = ch->scan_type.storagebits / 8;
> +		if (ch->scan_type.repeat > 1)
> +			length = ch->scan_type.storagebits / 8 *
> +				ch->scan_type.repeat;

so storagebits should be a multiple of 8 and != 0;
we cannot have repeated groups of say 4 bits

> +		else
> +			length = ch->scan_type.storagebits / 8;
>  		bytes = ALIGN(bytes, length);
>  		bytes += length;
>  	}
>  	if (timestamp) {
>  		ch = iio_find_channel_from_si(indio_dev,
>  					      indio_dev->scan_index_timestamp);
> -		length = ch->scan_type.storagebits / 8;
> +		if (ch->scan_type.repeat > 1)
> +			length = ch->scan_type.storagebits / 8 *
> +				ch->scan_type.repeat;
> +		else
> +			length = ch->scan_type.storagebits / 8;
>  		bytes = ALIGN(bytes, length);
>  		bytes += length;
>  	}
> @@ -957,7 +974,11 @@ static int iio_buffer_update_demux(struct iio_dev *indio_dev,
>  					       indio_dev->masklength,
>  					       in_ind + 1);
>  			ch = iio_find_channel_from_si(indio_dev, in_ind);
> -			length = ch->scan_type.storagebits/8;
> +			if (ch->scan_type.repeat > 1)
> +				length = ch->scan_type.storagebits / 8 *
> +					ch->scan_type.repeat;
> +			else
> +				length = ch->scan_type.storagebits / 8;
>  			/* Make sure we are aligned */
>  			in_loc += length;
>  			if (in_loc % length)
> @@ -969,7 +990,11 @@ static int iio_buffer_update_demux(struct iio_dev *indio_dev,
>  			goto error_clear_mux_table;
>  		}
>  		ch = iio_find_channel_from_si(indio_dev, in_ind);
> -		length = ch->scan_type.storagebits/8;
> +		if (ch->scan_type.repeat > 1)
> +			length = ch->scan_type.storagebits / 8 *
> +				ch->scan_type.repeat;
> +		else
> +			length = ch->scan_type.storagebits / 8;
>  		if (out_loc % length)
>  			out_loc += length - out_loc % length;
>  		if (in_loc % length)
> @@ -990,7 +1015,11 @@ static int iio_buffer_update_demux(struct iio_dev *indio_dev,
>  		}
>  		ch = iio_find_channel_from_si(indio_dev,
>  			indio_dev->scan_index_timestamp);
> -		length = ch->scan_type.storagebits/8;
> +		if (ch->scan_type.repeat > 1)
> +			length = ch->scan_type.storagebits / 8 *
> +				ch->scan_type.repeat;
> +		else
> +			length = ch->scan_type.storagebits / 8;
>  		if (out_loc % length)
>  			out_loc += length - out_loc % length;
>  		if (in_loc % length)
> diff --git a/include/linux/iio/iio.h b/include/linux/iio/iio.h
> index 5629c92..324ae00 100644
> --- a/include/linux/iio/iio.h
> +++ b/include/linux/iio/iio.h
> @@ -177,6 +177,14 @@ struct iio_event_spec {
>   *			shift:		Shift right by this before masking out
>   *					realbits.
>   *			endianness:	little or big endian
> + *			repeat:		No. of times real/storage bits repeats.

I'd rather spell out 'Number'

> + *					By default, when repeat is set to 0
> + *					repeat value is treated as 1. When
> + *					repeat value is 0 or 1, then there is
> + *					no change in existing scan element

'no change in existing scan element' -- this makes sense only now

maybe: 'When the repeat element is more than 1, then the type element in 
sysfs will show a repeat value. Otherwise, the number of repetitions is
omitted.'

> + *					type, in sysfs. When set to more than

no comma before 'in sysfs.'


> + *					1, then the type element in sysfs will
> + *					show repeat value.
>   * @info_mask_separate: What information is to be exported that is specific to
>   *			this channel.
>   * @info_mask_shared_by_type: What information is to be exported that is shared
> @@ -219,6 +227,7 @@ struct iio_chan_spec {
>  		u8	realbits;
>  		u8	storagebits;
>  		u8	shift;
> +		u8	repeat;
>  		enum iio_endian endianness;
>  	} scan_type;
>  	long			info_mask_separate;
> 

-- 

Peter Meerwald
+43-664-2444418 (mobile)

  reply	other threads:[~2014-04-14 22:33 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-04-14 22:11 [Patch v5 0/6] Quaternion support Srinivas Pandruvada
2014-04-14 22:11 ` [Patch v5 1/6] devres: introduce API "devm_kmemdup Srinivas Pandruvada
2014-04-14 22:11 ` [Patch v5 2/6] IIO: core: Introduce read_raw_multi Srinivas Pandruvada
2014-04-14 22:19   ` Peter Meerwald
2014-04-14 22:11 ` [Patch v5 3/6] IIO: core: Modify scan element type Srinivas Pandruvada
2014-04-14 22:33   ` Peter Meerwald [this message]
2014-04-15  5:52     ` Jonathan Cameron
2014-04-14 22:11 ` [Patch v5 4/6] IIO: core: Add quaternion modifier Srinivas Pandruvada
2014-04-14 22:11 ` [Patch v5 5/6] iio: hid-sensors: Added device rotation support Srinivas Pandruvada
2014-04-14 22:11 ` [Patch v5 6/6] iio: Added ABI description for quaternion Srinivas Pandruvada

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=alpine.DEB.2.01.1404150024030.11665@pmeerw.net \
    --to=pmeerw@pmeerw.net \
    --cc=jic23@kernel.org \
    --cc=linux-iio@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=srinivas.pandruvada@linux.intel.com \
    /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

all inboxes | Powered by JetHome®