summaryrefslogtreecommitdiff
path: root/board
diff options
context:
space:
mode:
authorEli Hsu <eli.hsu@ite.com.tw>2016-04-14 16:33:33 +0800
committerchrome-bot <chrome-bot@chromium.org>2016-04-14 21:08:00 -0700
commitb72c096f20a0520ff794cc871073677bdb0cdec7 (patch)
tree1c383686906a5daa1f45093310d0647d39fc3409 /board
parenta1b00c1797d3695c1a55dff2cc161ce2fbc8ada5 (diff)
downloadchrome-ec-b72c096f20a0520ff794cc871073677bdb0cdec7.tar.gz
chip: it83xx: Add i2c channel d/e/f function
[board] 1. Add i2c channel d/e/f setting. 2. Add i2c channel d/e/f pin definition. [chip] 3. change i2c port number. 4. Add i2c channel d/e/f function. 5. Add i2c channel d/e/f interrupt. 6. Add i2c channel d/e/f registers. Signed-off-by: Eli Hsu <eli.hsu@ite.com.tw> BRANCH=none BUG=none TEST=Test by console command "i2cscan","i2cxfer" and "battery" Change-Id: I928f333ec129924795c3b594ad6a2bfdd0b3d220 Reviewed-on: https://chromium-review.googlesource.com/336560 Commit-Ready: Eli Hsu <eli.hsu@ite.com.tw> Tested-by: Eli Hsu <eli.hsu@ite.com.tw> Reviewed-by: Randall Spangler <rspangler@chromium.org>
Diffstat (limited to 'board')
-rw-r--r--board/it8380dev/board.c21
-rw-r--r--board/it8380dev/board.h6
-rw-r--r--board/it8380dev/gpio.inc9
3 files changed, 31 insertions, 5 deletions
diff --git a/board/it8380dev/board.c b/board/it8380dev/board.c
index d7bf4388ab..b63f6b9dcb 100644
--- a/board/it8380dev/board.c
+++ b/board/it8380dev/board.c
@@ -213,13 +213,28 @@ struct keyboard_scan_config keyscan_config = {
* In order to set frequency independently for each channels,
* We use timing registers 09h~0Bh, and the supported frequency will be:
* 50KHz, 100KHz, 400KHz, or 1MHz.
+ * I2C channels (D, E and F) can be set different frequency on different ports.
+ * The I2C(D/E/F) frequency depend on the frequency of SMBus Module and
+ * the individual prescale register.
+ * The frequency of SMBus module is 24MHz on default.
+ * The allowed range of I2C(D/E/F) frequency is as following setting.
+ * SMBus Module Freq = PLL_CLOCK / ((IT83XX_ECPM_SCDCR2 & 0x0F) + 1)
+ * (SMBus Module Freq / 510) <= I2C Freq <= (SMBus Module Freq / 8)
+ * Channel D has multi-function and can be used as UART interface.
+ * Channel F is reserved for EC debug.
*/
+
/* I2C ports */
const struct i2c_port_t i2c_ports[] = {
- {"battery", 2, 100, GPIO_I2C_C_SCL, GPIO_I2C_C_SDA},
- {"evb-1", 0, 100, GPIO_I2C_A_SCL, GPIO_I2C_A_SDA},
- {"evb-2", 1, 100, GPIO_I2C_B_SCL, GPIO_I2C_B_SDA},
+ {"battery", IT83XX_I2C_CH_C, 100, GPIO_I2C_C_SCL, GPIO_I2C_C_SDA},
+ {"evb-1", IT83XX_I2C_CH_A, 100, GPIO_I2C_A_SCL, GPIO_I2C_A_SDA},
+ {"evb-2", IT83XX_I2C_CH_B, 100, GPIO_I2C_B_SCL, GPIO_I2C_B_SDA},
+#ifndef CONFIG_UART_HOST
+ {"opt-3", IT83XX_I2C_CH_D, 100, GPIO_I2C_D_SCL, GPIO_I2C_D_SDA},
+#endif
+ {"opt-4", IT83XX_I2C_CH_E, 100, GPIO_I2C_E_SCL, GPIO_I2C_E_SDA},
};
+
const unsigned int i2c_ports_used = ARRAY_SIZE(i2c_ports);
/* SPI devices */
diff --git a/board/it8380dev/board.h b/board/it8380dev/board.h
index 2655c8ec74..b2cf093968 100644
--- a/board/it8380dev/board.h
+++ b/board/it8380dev/board.h
@@ -39,8 +39,10 @@
#ifndef __ASSEMBLER__
-#define I2C_PORT_CHARGER 2
-#define I2C_PORT_BATTERY 2
+#include "registers.h"
+
+#define I2C_PORT_CHARGER IT83XX_I2C_CH_C
+#define I2C_PORT_BATTERY IT83XX_I2C_CH_C
#include "gpio_signal.h"
diff --git a/board/it8380dev/gpio.inc b/board/it8380dev/gpio.inc
index a76527e0c3..51c9167b92 100644
--- a/board/it8380dev/gpio.inc
+++ b/board/it8380dev/gpio.inc
@@ -36,9 +36,15 @@ GPIO(I2C_C_SCL, PIN(F, 6), GPIO_INPUT)
#endif
GPIO(I2C_C_SDA, PIN(F, 7), GPIO_INPUT)
+GPIO(I2C_E_SCL, PIN(E, 0), GPIO_INPUT)
+GPIO(I2C_E_SDA, PIN(E, 7), GPIO_INPUT)
+
#ifdef CONFIG_UART_HOST
GPIO(UART2_SIN1, PIN(H, 1), GPIO_INPUT)
GPIO(UART2_SOUT1, PIN(H, 2), GPIO_INPUT)
+#else
+GPIO(I2C_D_SCL, PIN(H, 1), GPIO_INPUT)
+GPIO(I2C_D_SDA, PIN(H, 2), GPIO_INPUT)
#endif
/* KSO/KSI pins can be used as GPIO input. */
@@ -52,6 +58,8 @@ UNIMPLEMENTED(ENTERING_RW)
ALTERNATE(PIN_MASK(B, 0x03), 1, MODULE_UART, GPIO_PULL_UP) /* UART1 */
#ifdef CONFIG_UART_HOST
ALTERNATE(PIN_MASK(H, 0x06), 1, MODULE_UART, 0) /* UART2 */
+#else
+ALTERNATE(PIN_MASK(H, 0x06), 1, MODULE_I2C, 0) /* I2C D SCL/SDA H1/H2 */
#endif
ALTERNATE(PIN_MASK(A, 0x40), 3, MODULE_SPI, 0) /* SSCK of SPI */
ALTERNATE(PIN_MASK(C, 0x28), 3, MODULE_SPI, 0) /* SMOSI/SMISO of SPI */
@@ -67,3 +75,4 @@ ALTERNATE(PIN_MASK(F, 0x80), 1, MODULE_I2C, 0) /* I2C C SDA */
ALTERNATE(PIN_MASK(C, 0x06), 1, MODULE_I2C, 0) /* I2C B SCL/SDA */
ALTERNATE(PIN_MASK(F, 0xC0), 1, MODULE_I2C, 0) /* I2C C SCL/SDA */
#endif
+ALTERNATE(PIN_MASK(E, 0x81), 1, MODULE_I2C, 0) /* I2C E SCL/SDA E0/E7 */