iio: st_accel: support 8bit channel data
authorLinus Walleij <linus.walleij@linaro.org>
Tue, 19 May 2015 13:37:02 +0000 (15:37 +0200)
committerJonathan Cameron <jic23@kernel.org>
Sun, 7 Jun 2015 16:58:28 +0000 (17:58 +0100)
Some sensors like the LIS331DL only support 8bit data by a single
register per axis. These utilize the MSB byte. Make it possible
to register these apropriately.

A oneliner change is needed in the ST sensors core to handle 8bit
reads as this is the first supported 8bit sensor.

Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Acked-by: Denis Ciocca <denis.ciocca@st.com>
Signed-off-by: Jonathan Cameron <jic23@kernel.org>
drivers/iio/accel/st_accel_core.c
drivers/iio/common/st_sensors/st_sensors_core.c

index 58d1d13d552ae8cf336061f93603e4dd07b222ac..ad19fb4304df9a03d57ed1cd22880869de36b3d5 100644 (file)
 #define ST_ACCEL_4_IG1_EN_MASK                 0x08
 #define ST_ACCEL_4_MULTIREAD_BIT               true
 
+static const struct iio_chan_spec st_accel_8bit_channels[] = {
+       ST_SENSORS_LSM_CHANNELS(IIO_ACCEL,
+                       BIT(IIO_CHAN_INFO_RAW) | BIT(IIO_CHAN_INFO_SCALE),
+                       ST_SENSORS_SCAN_X, 1, IIO_MOD_X, 's', IIO_LE, 8, 8,
+                       ST_ACCEL_DEFAULT_OUT_X_L_ADDR+1),
+       ST_SENSORS_LSM_CHANNELS(IIO_ACCEL,
+                       BIT(IIO_CHAN_INFO_RAW) | BIT(IIO_CHAN_INFO_SCALE),
+                       ST_SENSORS_SCAN_Y, 1, IIO_MOD_Y, 's', IIO_LE, 8, 8,
+                       ST_ACCEL_DEFAULT_OUT_Y_L_ADDR+1),
+       ST_SENSORS_LSM_CHANNELS(IIO_ACCEL,
+                       BIT(IIO_CHAN_INFO_RAW) | BIT(IIO_CHAN_INFO_SCALE),
+                       ST_SENSORS_SCAN_Z, 1, IIO_MOD_Z, 's', IIO_LE, 8, 8,
+                       ST_ACCEL_DEFAULT_OUT_Z_L_ADDR+1),
+       IIO_CHAN_SOFT_TIMESTAMP(3)
+};
+
 static const struct iio_chan_spec st_accel_12bit_channels[] = {
        ST_SENSORS_LSM_CHANNELS(IIO_ACCEL,
                        BIT(IIO_CHAN_INFO_RAW) | BIT(IIO_CHAN_INFO_SCALE),
index 1255b157c71cbe80f44534bb9cfb0b08811bb8b9..bf4b13f9defc487dc3629acfb68f79a0f5bb4631 100644 (file)
@@ -433,7 +433,9 @@ static int st_sensors_read_axis_data(struct iio_dev *indio_dev,
        if (err < 0)
                goto st_sensors_free_memory;
 
-       if (byte_for_channel == 2)
+       if (byte_for_channel == 1)
+               *data = (s8)*outdata;
+       else if (byte_for_channel == 2)
                *data = (s16)get_unaligned_le16(outdata);
        else if (byte_for_channel == 3)
                *data = (s32)st_sensors_get_unaligned_le24(outdata);