diff options
author | Yuval Peress <peress@chromium.org> | 2019-05-20 21:10:30 -0600 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2019-05-23 02:14:20 -0700 |
commit | f25a4cf2477a48fccce07047aaa3bb564c46e802 (patch) | |
tree | a6574e46f47e894d02342e32c3def569c0a595c9 | |
parent | 57aa1891be676b51fb43045a664f476d676948f1 (diff) | |
download | chrome-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.c | 25 | ||||
-rw-r--r-- | driver/accelgyro_bmi160.c | 2 | ||||
-rw-r--r-- | driver/als_tcs3400.c | 6 | ||||
-rw-r--r-- | include/motion_sense.h | 11 |
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; |