tools: iio: fix mask for 32 bit sensor data
authorIrina Tirdea <irina.tirdea@intel.com>
Fri, 24 Jul 2015 13:28:05 +0000 (16:28 +0300)
committerJonathan Cameron <jic23@kernel.org>
Sun, 2 Aug 2015 17:38:22 +0000 (18:38 +0100)
When the the sensor data uses 32 bits out of 32, generic_buffer prints
the value 0 for all data read.

In this case, the mask is shifted 32 bits, which is beyond the size of
an integer. This will lead to the mask always being 0. Before printing,
the mask is applied to the raw value, thus generating a final value of 0.

Fix the mask by shifting a 64 bit value instead of an integer.

Signed-off-by: Irina Tirdea <irina.tirdea@intel.com>
Acked-by: Hartmut Knaack <knaack.h@gmx.de>
Signed-off-by: Jonathan Cameron <jic23@kernel.org>
tools/iio/iio_utils.c

index 1dcdf03955cb81b26b4fd156472fa9380a4803bb..a95270f3335376ca46f494ba8190a9343e8bffea 100644 (file)
@@ -168,7 +168,7 @@ int iioutils_get_type(unsigned *is_signed, unsigned *bytes, unsigned *bits_used,
                        if (*bits_used == 64)
                                *mask = ~0;
                        else
-                               *mask = (1 << *bits_used) - 1;
+                               *mask = (1ULL << *bits_used) - 1;
 
                        *is_signed = (signchar == 's');
                        if (fclose(sysfsfp)) {