summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoryoojin <yoojin7.lee@samsung.com>2014-07-16 16:31:59 +0900
committerchrome-internal-fetch <chrome-internal-fetch@google.com>2014-07-24 17:00:22 +0000
commit15e31390aa8be05e585dabba13fa17b3b9dfc9dc (patch)
treee348d99c06146f9d0b0a70f87b53459e5a300c65
parente1e9db29b7f2a72df95814a71ce5a5fcaa589380 (diff)
downloadchrome-ec-15e31390aa8be05e585dabba13fa17b3b9dfc9dc.tar.gz
winky : Add to retry i2c by fail i2c communication.
When battery was charging, battery current sometimes set to 256mA by fail i2c communication. So, EC should check i2c communication fail a few more times. When EC checks continual i2c fail 3 times, abnormal current was not occured. BUG=chrome-os-partner:30242 TEST=emerge-winky chromeos-ec Check battery current when battery was charging. Change-Id: Ibcff8b461a3cf0f547b2e1f7e85b7121a0fd543d Reviewed-on: https://chromium-review.googlesource.com/208921 Reviewed-by: Aaron Durbin <adurbin@chromium.org> Reviewed-by: yoojin lee <yoojin7.lee@samsung.com> Commit-Queue: yoojin lee <yoojin7.lee@samsung.com> Tested-by: yoojin lee <yoojin7.lee@samsung.com> Reviewed-by: YongBeum Ha <ybha@samsung.com> Tested-by: YongBeum Ha <ybha@samsung.com>
-rwxr-xr-xboard/winky/board.h1
-rwxr-xr-x[-rw-r--r--]chip/lm4/i2c.c24
-rwxr-xr-x[-rw-r--r--]include/config.h1
3 files changed, 24 insertions, 2 deletions
diff --git a/board/winky/board.h b/board/winky/board.h
index acd4aabc5e..9e9700bb24 100755
--- a/board/winky/board.h
+++ b/board/winky/board.h
@@ -27,6 +27,7 @@
#define CONFIG_CMD_GSV
#define CONFIG_EXTPOWER_GPIO
#define CONFIG_I2C_PASSTHRU_RESTRICTED
+#define CONFIG_I2C_RETRY_CNT 3
#define CONFIG_KEYBOARD_IRQ_GPIO GPIO_KBD_IRQ_L
#define CONFIG_KEYBOARD_PROTOCOL_8042
/* TODO(crosbug.com/p/25418): Add LED support */
diff --git a/chip/lm4/i2c.c b/chip/lm4/i2c.c
index 2c6bbab8c4..a1a152030d 100644..100755
--- a/chip/lm4/i2c.c
+++ b/chip/lm4/i2c.c
@@ -161,8 +161,8 @@ int i2c_do_work(int port)
return 0;
}
-int i2c_xfer(int port, int slave_addr, const uint8_t *out, int out_size,
- uint8_t *in, int in_size, int flags)
+static int i2c_xfer_unit(int port, int slave_addr, const uint8_t *out,
+ int out_size, uint8_t *in, int in_size, int flags)
{
struct i2c_port_data *pd = pdata + port;
uint32_t reg_mcs = LM4_I2C_MCS(port);
@@ -242,6 +242,26 @@ int i2c_xfer(int port, int slave_addr, const uint8_t *out, int out_size,
return pd->err;
}
+#ifndef CONFIG_I2C_RETRY_CNT
+#define CONFIG_I2C_RETRY_CNT 1
+#endif
+
+int i2c_xfer(int port, int slave_addr, const uint8_t *out, int out_size,
+ uint8_t *in, int in_size, int flags)
+{
+ int cnt = CONFIG_I2C_RETRY_CNT;
+ int rv;
+
+ for(;cnt > 0; cnt --){
+ rv = i2c_xfer_unit(port, slave_addr, out, out_size, in, in_size, flags);
+ if(rv == 0)
+ break;
+ usleep(100);
+ }
+
+ return rv;
+}
+
int i2c_raw_get_scl(int port)
{
enum gpio_signal g;
diff --git a/include/config.h b/include/config.h
index d9da27867a..7b13bd5a6e 100644..100755
--- a/include/config.h
+++ b/include/config.h
@@ -487,6 +487,7 @@
#undef CONFIG_I2C_DEBUG_PASSTHRU
#undef CONFIG_I2C_PASSTHROUGH
#undef CONFIG_I2C_PASSTHRU_RESTRICTED
+#undef CONFIG_I2C_RETRY_CNT
/*****************************************************************************/