summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYuval Peress <peress@chromium.org>2019-05-20 21:10:30 -0600
committerchrome-bot <chrome-bot@chromium.org>2019-05-23 02:14:20 -0700
commitf25a4cf2477a48fccce07047aaa3bb564c46e802 (patch)
treea6574e46f47e894d02342e32c3def569c0a595c9
parent57aa1891be676b51fb43045a664f476d676948f1 (diff)
downloadchrome-ec-f25a4cf2477a48fccce07047aaa3bb564c46e802.tar.gz
motionsense: Convert in_spoof_mode to a more generic flags
BUG=b:129159505 BRANCH=arcada TEST=I ran `make buildall` since this change isn't used yet it doesn't affect run-time behavior. Change-Id: I01857d679b800f9b53762c659ebd9a018cbf16db Signed-off-by: Yuval Peress <peress@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/1612251 Legacy-Commit-Queue: Commit Bot <commit-bot@chromium.org>
-rw-r--r--common/motion_sense.c25
-rw-r--r--driver/accelgyro_bmi160.c2
-rw-r--r--driver/als_tcs3400.c6
-rw-r--r--include/motion_sense.h11
4 files changed, 26 insertions, 18 deletions
diff --git a/common/motion_sense.c b/common/motion_sense.c
index 3ab78cf7b4..c2df8f080e 100644
--- a/common/motion_sense.c
+++ b/common/motion_sense.c
@@ -434,9 +434,6 @@ static inline int motion_sense_init(struct motion_sensor_t *sensor)
{
int ret, cnt = 3;
- /* By default, report the actual sensor values. */
- sensor->in_spoof_mode = 0;
-
/* Initialize accelerometers. */
do {
ret = sensor->drv->init(sensor);
@@ -695,7 +692,7 @@ static int motion_sense_read(struct motion_sensor_t *sensor)
* If the sensor is in spoof mode, the readings are already present in
* spoof_xyz.
*/
- if (sensor->in_spoof_mode)
+ if (sensor->flags & MOTIONSENSE_FLAG_IN_SPOOF_MODE)
return EC_SUCCESS;
#endif /* defined(CONFIG_ACCEL_SPOOF_MODE) */
@@ -758,7 +755,8 @@ static int motion_sense_process(struct motion_sensor_t *sensor,
vector.flags = 0;
vector.sensor_num = sensor - motion_sensors;
#ifdef CONFIG_ACCEL_SPOOF_MODE
- if (sensor->in_spoof_mode)
+ if (sensor->flags &
+ MOTIONSENSE_FLAG_IN_SPOOF_MODE)
v = sensor->spoof_xyz;
#endif /* defined(CONFIG_ACCEL_SPOOF_MODE) */
vector.data[X] = v[X];
@@ -1480,7 +1478,7 @@ static int host_cmd_motion_sense(struct host_cmd_handler_args *args)
switch (in->spoof.spoof_enable) {
case MOTIONSENSE_SPOOF_MODE_DISABLE:
/* Disable spoof mode. */
- sensor->in_spoof_mode = 0;
+ sensor->flags &= ~MOTIONSENSE_FLAG_IN_SPOOF_MODE;
break;
case MOTIONSENSE_SPOOF_MODE_CUSTOM:
@@ -1490,7 +1488,7 @@ static int host_cmd_motion_sense(struct host_cmd_handler_args *args)
sensor->spoof_xyz[X] = (int)in->spoof.components[X];
sensor->spoof_xyz[Y] = (int)in->spoof.components[Y];
sensor->spoof_xyz[Z] = (int)in->spoof.components[Z];
- sensor->in_spoof_mode = 1;
+ sensor->flags |= MOTIONSENSE_FLAG_IN_SPOOF_MODE;
break;
case MOTIONSENSE_SPOOF_MODE_LOCK_CURRENT:
@@ -1501,12 +1499,13 @@ static int host_cmd_motion_sense(struct host_cmd_handler_args *args)
sensor->spoof_xyz[X] = sensor->raw_xyz[X];
sensor->spoof_xyz[Y] = sensor->raw_xyz[Y];
sensor->spoof_xyz[Z] = sensor->raw_xyz[Z];
- sensor->in_spoof_mode = 1;
+ sensor->flags |= MOTIONSENSE_FLAG_IN_SPOOF_MODE;
break;
case MOTIONSENSE_SPOOF_MODE_QUERY:
/* Querying the spoof status of the sensor. */
- out->spoof.ret = sensor->in_spoof_mode;
+ out->spoof.ret = !!(sensor->flags &
+ MOTIONSENSE_FLAG_IN_SPOOF_MODE);
args->response_size = sizeof(out->spoof);
break;
@@ -1843,7 +1842,8 @@ DECLARE_CONSOLE_COMMAND(fiforead, motion_sense_read_fifo,
static void print_spoof_mode_status(int id)
{
CPRINTS("Sensor %d spoof mode is %s. <%d, %d, %d>", id,
- motion_sensors[id].in_spoof_mode ? "enabled" : "disabled",
+ (motion_sensors[id].flags & MOTIONSENSE_FLAG_IN_SPOOF_MODE)
+ ? "enabled" : "disabled",
motion_sensors[id].spoof_xyz[X],
motion_sensors[id].spoof_xyz[Y],
motion_sensors[id].spoof_xyz[Z]);
@@ -1895,7 +1895,10 @@ static int command_accelspoof(int argc, char **argv)
return EC_ERROR_PARAM_COUNT;
}
}
- s->in_spoof_mode = enable;
+ if (enable)
+ s->flags |= MOTIONSENSE_FLAG_IN_SPOOF_MODE;
+ else
+ s->flags &= ~MOTIONSENSE_FLAG_IN_SPOOF_MODE;
print_spoof_mode_status(id);
}
diff --git a/driver/accelgyro_bmi160.c b/driver/accelgyro_bmi160.c
index 891a1a4222..933838251f 100644
--- a/driver/accelgyro_bmi160.c
+++ b/driver/accelgyro_bmi160.c
@@ -835,7 +835,7 @@ static int bmi160_decode_header(struct motion_sensor_t *accel,
vector.flags = 0;
normalize(s, v, *bp);
#ifdef CONFIG_ACCEL_SPOOF_MODE
- if (s->in_spoof_mode)
+ if (s->flags & MOTIONSENSE_FLAG_IN_SPOOF_MODE)
v = s->spoof_xyz;
#endif /* defined(CONFIG_ACCEL_SPOOF_MODE) */
vector.data[X] = v[X];
diff --git a/driver/als_tcs3400.c b/driver/als_tcs3400.c
index 213e5424fd..9e7251f711 100644
--- a/driver/als_tcs3400.c
+++ b/driver/als_tcs3400.c
@@ -117,7 +117,7 @@ static int tcs3400_post_events(struct motion_sensor_t *s, uint32_t last_ts)
drv_data->last_value = data;
vector.flags = 0;
#ifdef CONFIG_ACCEL_SPOOF_MODE
- if (s->in_spoof_mode) {
+ if (s->flags & MOTIONSENSE_FLAG_IN_SPOOF_MODE) {
for (i = 0; i < 3; i++)
vector.data[i] = v[i] = s->spoof_xyz[i];
goto skip_clear_vector_load;
@@ -139,7 +139,7 @@ skip_clear_vector_load:
}
#ifdef CONFIG_ACCEL_SPOOF_MODE
- if (s->in_spoof_mode) {
+ if (s->flags & MOTIONSENSE_FLAG_IN_SPOOF_MODE) {
rgb_data[X] = s->spoof_xyz[X];
rgb_data[Y] = s->spoof_xyz[Y];
rgb_data[Z] = s->spoof_xyz[Z];
@@ -177,7 +177,7 @@ skip_rgb_load:
v = rgb_s->raw_xyz;
vector.flags = 0;
#ifdef CONFIG_ACCEL_SPOOF_MODE
- if (rgb_s->in_spoof_mode) {
+ if (rgb_s->flags & MOTIONSENSE_FLAG_IN_SPOOF_MODE) {
for (i = 0; i < 3; i++)
vector.data[i] = v[i] = rgb_s->spoof_xyz[i];
goto skip_vector_load;
diff --git a/include/motion_sense.h b/include/motion_sense.h
index b5fc36dfe4..25e4e2fc7c 100644
--- a/include/motion_sense.h
+++ b/include/motion_sense.h
@@ -107,6 +107,12 @@ struct motion_data_t {
unsigned int ec_rate;
};
+/*
+ * When set, spoof mode will allow the EC to report arbitrary values for any of
+ * the components.
+ */
+#define MOTIONSENSE_FLAG_IN_SPOOF_MODE BIT(1)
+
struct motion_sensor_t {
/* RO fields */
uint32_t active_mask;
@@ -125,10 +131,9 @@ struct motion_sensor_t {
uint8_t addr;
/*
- * When non-zero, spoof mode will allow the EC to report arbitrary
- * values for any of the components.
+ * Various flags, see MOTIONSENSE_FLAG_*
*/
- uint8_t in_spoof_mode;
+ uint32_t flags;
const mat33_fp_t *rot_standard_ref;