summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGwendal Grignou <gwendal@chromium.org>2015-11-18 13:39:44 -0800
committerChromeOS Commit Bot <chromeos-commit-bot@chromium.org>2016-11-12 19:24:38 +0000
commit5c8dff922b3f7fe35df9343f6e8c5d5ba7ece8fc (patch)
tree2f5443f603acba24877b6a4ca5131f2f49306b46
parent21aab34e529726e3e7cd4c630420e94f59d125f3 (diff)
downloadchrome-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.c11
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. */