summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--common/motion_sense.c26
-rw-r--r--driver/accel_kxcj9.c4
2 files changed, 26 insertions, 4 deletions
diff --git a/common/motion_sense.c b/common/motion_sense.c
index eea52d394e..90a52d7214 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_MEMORYMAPPED_MS 10
+#define ACCEL_INTERVAL_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_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_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_MEMORYMAPPED_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.