iio:st_pressure: temperature triggered buffering
authorGregor Boirie <gregor.boirie@parrot.com>
Mon, 27 Jun 2016 10:38:55 +0000 (12:38 +0200)
committerJonathan Cameron <jic23@kernel.org>
Mon, 4 Jul 2016 17:11:52 +0000 (18:11 +0100)
Enable support for triggered buffering of temperature samples.

Signed-off-by: Gregor Boirie <gregor.boirie@parrot.com>
Tested-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Jonathan Cameron <jic23@kernel.org>
drivers/iio/pressure/st_pressure_core.c

index 2ab1056..ea8241f 100644 (file)
 #define ST_PRESS_LSB_PER_CELSIUS               480UL
 #define ST_PRESS_MILLI_CELSIUS_OFFSET          42500UL
 
-#define ST_PRESS_NUMBER_DATA_CHANNELS          1
-
 /* FULLSCALE */
 #define ST_PRESS_FS_AVL_1100MB                 1100
 #define ST_PRESS_FS_AVL_1260MB                 1260
@@ -222,7 +220,7 @@ static const struct iio_chan_spec st_press_1_channels[] = {
                .type = IIO_PRESSURE,
                .channel2 = IIO_NO_MOD,
                .address = ST_PRESS_1_OUT_XL_ADDR,
-               .scan_index = ST_SENSORS_SCAN_X,
+               .scan_index = 0,
                .scan_type = {
                        .sign = 'u',
                        .realbits = 24,
@@ -237,7 +235,7 @@ static const struct iio_chan_spec st_press_1_channels[] = {
                .type = IIO_TEMP,
                .channel2 = IIO_NO_MOD,
                .address = ST_TEMP_1_OUT_L_ADDR,
-               .scan_index = -1,
+               .scan_index = 1,
                .scan_type = {
                        .sign = 'u',
                        .realbits = 16,
@@ -250,7 +248,7 @@ static const struct iio_chan_spec st_press_1_channels[] = {
                        BIT(IIO_CHAN_INFO_OFFSET),
                .modified = 0,
        },
-       IIO_CHAN_SOFT_TIMESTAMP(1)
+       IIO_CHAN_SOFT_TIMESTAMP(2)
 };
 
 static const struct iio_chan_spec st_press_lps001wp_channels[] = {
@@ -258,7 +256,7 @@ static const struct iio_chan_spec st_press_lps001wp_channels[] = {
                .type = IIO_PRESSURE,
                .channel2 = IIO_NO_MOD,
                .address = ST_PRESS_LPS001WP_OUT_L_ADDR,
-               .scan_index = ST_SENSORS_SCAN_X,
+               .scan_index = 0,
                .scan_type = {
                        .sign = 'u',
                        .realbits = 16,
@@ -274,7 +272,7 @@ static const struct iio_chan_spec st_press_lps001wp_channels[] = {
                .type = IIO_TEMP,
                .channel2 = IIO_NO_MOD,
                .address = ST_TEMP_LPS001WP_OUT_L_ADDR,
-               .scan_index = -1,
+               .scan_index = 1,
                .scan_type = {
                        .sign = 'u',
                        .realbits = 16,
@@ -286,7 +284,7 @@ static const struct iio_chan_spec st_press_lps001wp_channels[] = {
                        BIT(IIO_CHAN_INFO_SCALE),
                .modified = 0,
        },
-       IIO_CHAN_SOFT_TIMESTAMP(1)
+       IIO_CHAN_SOFT_TIMESTAMP(2)
 };
 
 static const struct iio_chan_spec st_press_lps22hb_channels[] = {
@@ -642,7 +640,13 @@ int st_press_common_probe(struct iio_dev *indio_dev)
        if (err < 0)
                goto st_press_power_off;
 
-       press_data->num_data_channels = ST_PRESS_NUMBER_DATA_CHANNELS;
+       /*
+        * Skip timestamping channel while declaring available channels to
+        * common st_sensor layer. Look at st_sensors_get_buffer_element() to
+        * see how timestamps are explicitly pushed as last samples block
+        * element.
+        */
+       press_data->num_data_channels = press_data->sensor_settings->num_ch - 1;
        press_data->multiread_bit = press_data->sensor_settings->multi_read_bit;
        indio_dev->channels = press_data->sensor_settings->ch;
        indio_dev->num_channels = press_data->sensor_settings->num_ch;