summaryrefslogtreecommitdiff
path: root/common/mkbp_event.c
diff options
context:
space:
mode:
authorAlexandru M Stan <amstan@chromium.org>2017-11-30 20:43:15 -0800
committerchrome-bot <chrome-bot@chromium.org>2018-05-14 15:32:47 -0700
commit1d518fb85cd7163a2fc390871046d8d6c398ed57 (patch)
tree47da7c7ac36b3f7a1e150ed0a7912eed302f624b /common/mkbp_event.c
parentfda59e57ff0b1ad29786d35abb5ba189011fb479 (diff)
downloadchrome-ec-1d518fb85cd7163a2fc390871046d8d6c398ed57.tar.gz
motion_sense: Lower jitter of EC->AP timestamp
When the EC sends an interrupt to the AP notifying it of new accelerometer data we need to make sure the spot we record the timestamp of the event is virtually identical to the spot the AP records the same point in time. Therefore a better spot for that is right next to the gpio toggling of the interrupt line. BUG=b:67743747 TEST=In the kernel, fifo_info->info.timestamp still has sane values. TEST=CTS should still pass BRANCH=master Change-Id: Ic77101a045123e779f576c46b401c765304976fd Signed-off-by: Alexandru M Stan <amstan@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/802976 Reviewed-by: Gwendal Grignou <gwendal@chromium.org> Reviewed-by: Randall Spangler <rspangler@chromium.org>
Diffstat (limited to 'common/mkbp_event.c')
-rw-r--r--common/mkbp_event.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/common/mkbp_event.c b/common/mkbp_event.c
index d89e740568..160ae250c8 100644
--- a/common/mkbp_event.c
+++ b/common/mkbp_event.c
@@ -9,12 +9,14 @@
#include "chipset.h"
#include "gpio.h"
#include "host_command.h"
+#include "hwtimer.h"
#include "link_defs.h"
#include "mkbp_event.h"
#include "power.h"
#include "util.h"
static uint32_t events;
+uint32_t mkbp_last_event_time;
static void set_event(uint8_t event_type)
{
@@ -36,6 +38,13 @@ static int event_is_set(uint8_t event_type)
*/
static void set_host_interrupt(int active)
{
+ static int old_active;
+
+ interrupt_disable();
+
+ if (old_active == 0 && active == 1)
+ mkbp_last_event_time = __hw_clock_source_read();
+
/* interrupt host by using active low EC_INT signal */
#ifdef CONFIG_MKBP_USE_HOST_EVENT
if (active)
@@ -43,6 +52,9 @@ static void set_host_interrupt(int active)
#else
gpio_set_level(GPIO_EC_INT_L, !active);
#endif
+
+ old_active = active;
+ interrupt_enable();
}
/**