staging:iio:scan element types: introduce endian description to the data format.
authorJonathan Cameron <jic23@cam.ac.uk>
Fri, 2 Sep 2011 16:14:36 +0000 (17:14 +0100)
committerGreg Kroah-Hartman <gregkh@suse.de>
Tue, 6 Sep 2011 23:01:58 +0000 (16:01 -0700)
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>
drivers/staging/iio/iio.h
drivers/staging/iio/industrialio-ring.c

index f42387052ce50adf3264c81701e762661eaa3b15..daaea94a5e6d26ec5e93425f7991794b593a4fe3 100644 (file)
@@ -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;
index e844246bc32ad87c81e94cfa2289c08b98bc9cfc..23967d491925123c59ae4d6bc176ebeeb0ddd6cf 100644 (file)
 #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,