diff options
author | Jonathan Cameron <jic23@cam.ac.uk> | 2011-09-02 17:14:36 +0100 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2011-09-06 16:01:58 -0700 |
commit | 8310b86c3cd2f813bb9ed330447bcb2877b8328a (patch) | |
tree | 6fd9a7b903b705b049d90e1a18395c304c388b46 | |
parent | a37b549ec61d892aa99744750e97d994bc779cb6 (diff) |
staging:iio:scan element types: introduce endian description to the data format.
If not set in chan_spec, cpu endianness used.
Signed-off-by: Jonathan Cameron <jic23@cam.ac.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-rw-r--r-- | drivers/staging/iio/iio.h | 8 | ||||
-rw-r--r-- | drivers/staging/iio/industrialio-ring.c | 15 |
2 files changed, 22 insertions, 1 deletions
diff --git a/drivers/staging/iio/iio.h b/drivers/staging/iio/iio.h index f42387052ce5..daaea94a5e6d 100644 --- a/drivers/staging/iio/iio.h +++ b/drivers/staging/iio/iio.h @@ -80,6 +80,12 @@ enum iio_chan_info_enum { IIO_CHAN_INFO_QUADRATURE_CORRECTION_RAW_SEPARATE, }; +enum iio_endian { + IIO_CPU, + IIO_BE, + IIO_LE, +}; + /** * struct iio_chan_spec - specification of a single channel * @type: What type of measurement is the channel making. @@ -95,6 +101,7 @@ enum iio_chan_info_enum { * storage_bits: Realbits + padding * shift: Shift right by this before masking out * realbits. + * endianness: little or big endian * @info_mask: What information is to be exported about this channel. * This includes calibbias, scale etc. * @event_mask: What events can this channel produce. @@ -123,6 +130,7 @@ struct iio_chan_spec { u8 realbits; u8 storagebits; u8 shift; + enum iio_endian endianness; } scan_type; long info_mask; long event_mask; diff --git a/drivers/staging/iio/industrialio-ring.c b/drivers/staging/iio/industrialio-ring.c index e844246bc32a..23967d491925 100644 --- a/drivers/staging/iio/industrialio-ring.c +++ b/drivers/staging/iio/industrialio-ring.c @@ -25,6 +25,10 @@ #include "sysfs.h" #include "ring_generic.h" +static const char * const iio_endian_prefix[] = { + [IIO_BE] = "be", + [IIO_LE] = "le", +}; /** * iio_ring_read_first_n_outer() - chrdev read for ring buffer access @@ -96,7 +100,16 @@ static ssize_t iio_show_fixed_type(struct device *dev, char *buf) { struct iio_dev_attr *this_attr = to_iio_dev_attr(attr); - return sprintf(buf, "%c%d/%d>>%u\n", + u8 type = this_attr->c->scan_type.endianness; + + if (type == IIO_CPU) { + if (__LITTLE_ENDIAN) + type = IIO_LE; + else + type = IIO_BE; + } + 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, this_attr->c->scan_type.storagebits, |