iio: cros_ec: Add sign vector in core for backward compatibility
authorGwendal Grignou <gwendal@chromium.org>
Mon, 15 Jul 2019 23:14:51 +0000 (16:14 -0700)
committerJonathan Cameron <Jonathan.Cameron@huawei.com>
Sat, 27 Jul 2019 22:05:25 +0000 (23:05 +0100)
To allow cros_ec iio core library to be used with legacy device, add a
vector to rotate sensor data if necessary: legacy devices are not
reporting data in HTML5/Android sensor referential.

Check the data is not rotated on recent chromebooks that use the HTML5
standard to present sensor data.

Signed-off-by: Gwendal Grignou <gwendal@chromium.org>
Reviewed-by: Douglas Anderson <dianders@chromium.org>
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core.c
include/linux/iio/common/cros_ec_sensors_core.h

index d02660b..3b491cf 100644 (file)
@@ -101,6 +101,9 @@ int cros_ec_sensors_core_init(struct platform_device *pdev,
                }
                state->type = state->resp->info.type;
                state->loc = state->resp->info.location;
+
+               /* Set sign vector, only used for backward compatibility. */
+               memset(state->sign, 1, CROS_EC_SENSOR_MAX_AXIS);
        }
 
        return 0;
@@ -303,6 +306,7 @@ static int cros_ec_sensors_read_data_unsafe(struct iio_dev *indio_dev,
                if (ret < 0)
                        return ret;
 
+               *data *= st->sign[i];
                data++;
        }
 
index bb03a25..6f13c73 100644 (file)
@@ -66,7 +66,7 @@ struct cros_ec_sensors_core_state {
                s16 offset;
                u16 scale;
        } calib[CROS_EC_SENSOR_MAX_AXIS];
-
+       s8 sign[CROS_EC_SENSOR_MAX_AXIS];
        u8 samples[CROS_EC_SAMPLE_SIZE];
 
        int (*read_ec_sensors_data)(struct iio_dev *indio_dev,