diff options
-rw-r--r-- | common/motion_sense.c | 26 | ||||
-rw-r--r-- | driver/accel_kxcj9.c | 4 |
2 files changed, 26 insertions, 4 deletions
diff --git a/common/motion_sense.c b/common/motion_sense.c index eea52d394e..7c7b8a55b5 100644 --- a/common/motion_sense.c +++ b/common/motion_sense.c @@ -28,8 +28,12 @@ static vector_3_t acc_lid_raw, acc_lid, acc_base; static vector_3_t acc_lid_host, acc_base_host; static float lid_angle_deg; +/* Accelerometer polling intervals based on chipset state. */ +#define ACCEL_INTERVAL_AP_ON_MS 10 +#define ACCEL_INTERVAL_AP_SUSPEND_MS 100 + /* Sampling interval for measuring acceleration and calculating lid angle. */ -static int accel_interval_ms = 10; +static int accel_interval_ms = ACCEL_INTERVAL_AP_SUSPEND_MS; #ifdef CONFIG_CMD_LID_ANGLE static int accel_disp; @@ -117,6 +121,20 @@ void motion_get_accel_base(vector_3_t *v) } #endif +/* Lower accel polling rate on chipset suspend. */ +static void set_slow_accel_polling(void) +{ + accel_interval_ms = ACCEL_INTERVAL_AP_SUSPEND_MS; +} +DECLARE_HOOK(HOOK_CHIPSET_SUSPEND, set_slow_accel_polling, HOOK_PRIO_DEFAULT); + +/* Raise accel polling rate on chipset resume. */ +static void set_fast_accel_polling(void) +{ + accel_interval_ms = ACCEL_INTERVAL_AP_ON_MS; +} +DECLARE_HOOK(HOOK_CHIPSET_RESUME, set_fast_accel_polling, HOOK_PRIO_DEFAULT); + void motion_sense_task(void) { @@ -244,7 +262,11 @@ static int command_ctrl_print_lid_angle_calcs(int argc, char **argv) accel_disp = val; } - /* Second arg changes the accel task time interval. */ + /* + * Second arg changes the accel task time interval. Note accel + * sampling interval will be clobbered when chipset suspends or + * resumes. + */ if (argc > 2) { val = strtoi(argv[2], &e, 0); if (*e) diff --git a/driver/accel_kxcj9.c b/driver/accel_kxcj9.c index 1ca80d7b15..e6e7864175 100644 --- a/driver/accel_kxcj9.c +++ b/driver/accel_kxcj9.c @@ -21,8 +21,8 @@ static int sensor_range[ACCEL_COUNT] = {KXCJ9_GSEL_2G, KXCJ9_GSEL_2G}; static int sensor_resolution[ACCEL_COUNT] = {KXCJ9_RES_12BIT, KXCJ9_RES_12BIT}; /* Output data rate: KXCJ9_OSA_* ranges from 0.781Hz to 1600Hz. */ -static int sensor_datarate[ACCEL_COUNT] = {KXCJ9_OSA_12_50HZ, - KXCJ9_OSA_12_50HZ}; +static int sensor_datarate[ACCEL_COUNT] = {KXCJ9_OSA_100_0HZ, + KXCJ9_OSA_100_0HZ}; /** * Read register from accelerometer. |