diff options
author | yoojin <yoojin7.lee@samsung.com> | 2014-07-16 16:31:59 +0900 |
---|---|---|
committer | chrome-internal-fetch <chrome-internal-fetch@google.com> | 2014-07-24 17:00:22 +0000 |
commit | 15e31390aa8be05e585dabba13fa17b3b9dfc9dc (patch) | |
tree | e348d99c06146f9d0b0a70f87b53459e5a300c65 | |
parent | e1e9db29b7f2a72df95814a71ce5a5fcaa589380 (diff) | |
download | chrome-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-x | board/winky/board.h | 1 | ||||
-rwxr-xr-x[-rw-r--r--] | chip/lm4/i2c.c | 24 | ||||
-rwxr-xr-x[-rw-r--r--] | include/config.h | 1 |
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 /*****************************************************************************/ |