summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--board/ryu/board.c6
-rw-r--r--common/motion_sense.c10
-rw-r--r--include/config.h6
-rw-r--r--include/motion_sense.h7
4 files changed, 21 insertions, 8 deletions
diff --git a/board/ryu/board.c b/board/ryu/board.c
index 44cc2db069..a6712aa21b 100644
--- a/board/ryu/board.c
+++ b/board/ryu/board.c
@@ -197,6 +197,12 @@ static void board_init(void)
CPRINTS("Board using SPI sensors");
} else { /* I2C sensors on rev v6/7/8 */
CPRINTS("Board using I2C sensors");
+ /*
+ * On EVT2, when the sensors are on the same bus as other
+ * sensors, motion task would not leave enough time for
+ * processing as soon as its frequency is around ~200Hz.
+ */
+ motion_min_interval = 8 * MSEC;
}
}
DECLARE_HOOK(HOOK_INIT, board_init, HOOK_PRIO_DEFAULT);
diff --git a/common/motion_sense.c b/common/motion_sense.c
index c72165bc7e..7602d62334 100644
--- a/common/motion_sense.c
+++ b/common/motion_sense.c
@@ -39,6 +39,8 @@ test_export_static unsigned int motion_interval;
/* Delay between FIFO interruption. */
static unsigned int motion_int_interval;
+/* Minimum time in between running motion sense task loop. */
+unsigned int motion_min_interval = CONFIG_MOTION_MIN_SENSE_WAIT_TIME * MSEC;
#ifdef CONFIG_CMD_ACCEL_INFO
static int accel_disp;
#endif
@@ -769,8 +771,8 @@ void motion_sense_task(void)
* Guarantee some minimum delay to allow other lower
* priority tasks to run.
*/
- if (wait_us < MIN_MOTION_SENSE_WAIT_TIME)
- wait_us = MIN_MOTION_SENSE_WAIT_TIME;
+ if (wait_us < motion_min_interval)
+ wait_us = motion_min_interval;
} else {
wait_us = -1;
}
@@ -914,7 +916,7 @@ static int host_cmd_motion_sense(struct host_cmd_handler_args *args)
else
sensor->config[SENSOR_CONFIG_AP].ec_rate =
MAX(in->ec_rate.data,
- MIN_MOTION_SENSE_WAIT_TIME / MSEC);
+ motion_min_interval / MSEC);
/* Bound the new sampling rate. */
motion_sense_set_motion_intervals();
@@ -1327,7 +1329,7 @@ static int command_accel_read_xyz(int argc, char **argv)
ccprintf("vector not ready\n");
ccprintf("Last calib. data %d: %-5d %-5d %-5d\n",
id, sensor->xyz[X], sensor->xyz[Y], sensor->xyz[Z]);
- task_wait_event(MIN_MOTION_SENSE_WAIT_TIME);
+ task_wait_event(motion_min_interval);
}
return EC_SUCCESS;
}
diff --git a/include/config.h b/include/config.h
index c396517a4a..f0effc425b 100644
--- a/include/config.h
+++ b/include/config.h
@@ -966,6 +966,12 @@
/* H2RAM Host LPC I/O base memory address */
#undef CONFIG_H2RAM_HOST_LPC_IO_BASE
+/*
+ * Define the minimal amount of time (in ms) betwen running motion sense task
+ * loop.
+ */
+#define CONFIG_MOTION_MIN_SENSE_WAIT_TIME 3
+
/*****************************************************************************/
/*
* Support the host asking the EC about the status of the most recent host
diff --git a/include/motion_sense.h b/include/motion_sense.h
index 26ba029c96..7dd9fd747d 100644
--- a/include/motion_sense.h
+++ b/include/motion_sense.h
@@ -42,10 +42,6 @@ enum sensor_config {
/* Next 8 events for sensor interrupt lines */
#define TASK_EVENT_MOTION_INTERRUPT_MASK (0xff << 2)
-/* 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)
-
#define ROUND_UP_FLAG (1 << 31)
#define BASE_ODR(_odr) ((_odr) & ~ROUND_UP_FLAG)
@@ -135,6 +131,9 @@ struct motion_sensor_t {
extern struct motion_sensor_t motion_sensors[];
extern const unsigned motion_sensor_count;
+/* optionally defined at board level */
+extern unsigned int motion_min_interval;
+
/*
* Priority of the motion sense resume/suspend hooks, to be sure associated
* hooks are scheduled properly.