summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlec Berg <alecaberg@chromium.org>2014-03-11 15:17:41 -0700
committerchrome-internal-fetch <chrome-internal-fetch@google.com>2014-03-20 23:51:55 +0000
commit5bd3d71259f7d6f003a5d4e53a5c23bd8035da73 (patch)
treee23f042a6644dddc61e79e13a9b7dde313a92de7
parentb9b5c89c301d5c7eb68b5ad5b9e05978ce93f436 (diff)
downloadchrome-ec-5bd3d71259f7d6f003a5d4e53a5c23bd8035da73.tar.gz
rambi: change EC accel sampling rate and default sensor output data rate.
Two accelerometer changes: - Lower accel sampling rate when chipset is off to 10Hz. Increase sampling rate back up to 100Hz when transitioning to S0. - Change the default output data rate of the accelerometers to 100Hz which matches the EC sampling rate when in S0. BUG=none BRANCH=rambi TEST=manual testing. used lidangle command to verify that in S0, EC is sampling at 100Hz, and in S3 or lower it is sampling at 10Hz. Change-Id: Ie4e20f45f9371d674c3325a362d2729c331fac4f Signed-off-by: Alec Berg <alecaberg@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/190032 Reviewed-by: Randall Spangler <rspangler@chromium.org>
-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..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.