iio:core: add a callback to allow drivers to provide _available attributes
authorJonathan Cameron <jic23@kernel.org>
Tue, 8 Nov 2016 11:58:51 +0000 (12:58 +0100)
committerJonathan Cameron <jic23@kernel.org>
Sun, 13 Nov 2016 11:40:25 +0000 (11:40 +0000)
commit51239600074bc9979b0a0e83b72c726d7dcc3132
treed479409dea217cd88b58fbb409cd861a85abb820
parent2167769aed61782b7b966b9dfaac8e357fa5c516
iio:core: add a callback to allow drivers to provide _available attributes

A large number of attributes can only take a limited range of values.
Currently in IIO this is handled by directly registering additional
*_available attributes thus providing this information to userspace.

It is desirable to provide this information via the core for much the same
reason this was done for the actual channel information attributes in the
first place.  If it isn't there, then it can only really be accessed from
userspace.  Other in kernel IIO consumers have no access to what valid
parameters are.

Two forms are currently supported:
* list of values in one particular IIO_VAL_* format.
e.g. 1.300000 1.500000 1.730000
* range specification with a step size:
e.g. [1.000000 0.500000 2.500000]
equivalent to 1.000000 1.5000000 2.000000 2.500000

An addition set of masks are used to allow different sharing rules for the
*_available attributes generated.

This allows for example:

in_accel_x_offset
in_accel_y_offset
in_accel_offset_available.

We could have gone with having a specification for each and every
info_mask element but that would have meant changing the existing userspace
ABI.  This approach does not.

Signed-off-by: Jonathan Cameron <jic23@kernel.org>
[forward ported, added some docs and fixed buffer overflows /peda]
Acked-by: Daniel Baluta <daniel.baluta@intel.com>
Signed-off-by: Peter Rosin <peda@axentia.se>
Signed-off-by: Jonathan Cameron <jic23@kernel.org>
drivers/iio/industrialio-core.c
include/linux/iio/iio.h
include/linux/iio/types.h