mirror of
https://github.com/Telecominfraproject/OpenCellular.git
synced 2026-01-09 17:11:42 +00:00
motion: wake up main task for all changes in EC parameter.
We need to wake up the main task, even if we disable a sensor. It will force sending the sensors samples in the FIFO and put a timestamp behind them. Also, reduce the interrupt period by 10us to be sure we fire interrupt to the AP even if there are some variation in the timing calculation. BUG=b:24367625 BRANCH=smaug TEST=Run ts.SingleSensorTests overnight. Change-Id: I6d966d52b5cbb72ba5eb936bc2fad6c06c7d8605 Signed-off-by: Gwendal Grignou <gwendal@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/312986 Reviewed-by: Alec Berg <alecaberg@chromium.org>
This commit is contained in:
committed by
chrome-bot
parent
d98999f368
commit
9d7f167446
@@ -51,6 +51,13 @@ static int accel_disp;
|
||||
#define UPDATE_HOST_MEM_MAP
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Adjustment in us to ec rate when calculating interrupt interval:
|
||||
* To be sure the EC will send an interrupt even if it finishes processing
|
||||
* events slighly ealier than the previous period.
|
||||
*/
|
||||
#define MOTION_SENSOR_INT_ADJUSTMENT_US 10
|
||||
|
||||
/*
|
||||
* Mutex to protect sensor values between host command task and
|
||||
* motion sense task:
|
||||
@@ -321,7 +328,7 @@ static int motion_sense_ec_rate(struct motion_sensor_t *sensor)
|
||||
*/
|
||||
static int motion_sense_set_motion_intervals(void)
|
||||
{
|
||||
int i, sensor_ec_rate, ec_rate = 0, ec_int_rate = 0, wake_up = 0;
|
||||
int i, sensor_ec_rate, ec_rate = 0, ec_int_rate = 0;
|
||||
struct motion_sensor_t *sensor;
|
||||
for (i = 0; i < motion_sensor_count; ++i) {
|
||||
sensor = &motion_sensors[i];
|
||||
@@ -344,19 +351,15 @@ static int motion_sense_set_motion_intervals(void)
|
||||
(sensor_ec_rate && sensor_ec_rate < ec_int_rate))
|
||||
ec_int_rate = sensor_ec_rate;
|
||||
}
|
||||
motion_interval = ec_rate;
|
||||
|
||||
motion_int_interval =
|
||||
MAX(0, ec_int_rate - MOTION_SENSOR_INT_ADJUSTMENT_US);
|
||||
/*
|
||||
* Wake up the motion sense task: we want to sensor task to take
|
||||
* in account the new period right away.
|
||||
*/
|
||||
if ((motion_interval == 0 ||
|
||||
(ec_rate > 0 && motion_interval > ec_rate)) ||
|
||||
(motion_int_interval == 0 ||
|
||||
(ec_int_rate > 0 && motion_int_interval > ec_int_rate)))
|
||||
wake_up = 1;
|
||||
motion_interval = ec_rate;
|
||||
motion_int_interval = ec_int_rate;
|
||||
if (wake_up)
|
||||
task_wake(TASK_ID_MOTIONSENSE);
|
||||
task_wake(TASK_ID_MOTIONSENSE);
|
||||
return motion_interval;
|
||||
}
|
||||
|
||||
|
||||
@@ -51,7 +51,9 @@ struct motion_data_t {
|
||||
* MSB is used to know if we are rounding up.
|
||||
*/
|
||||
unsigned int odr;
|
||||
/* delay between collection by EC, in us.
|
||||
|
||||
/*
|
||||
* delay between collection by EC, in us.
|
||||
* For non FIFO sensor, should be need 1e6/odr to
|
||||
* collect events.
|
||||
* For sensor with FIFO, can be much longer.
|
||||
|
||||
Reference in New Issue
Block a user