summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVijay Hiremath <vijay.p.hiremath@intel.com>2021-08-23 15:29:01 -0700
committerCommit Bot <commit-bot@chromium.org>2021-09-10 19:07:02 +0000
commit26c236e3cbaad22c24b3ee8b976223524fa16421 (patch)
tree5c5d1c874297d366f7b858cc995ab6fbd9d39bc3
parent316b2b4456aa78d986b675dabe547b73c59a7097 (diff)
downloadchrome-ec-26c236e3cbaad22c24b3ee8b976223524fa16421.tar.gz
ioex: it8801: Support multiple I2C addresses
To avoid the I2C address contention between multiple I2C devices on same bus, added code to support multiple I2C addresses for it8801 I/O expander. BUG=none BRANCH=none TEST=make buildall -j Change-Id: I6985973f9ae3ce91383d3b568a851169e6a308af Signed-off-by: Vijay Hiremath <vijay.p.hiremath@intel.com> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3115426 Commit-Queue: Keith Short <keithshort@chromium.org> Reviewed-by: Keith Short <keithshort@chromium.org> Reviewed-by: Ting Shen <phoenixshen@chromium.org> Reviewed-by: Eric Yilun Lin <yllin@google.com> Reviewed-by: Li Feng <li1.feng@intel.com>
-rw-r--r--board/burnet/board.c4
-rw-r--r--board/burnet/board.h5
-rw-r--r--board/cerise/board.c4
-rw-r--r--board/cerise/board.h5
-rw-r--r--board/damu/board.c4
-rw-r--r--board/damu/board.h5
-rw-r--r--board/fennel/board.c4
-rw-r--r--board/fennel/board.h5
-rw-r--r--board/jacuzzi/board.c4
-rw-r--r--board/jacuzzi/board.h5
-rw-r--r--board/kappa/board.c4
-rw-r--r--board/kappa/board.h5
-rw-r--r--board/makomo/board.c4
-rw-r--r--board/makomo/board.h5
-rw-r--r--board/munna/board.c4
-rw-r--r--board/munna/board.h5
-rw-r--r--board/stern/board.c4
-rw-r--r--board/stern/board.h5
-rw-r--r--board/willow/board.c4
-rw-r--r--board/willow/board.h5
-rw-r--r--driver/ioexpander/it8801.c8
-rw-r--r--driver/ioexpander/it8801.h3
-rw-r--r--include/config.h10
23 files changed, 75 insertions, 36 deletions
diff --git a/board/burnet/board.c b/board/burnet/board.c
index c5c66a15fc..d932624b0a 100644
--- a/board/burnet/board.c
+++ b/board/burnet/board.c
@@ -108,8 +108,8 @@ __override struct keyboard_scan_config keyscan_config = {
struct ioexpander_config_t ioex_config[CONFIG_IO_EXPANDER_PORT_COUNT] = {
[0] = {
- .i2c_host_port = I2C_PORT_IO_EXPANDER_IT8801,
- .i2c_addr_flags = IT8801_I2C_ADDR,
+ .i2c_host_port = IT8801_KEYBOARD_PWM_I2C_PORT,
+ .i2c_addr_flags = IT8801_I2C_ADDR1,
.drv = &it8801_ioexpander_drv,
},
};
diff --git a/board/burnet/board.h b/board/burnet/board.h
index 65791750b5..009da83ac5 100644
--- a/board/burnet/board.h
+++ b/board/burnet/board.h
@@ -77,9 +77,12 @@
#define I2C_PORT_BATTERY 2
#define I2C_PORT_CHARGER 1
#define I2C_PORT_SENSORS 1
-#define I2C_PORT_IO_EXPANDER_IT8801 1
+#define IT8801_KEYBOARD_PWM_I2C_PORT 1
#define I2C_PORT_VIRTUAL_BATTERY I2C_PORT_BATTERY
+/* IT8801 I2C address */
+#define IT8801_KEYBOARD_PWM_I2C_ADDR_FLAGS IT8801_I2C_ADDR1
+
/* Enable Accel over SPI */
#define CONFIG_SPI_ACCEL_PORT 0 /* The first SPI master port (SPI2) */
diff --git a/board/cerise/board.c b/board/cerise/board.c
index dfdb9230f9..78ab8f6de8 100644
--- a/board/cerise/board.c
+++ b/board/cerise/board.c
@@ -106,8 +106,8 @@ __override struct keyboard_scan_config keyscan_config = {
struct ioexpander_config_t ioex_config[CONFIG_IO_EXPANDER_PORT_COUNT] = {
[0] = {
- .i2c_host_port = I2C_PORT_IO_EXPANDER_IT8801,
- .i2c_addr_flags = IT8801_I2C_ADDR,
+ .i2c_host_port = IT8801_KEYBOARD_PWM_I2C_PORT,
+ .i2c_addr_flags = IT8801_I2C_ADDR1,
.drv = &it8801_ioexpander_drv,
},
};
diff --git a/board/cerise/board.h b/board/cerise/board.h
index d230c71513..5cf8c06f01 100644
--- a/board/cerise/board.h
+++ b/board/cerise/board.h
@@ -79,9 +79,12 @@
#define I2C_PORT_BATTERY 2
#define I2C_PORT_CHARGER board_get_charger_i2c()
#define I2C_PORT_SENSORS 1
-#define I2C_PORT_IO_EXPANDER_IT8801 1
+#define IT8801_KEYBOARD_PWM_I2C_PORT 1
#define I2C_PORT_VIRTUAL_BATTERY I2C_PORT_BATTERY
+/* IT8801 I2C address */
+#define IT8801_KEYBOARD_PWM_I2C_ADDR_FLAGS IT8801_I2C_ADDR1
+
/* Enable Accel over SPI */
#define CONFIG_SPI_ACCEL_PORT 0 /* The first SPI master port (SPI2) */
diff --git a/board/damu/board.c b/board/damu/board.c
index fcb74cd482..ca3979949a 100644
--- a/board/damu/board.c
+++ b/board/damu/board.c
@@ -106,8 +106,8 @@ __override struct keyboard_scan_config keyscan_config = {
struct ioexpander_config_t ioex_config[CONFIG_IO_EXPANDER_PORT_COUNT] = {
[0] = {
- .i2c_host_port = I2C_PORT_IO_EXPANDER_IT8801,
- .i2c_addr_flags = IT8801_I2C_ADDR,
+ .i2c_host_port = IT8801_KEYBOARD_PWM_I2C_PORT,
+ .i2c_addr_flags = IT8801_I2C_ADDR1,
.drv = &it8801_ioexpander_drv,
},
};
diff --git a/board/damu/board.h b/board/damu/board.h
index b271f9283d..6df8bb2a7a 100644
--- a/board/damu/board.h
+++ b/board/damu/board.h
@@ -78,9 +78,12 @@
#define I2C_PORT_BATTERY 2
#define I2C_PORT_CHARGER board_get_charger_i2c()
#define I2C_PORT_SENSORS 1
-#define I2C_PORT_IO_EXPANDER_IT8801 1
+#define IT8801_KEYBOARD_PWM_I2C_PORT 1
#define I2C_PORT_VIRTUAL_BATTERY I2C_PORT_BATTERY
+/* IT8801 I2C address */
+#define IT8801_KEYBOARD_PWM_I2C_ADDR_FLAGS IT8801_I2C_ADDR1
+
/* Enable Accel over SPI */
#define CONFIG_SPI_ACCEL_PORT 0 /* The first SPI master port (SPI2) */
diff --git a/board/fennel/board.c b/board/fennel/board.c
index 11ca03e0a5..0706813592 100644
--- a/board/fennel/board.c
+++ b/board/fennel/board.c
@@ -107,8 +107,8 @@ __override struct keyboard_scan_config keyscan_config = {
struct ioexpander_config_t ioex_config[CONFIG_IO_EXPANDER_PORT_COUNT] = {
[0] = {
- .i2c_host_port = I2C_PORT_IO_EXPANDER_IT8801,
- .i2c_addr_flags = IT8801_I2C_ADDR,
+ .i2c_host_port = IT8801_KEYBOARD_PWM_I2C_PORT,
+ .i2c_addr_flags = IT8801_I2C_ADDR1,
.drv = &it8801_ioexpander_drv,
},
};
diff --git a/board/fennel/board.h b/board/fennel/board.h
index 448c7debf0..697480770c 100644
--- a/board/fennel/board.h
+++ b/board/fennel/board.h
@@ -83,10 +83,13 @@
#define I2C_PORT_USB_MUX 0
#define I2C_PORT_CHARGER board_get_charger_i2c()
#define I2C_PORT_SENSORS 1
-#define I2C_PORT_IO_EXPANDER_IT8801 1
+#define IT8801_KEYBOARD_PWM_I2C_PORT 1
#define I2C_PORT_VIRTUAL_BATTERY I2C_PORT_BATTERY
#define I2C_PORT_BATTERY 2
+/* IT8801 I2C address */
+#define IT8801_KEYBOARD_PWM_I2C_ADDR_FLAGS IT8801_I2C_ADDR1
+
/* Enable Accel over SPI */
#define CONFIG_SPI_ACCEL_PORT 0 /* The first SPI master port (SPI2) */
diff --git a/board/jacuzzi/board.c b/board/jacuzzi/board.c
index 9f655474d2..ec6515544d 100644
--- a/board/jacuzzi/board.c
+++ b/board/jacuzzi/board.c
@@ -110,8 +110,8 @@ __override struct keyboard_scan_config keyscan_config = {
struct ioexpander_config_t ioex_config[CONFIG_IO_EXPANDER_PORT_COUNT] = {
[0] = {
- .i2c_host_port = I2C_PORT_IO_EXPANDER_IT8801,
- .i2c_addr_flags = IT8801_I2C_ADDR,
+ .i2c_host_port = IT8801_KEYBOARD_PWM_I2C_PORT,
+ .i2c_addr_flags = IT8801_I2C_ADDR1,
.drv = &it8801_ioexpander_drv,
},
};
diff --git a/board/jacuzzi/board.h b/board/jacuzzi/board.h
index 648edcc4a6..ef8a02a3dc 100644
--- a/board/jacuzzi/board.h
+++ b/board/jacuzzi/board.h
@@ -90,7 +90,7 @@
#define I2C_PORT_USB_MUX 0
#define I2C_PORT_CHARGER board_get_charger_i2c()
#define I2C_PORT_SENSORS 1
-#define I2C_PORT_IO_EXPANDER_IT8801 1
+#define IT8801_KEYBOARD_PWM_I2C_PORT 1
#define I2C_PORT_VIRTUAL_BATTERY I2C_PORT_BATTERY
#ifdef BOARD_JACUZZI
#define I2C_PORT_BATTERY 1
@@ -98,6 +98,9 @@
#define I2C_PORT_BATTERY 2
#endif
+/* IT8801 I2C address */
+#define IT8801_KEYBOARD_PWM_I2C_ADDR_FLAGS IT8801_I2C_ADDR1
+
/* Enable Accel over SPI */
#define CONFIG_SPI_ACCEL_PORT 0 /* The first SPI master port (SPI2) */
diff --git a/board/kappa/board.c b/board/kappa/board.c
index b8c5fee622..a0d7cf6a4e 100644
--- a/board/kappa/board.c
+++ b/board/kappa/board.c
@@ -104,8 +104,8 @@ __override struct keyboard_scan_config keyscan_config = {
struct ioexpander_config_t ioex_config[CONFIG_IO_EXPANDER_PORT_COUNT] = {
[0] = {
- .i2c_host_port = I2C_PORT_IO_EXPANDER_IT8801,
- .i2c_addr_flags = IT8801_I2C_ADDR,
+ .i2c_host_port = IT8801_KEYBOARD_PWM_I2C_PORT,
+ .i2c_addr_flags = IT8801_I2C_ADDR1,
.drv = &it8801_ioexpander_drv,
},
};
diff --git a/board/kappa/board.h b/board/kappa/board.h
index 92851f45bf..287f22416e 100644
--- a/board/kappa/board.h
+++ b/board/kappa/board.h
@@ -53,9 +53,12 @@
#define I2C_PORT_USB_MUX 0
#define I2C_PORT_BATTERY 2
#define I2C_PORT_CHARGER 1
-#define I2C_PORT_IO_EXPANDER_IT8801 1
+#define IT8801_KEYBOARD_PWM_I2C_PORT 1
#define I2C_PORT_VIRTUAL_BATTERY I2C_PORT_BATTERY
+/* IT8801 I2C address */
+#define IT8801_KEYBOARD_PWM_I2C_ADDR_FLAGS IT8801_I2C_ADDR1
+
#define CONFIG_KEYBOARD_PROTOCOL_MKBP
#define CONFIG_MKBP_EVENT
#define CONFIG_MKBP_USE_GPIO
diff --git a/board/makomo/board.c b/board/makomo/board.c
index 70056b3f2c..1bb6b134a7 100644
--- a/board/makomo/board.c
+++ b/board/makomo/board.c
@@ -105,8 +105,8 @@ __override struct keyboard_scan_config keyscan_config = {
struct ioexpander_config_t ioex_config[CONFIG_IO_EXPANDER_PORT_COUNT] = {
[0] = {
- .i2c_host_port = I2C_PORT_IO_EXPANDER_IT8801,
- .i2c_addr_flags = IT8801_I2C_ADDR,
+ .i2c_host_port = IT8801_KEYBOARD_PWM_I2C_PORT,
+ .i2c_addr_flags = IT8801_I2C_ADDR1,
.drv = &it8801_ioexpander_drv,
},
};
diff --git a/board/makomo/board.h b/board/makomo/board.h
index 7fcbf74bb8..844fd95292 100644
--- a/board/makomo/board.h
+++ b/board/makomo/board.h
@@ -82,10 +82,13 @@
#define I2C_PORT_USB_MUX 0
#define I2C_PORT_CHARGER board_get_charger_i2c()
#define I2C_PORT_SENSORS 1
-#define I2C_PORT_IO_EXPANDER_IT8801 1
+#define IT8801_KEYBOARD_PWM_I2C_PORT 1
#define I2C_PORT_VIRTUAL_BATTERY I2C_PORT_BATTERY
#define I2C_PORT_BATTERY 2
+/* IT8801 I2C address */
+#define IT8801_KEYBOARD_PWM_I2C_ADDR_FLAGS IT8801_I2C_ADDR1
+
/* Enable Accel over SPI */
#define CONFIG_SPI_ACCEL_PORT 0 /* The first SPI master port (SPI2) */
diff --git a/board/munna/board.c b/board/munna/board.c
index cb5d818b22..f31c7a7e39 100644
--- a/board/munna/board.c
+++ b/board/munna/board.c
@@ -106,8 +106,8 @@ __override struct keyboard_scan_config keyscan_config = {
struct ioexpander_config_t ioex_config[CONFIG_IO_EXPANDER_PORT_COUNT] = {
[0] = {
- .i2c_host_port = I2C_PORT_IO_EXPANDER_IT8801,
- .i2c_addr_flags = IT8801_I2C_ADDR,
+ .i2c_host_port = IT8801_KEYBOARD_PWM_I2C_PORT,
+ .i2c_addr_flags = IT8801_I2C_ADDR1,
.drv = &it8801_ioexpander_drv,
},
};
diff --git a/board/munna/board.h b/board/munna/board.h
index f530c45781..baf68470e4 100644
--- a/board/munna/board.h
+++ b/board/munna/board.h
@@ -99,7 +99,7 @@
#define I2C_PORT_USB_MUX 0
#define I2C_PORT_CHARGER 2
#define I2C_PORT_SENSORS 2
-#define I2C_PORT_IO_EXPANDER_IT8801 2
+#define IT8801_KEYBOARD_PWM_I2C_PORT 2
#define I2C_PORT_VIRTUAL_BATTERY I2C_PORT_BATTERY
#define I2C_PORT_BATTERY 3
#define I2C_PORT_TCPC0 0
@@ -109,6 +109,9 @@
#define I2C_CONTROLLER_COUNT 3
#define I2C_PORT_COUNT 3
+/* IT8801 I2C address */
+#define IT8801_KEYBOARD_PWM_I2C_ADDR_FLAGS IT8801_I2C_ADDR1
+
/* Enable Accel over SPI */
#define CONFIG_SPI_ACCEL_PORT 0 /* The first SPI master port (SPI2) */
diff --git a/board/stern/board.c b/board/stern/board.c
index ce82554f16..609dfdf7e5 100644
--- a/board/stern/board.c
+++ b/board/stern/board.c
@@ -106,8 +106,8 @@ __override struct keyboard_scan_config keyscan_config = {
struct ioexpander_config_t ioex_config[CONFIG_IO_EXPANDER_PORT_COUNT] = {
[0] = {
- .i2c_host_port = I2C_PORT_IO_EXPANDER_IT8801,
- .i2c_addr_flags = IT8801_I2C_ADDR,
+ .i2c_host_port = IT8801_KEYBOARD_PWM_I2C_PORT,
+ .i2c_addr_flags = IT8801_I2C_ADDR1,
.drv = &it8801_ioexpander_drv,
},
};
diff --git a/board/stern/board.h b/board/stern/board.h
index cd3fa307c3..5bf23a6733 100644
--- a/board/stern/board.h
+++ b/board/stern/board.h
@@ -78,9 +78,12 @@
#define I2C_PORT_BATTERY 2
#define I2C_PORT_CHARGER board_get_charger_i2c()
#define I2C_PORT_SENSORS 1
-#define I2C_PORT_IO_EXPANDER_IT8801 1
+#define IT8801_KEYBOARD_PWM_I2C_PORT 1
#define I2C_PORT_VIRTUAL_BATTERY I2C_PORT_BATTERY
+/* IT8801 I2C address */
+#define IT8801_KEYBOARD_PWM_I2C_ADDR_FLAGS IT8801_I2C_ADDR1
+
/* Enable Accel over SPI */
#define CONFIG_SPI_ACCEL_PORT 0 /* The first SPI master port (SPI2) */
diff --git a/board/willow/board.c b/board/willow/board.c
index ea2171431b..ba467fddc2 100644
--- a/board/willow/board.c
+++ b/board/willow/board.c
@@ -103,8 +103,8 @@ __override struct keyboard_scan_config keyscan_config = {
struct ioexpander_config_t ioex_config[CONFIG_IO_EXPANDER_PORT_COUNT] = {
[0] = {
- .i2c_host_port = I2C_PORT_IO_EXPANDER_IT8801,
- .i2c_addr_flags = IT8801_I2C_ADDR,
+ .i2c_host_port = IT8801_KEYBOARD_PWM_I2C_PORT,
+ .i2c_addr_flags = IT8801_I2C_ADDR1,
.drv = &it8801_ioexpander_drv,
},
};
diff --git a/board/willow/board.h b/board/willow/board.h
index 5ef970e252..a6907b9a9e 100644
--- a/board/willow/board.h
+++ b/board/willow/board.h
@@ -73,10 +73,13 @@
#define I2C_PORT_USB_MUX 0
#define I2C_PORT_CHARGER board_get_charger_i2c()
#define I2C_PORT_SENSORS 1
-#define I2C_PORT_IO_EXPANDER_IT8801 1
+#define IT8801_KEYBOARD_PWM_I2C_PORT 1
#define I2C_PORT_VIRTUAL_BATTERY I2C_PORT_BATTERY
#define I2C_PORT_BATTERY 2
+/* IT8801 I2C address */
+#define IT8801_KEYBOARD_PWM_I2C_ADDR_FLAGS IT8801_I2C_ADDR1
+
/* Enable Accel over SPI */
#define CONFIG_SPI_ACCEL_PORT 0 /* The first SPI master port (SPI2) */
diff --git a/driver/ioexpander/it8801.c b/driver/ioexpander/it8801.c
index ebe1809f18..165e88f1df 100644
--- a/driver/ioexpander/it8801.c
+++ b/driver/ioexpander/it8801.c
@@ -22,14 +22,14 @@ static int it8801_ioex_set_level(int ioex, int port, int mask, int value);
static int it8801_read(int reg, int *data)
{
- return i2c_read8(I2C_PORT_IO_EXPANDER_IT8801, IT8801_I2C_ADDR,
- reg, data);
+ return i2c_read8(IT8801_KEYBOARD_PWM_I2C_PORT,
+ IT8801_KEYBOARD_PWM_I2C_ADDR_FLAGS, reg, data);
}
static int it8801_write(int reg, int data)
{
- return i2c_write8(I2C_PORT_IO_EXPANDER_IT8801, IT8801_I2C_ADDR,
- reg, data);
+ return i2c_write8(IT8801_KEYBOARD_PWM_I2C_PORT,
+ IT8801_KEYBOARD_PWM_I2C_ADDR_FLAGS, reg, data);
}
struct it8801_vendor_id_t {
diff --git a/driver/ioexpander/it8801.h b/driver/ioexpander/it8801.h
index 2b16c40bd6..ec38bba6af 100644
--- a/driver/ioexpander/it8801.h
+++ b/driver/ioexpander/it8801.h
@@ -10,7 +10,8 @@
#define __CROS_EC_IO_EXPANDER_IT8801_H
/* I2C address flags (7-bit without R/W) */
-#define IT8801_I2C_ADDR 0x38
+#define IT8801_I2C_ADDR1 0x38
+#define IT8801_I2C_ADDR2 0x39
/* Keyboard Matrix Scan control (KBS) */
#define IT8801_REG_KSOMCR 0x40
diff --git a/include/config.h b/include/config.h
index fdc1638d06..63dc4beb62 100644
--- a/include/config.h
+++ b/include/config.h
@@ -2570,7 +2570,15 @@
/* Support CCGXXF I/O expander built inside PD chip */
#undef CONFIG_IO_EXPANDER_CCGXXF
-/* Support IT8801 I/O expander. */
+/*
+ * Support IT8801 I/O expander.
+ *
+ * I2C address IT8801_KEYBOARD_PWM_I2C_ADDR_FLAGS and I2C port
+ * IT8801_KEYBOARD_PWM_I2C_PORT must be defined as well.
+ * Note: these values are only used when accessing the keyboard and PWM
+ * function of the IT8801 chip. I/O expander functions are accessed using
+ * the ioex_config[] array.
+ */
#undef CONFIG_IO_EXPANDER_IT8801
/* Support Nuvoton NCT38xx I/O expander. */