diff options
author | Gwendal Grignou <gwendal@chromium.org> | 2015-11-18 13:39:44 -0800 |
---|---|---|
committer | ChromeOS Commit Bot <chromeos-commit-bot@chromium.org> | 2016-11-12 19:24:38 +0000 |
commit | 5c8dff922b3f7fe35df9343f6e8c5d5ba7ece8fc (patch) | |
tree | 2f5443f603acba24877b6a4ca5131f2f49306b46 | |
parent | 21aab34e529726e3e7cd4c630420e94f59d125f3 (diff) | |
download | chrome-ec-5c8dff922b3f7fe35df9343f6e8c5d5ba7ece8fc.tar.gz |
UPSTREAM: motion: At shutdown, access sensors only if initialized.
When sensor_shutdown() is called, the sensors may already been powered
off, or will be soon.
In that case, do not attempts to access them.
Check their state before setting range or disabling activities.
BRANCH=smau, cyan
BUG=chromium:55796, b:27849483
TEST=compile
Change-Id: I60640b120a23f9aab393a93c4c67ef17222ced4e
Signed-off-by: Gwendal Grignou <gwendal@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/314382
Reviewed-by: Alec Berg <alecaberg@chromium.org>
(cherry picked from commit cef0fdb90e17fae3fd9f035bb6ada17e2833369e)
Signed-off-by: Gwendal Grignou <gwendal@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/359403
Reviewed-on: https://chromium-review.googlesource.com/409490
Reviewed-by: Aseda Aboagye <aaboagye@chromium.org>
-rw-r--r-- | common/motion_sense.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/common/motion_sense.c b/common/motion_sense.c index 5a6588bedb..80885fabb8 100644 --- a/common/motion_sense.c +++ b/common/motion_sense.c @@ -426,21 +426,28 @@ static void motion_sense_shutdown(void) #endif sensor_active = SENSOR_ACTIVE_S5; - for (i = 0; i < motion_sensor_count; i++) { sensor = &motion_sensors[i]; /* Forget about changes made by the AP */ sensor->config[SENSOR_CONFIG_AP].odr = 0; sensor->config[SENSOR_CONFIG_AP].ec_rate = 0; - sensor->drv->set_range(sensor, sensor->default_range, 0); } motion_sense_switch_sensor_rate(); + + for (i = 0; i < motion_sensor_count; i++) { + sensor = &motion_sensors[i]; + if (sensor->state != SENSOR_INITIALIZED) + continue; + sensor->drv->set_range(sensor, sensor->default_range, 0); + } /* Forget activities set by the AP */ #ifdef CONFIG_GESTURE_DETECTION_MASK mask = CONFIG_GESTURE_DETECTION_MASK; while (mask) { i = get_next_bit(&mask); sensor = &motion_sensors[i]; + if (sensor->state != SENSOR_INITIALIZED) + continue; sensor->drv->list_activities(sensor, &enabled, &disabled); /* exclude double tap, it is used internally. */ |