summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--board/samus/board.c80
-rw-r--r--common/gesture.c13
-rw-r--r--include/gesture.h7
-rw-r--r--include/motion_sense.h9
4 files changed, 73 insertions, 36 deletions
diff --git a/board/samus/board.c b/board/samus/board.c
index 35365754dc..e9d71de370 100644
--- a/board/samus/board.c
+++ b/board/samus/board.c
@@ -20,6 +20,7 @@
#include "driver/temp_sensor/tmp006.h"
#include "extpower.h"
#include "fan.h"
+#include "gesture.h"
#include "gpio.h"
#include "hooks.h"
#include "host_command.h"
@@ -307,11 +308,28 @@ struct motion_sensor_t motion_sensors[] = {
.drv_data = &g_saved_data[0],
.addr = LSM6DS0_ADDR1,
.rot_standard_ref = &base_standard_ref,
- .default_config = {
- .odr = 119000,
- .range = 2,
- .ec_rate = SUSPEND_SAMPLING_INTERVAL,
- }
+ .default_range = 2, /* g, enough for laptop. */
+ .config = {
+ /* AP: by default shutdown all sensors */
+ [SENSOR_CONFIG_AP] = {
+ .odr = 0,
+ .ec_rate = 0,
+ },
+ /* EC use accel for angle detection */
+ [SENSOR_CONFIG_EC_S0] = {
+ .odr = 119000 | ROUND_UP_FLAG,
+ .ec_rate = 100,
+ },
+ /* Used for double tap */
+ [SENSOR_CONFIG_EC_S3] = {
+ .odr = TAP_ODR | ROUND_UP_FLAG,
+ .ec_rate = CONFIG_GESTURE_SAMPLING_INTERVAL_MS
+ },
+ [SENSOR_CONFIG_EC_S5] = {
+ .odr = TAP_ODR | ROUND_UP_FLAG,
+ .ec_rate = CONFIG_GESTURE_SAMPLING_INTERVAL_MS
+ },
+ },
},
{.name = "Lid",
@@ -324,11 +342,28 @@ struct motion_sensor_t motion_sensors[] = {
.drv_data = &g_kxcj9_data,
.addr = KXCJ9_ADDR0,
.rot_standard_ref = &lid_standard_ref,
- .default_config = {
- .odr = 100000,
- .range = 2,
- .ec_rate = SUSPEND_SAMPLING_INTERVAL,
- }
+ .default_range = 2, /* g, enough for laptop. */
+ .config = {
+ /* AP: by default shutdown all sensors */
+ [SENSOR_CONFIG_AP] = {
+ .odr = 0,
+ .ec_rate = 0,
+ },
+ /* EC use accel for angle detection */
+ [SENSOR_CONFIG_EC_S0] = {
+ .odr = 100000 | ROUND_UP_FLAG,
+ .ec_rate = 100,
+ },
+ /* unused */
+ [SENSOR_CONFIG_EC_S3] = {
+ .odr = 0,
+ .ec_rate = 0,
+ },
+ [SENSOR_CONFIG_EC_S5] = {
+ .odr = 0,
+ .ec_rate = 0,
+ },
+ },
},
{.name = "Base Gyro",
@@ -341,10 +376,27 @@ struct motion_sensor_t motion_sensors[] = {
.drv_data = &g_saved_data[1],
.addr = LSM6DS0_ADDR1,
.rot_standard_ref = NULL,
- .default_config = {
- .odr = 119000,
- .range = 2000,
- .ec_rate = SUSPEND_SAMPLING_INTERVAL,
+ .default_range = 2000, /* g, enough for laptop. */
+ .config = {
+ /* AP: by default shutdown all sensors */
+ [SENSOR_CONFIG_AP] = {
+ .odr = 0,
+ .ec_rate = 0,
+ },
+ /* EC use accel for angle detection */
+ [SENSOR_CONFIG_EC_S0] = {
+ .odr = 119000 | ROUND_UP_FLAG,
+ .ec_rate = 100,
+ },
+ /* unused */
+ [SENSOR_CONFIG_EC_S3] = {
+ .odr = 0,
+ .ec_rate = 0,
+ },
+ [SENSOR_CONFIG_EC_S5] = {
+ .odr = 0,
+ .ec_rate = 0,
+ },
}
},
diff --git a/common/gesture.c b/common/gesture.c
index 51a77ce0ab..b1858ba311 100644
--- a/common/gesture.c
+++ b/common/gesture.c
@@ -22,12 +22,6 @@
#define CPRINTS(format, args...) cprints(CC_GESTURE, format, ## args)
#define CPRINTF(format, args...) cprintf(CC_GESTURE, format, ## args)
-/* Output datarate for tap sensor (in milli-Hz) */
-/*
- * Note: lsm6ds0 accel needs twice the expected data rate in order to guarantee
- * that we have a new data sample every reading.
- */
-#define TAP_ODR (2 * (1000000 / CONFIG_GESTURE_SAMPLING_INTERVAL_MS))
/*
* Double tap detection parameters
@@ -287,13 +281,6 @@ DECLARE_HOOK(HOOK_CHIPSET_RESUME, gesture_chipset_resume,
static void gesture_chipset_suspend(void)
{
/*
- * Set ODR to desired value
- * We assume EC rate set correctly: it works because the sensor used
- * is never offlined/suspened.
- */
- sensor->drv->set_data_rate(sensor, TAP_ODR, 1);
-
- /*
* Clear tap init and history initialized so that we have to
* record a whole new set of data, and enable tap detection
*/
diff --git a/include/gesture.h b/include/gesture.h
index 901f881b50..d98dc8cdf8 100644
--- a/include/gesture.h
+++ b/include/gesture.h
@@ -16,4 +16,11 @@ void gesture_calc(void);
/* gesture hooks are triggered after the motion sense hooks. */
#define GESTURE_HOOK_PRIO (MOTION_SENSE_HOOK_PRIO + 10)
+/* Output datarate for tap sensor (in milli-Hz) */
+/*
+ * Note: lsm6ds0 accel needs twice the expected data rate in order to guarantee
+ * that we have a new data sample every reading.
+ */
+#define TAP_ODR (2 * (1000000 / CONFIG_GESTURE_SAMPLING_INTERVAL_MS))
+
#endif /* __CROS_EC_GESTURE_H */
diff --git a/include/motion_sense.h b/include/motion_sense.h
index 6541893d67..d01c2b907e 100644
--- a/include/motion_sense.h
+++ b/include/motion_sense.h
@@ -42,15 +42,6 @@ enum sensor_config {
/* Next 8 events for sensor interrupt lines */
#define TASK_EVENT_MOTION_INTERRUPT_MASK (0xff << 2)
-/* Define sensor sampling interval in suspend. */
-#ifdef CONFIG_GESTURE_DETECTION
-#define SUSPEND_SAMPLING_INTERVAL (CONFIG_GESTURE_SAMPLING_INTERVAL_MS * MSEC)
-#elif defined(CONFIG_ACCEL_FIFO)
-#define SUSPEND_SAMPLING_INTERVAL (1000 * MSEC)
-#else
-#define SUSPEND_SAMPLING_INTERVAL (100 * MSEC)
-#endif
-
/* Minimum time in between running motion sense task loop. */
#define MIN_MOTION_SENSE_WAIT_TIME (3 * MSEC)
#define MAX_MOTION_SENSE_WAIT_TIME (60000 * MSEC)