summaryrefslogtreecommitdiff
path: root/common/tsu6721.c
diff options
context:
space:
mode:
authorVic Yang <victoryang@chromium.org>2013-02-23 14:42:42 +0800
committerChromeBot <chrome-bot@google.com>2013-02-25 18:59:56 -0800
commit9aba3baf15c02f252ba39f7817f94d74c89ec9ad (patch)
tree1a31bc9da1b49fbb0ff50e6baa0c03c7151621d8 /common/tsu6721.c
parentc1b16d21e6315d6de9f697ff5a41eca288f4f754 (diff)
downloadchrome-ec-9aba3baf15c02f252ba39f7817f94d74c89ec9ad.tar.gz
spring: minimize the window that loses TSU6721 interrupt
Since TSU6721 processing is integrated into PMU task, an interrupt closely following previous one may be dropped. We should check interrupt status before yeilding control. BUG=chrome-os-partner:14319, chrome-os-partner:14318 TEST=Boot on Spring. Check TSU6721 functionality. BRANCH=none Change-Id: I7ce1c70a214bb4afc9456eb206203cc6c3fe2f33 Signed-off-by: Vic Yang <victoryang@chromium.org> Reviewed-on: https://gerrit.chromium.org/gerrit/43862 Reviewed-by: Vincent Palatin <vpalatin@chromium.org>
Diffstat (limited to 'common/tsu6721.c')
-rw-r--r--common/tsu6721.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/common/tsu6721.c b/common/tsu6721.c
index 8ea369c463..95a63a76bf 100644
--- a/common/tsu6721.c
+++ b/common/tsu6721.c
@@ -24,6 +24,8 @@
/* 8-bit I2C address */
#define TSU6721_I2C_ADDR (0x25 << 1)
+static int saved_interrupts;
+
uint8_t tsu6721_read(uint8_t reg)
{
int res;
@@ -65,8 +67,16 @@ void tsu6721_set_interrupt_mask(uint16_t mask)
int tsu6721_get_interrupts(void)
{
- return (tsu6721_read(TSU6721_REG_INT1) << 8) |
- (tsu6721_read(TSU6721_REG_INT2));
+ int ret = tsu6721_peek_interrupts();
+ saved_interrupts = 0;
+ return ret;
+}
+
+int tsu6721_peek_interrupts(void)
+{
+ saved_interrupts |= (tsu6721_read(TSU6721_REG_INT1) << 8) |
+ (tsu6721_read(TSU6721_REG_INT2));
+ return saved_interrupts;
}
int tsu6721_get_device_type(void)