summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTing Shen <phoenixshen@google.com>2019-09-05 01:20:19 +0800
committerCommit Bot <commit-bot@chromium.org>2019-09-05 11:09:00 +0000
commit5094437e865bb00c672288b5420b3a257c14d236 (patch)
tree45684833fab426f5436d599bbd23d81833cb20e8
parent7c16f9c666f20daf9c360678f92fcc7145665315 (diff)
downloadchrome-ec-5094437e865bb00c672288b5420b3a257c14d236.tar.gz
krane: add it5205 driver
An it5205 is added in kukui/krane rev 5, and deprecated gpio pin USB_C0_DP_OE_L and USB_C0_DP_POLARITY. This CL is intended to make the fw works for both old and new boards: 1) the default usb_mux driver is updated to rev 5, and board_rev_init may change it back for old boards. 2) keep VARIANT_KUKUI_DP_MUX_GPIO in kukui/board.h, and add a customized function to set/clear these gpio pins. BUG=b:135079572 TEST=verify that type c display works on board rev 4/5 BRANCH=master Change-Id: Ibe28816eed026ccb8a9a5234a612f80b038884f1 Signed-off-by: Ting Shen <phoenixshen@google.com> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/1785197 Reviewed-by: Yilun Lin <yllin@chromium.org> Commit-Queue: Ting Shen <phoenixshen@chromium.org> Tested-by: Ting Shen <phoenixshen@chromium.org>
-rw-r--r--baseboard/kukui/baseboard.h8
-rw-r--r--baseboard/kukui/usb_pd_policy.c13
-rw-r--r--board/kukui/board.c32
-rw-r--r--board/kukui/board.h2
-rw-r--r--board/kukui/gpio.inc5
5 files changed, 47 insertions, 13 deletions
diff --git a/baseboard/kukui/baseboard.h b/baseboard/kukui/baseboard.h
index b22b1cdf01..c1d99db39b 100644
--- a/baseboard/kukui/baseboard.h
+++ b/baseboard/kukui/baseboard.h
@@ -56,6 +56,8 @@
* Define this flag if board controls dp mux via gpio pins USB_C0_DP_OE_L and
* USB_C0_DP_POLARITY.
*
+ * board must provide function board_set_dp_mux_control(output_enable, polarity)
+ *
* #define VARIANT_KUKUI_DP_MUX_GPIO
*/
@@ -219,4 +221,10 @@
#define CONFIG_MKBP_EVENT
#define CONFIG_MKBP_USE_GPIO
+#ifndef __ASSEMBLER__
+#ifdef VARIANT_KUKUI_DP_MUX_GPIO
+void board_set_dp_mux_control(int output_enable, int polarity);
+#endif /* VARIANT_KUKUI_DP_MUX_GPIO */
+#endif /* !__ASSEMBLER__ */
+
#endif /* __CROS_EC_BASEBOARD_H */
diff --git a/baseboard/kukui/usb_pd_policy.c b/baseboard/kukui/usb_pd_policy.c
index 95ed4290b7..d6b5ddf764 100644
--- a/baseboard/kukui/usb_pd_policy.c
+++ b/baseboard/kukui/usb_pd_policy.c
@@ -318,8 +318,7 @@ static void svdm_dp_post_config(int port)
gpio_set_level(GPIO_USB_C0_HPD_OD, 1);
#ifdef VARIANT_KUKUI_DP_MUX_GPIO
- gpio_set_level(GPIO_USB_C0_DP_OE_L, 0);
- gpio_set_level(GPIO_USB_C0_DP_POLARITY, board_get_polarity(port));
+ board_set_dp_mux_control(1, board_get_polarity(port));
#endif
/* set the minimum time delay (2ms) for the next HPD IRQ */
@@ -357,9 +356,7 @@ static int svdm_dp_attention(int port, uint32_t *payload)
gpio_set_level(GPIO_USB_C0_HPD_OD, 1);
#ifdef VARIANT_KUKUI_DP_MUX_GPIO
- gpio_set_level(GPIO_USB_C0_DP_OE_L, 0);
- gpio_set_level(GPIO_USB_C0_DP_POLARITY,
- board_get_polarity(port));
+ board_set_dp_mux_control(1, board_get_polarity(port));
#endif
/* set the minimum time delay (2ms) for the next HPD IRQ */
@@ -370,9 +367,7 @@ static int svdm_dp_attention(int port, uint32_t *payload)
} else {
gpio_set_level(GPIO_USB_C0_HPD_OD, lvl);
#ifdef VARIANT_KUKUI_DP_MUX_GPIO
- gpio_set_level(GPIO_USB_C0_DP_OE_L, !lvl);
- gpio_set_level(GPIO_USB_C0_DP_POLARITY,
- board_get_polarity(port));
+ board_set_dp_mux_control(lvl, board_get_polarity(port));
#endif
/* set the minimum time delay (2ms) for the next HPD IRQ */
hpd_deadline[port] = get_time().val + HPD_USTREAM_DEBOUNCE_LVL;
@@ -389,7 +384,7 @@ static void svdm_exit_dp_mode(int port)
svdm_safe_dp_mode(port);
gpio_set_level(GPIO_USB_C0_HPD_OD, 0);
#ifdef VARIANT_KUKUI_DP_MUX_GPIO
- gpio_set_level(GPIO_USB_C0_DP_OE_L, 1);
+ board_set_dp_mux_control(0, 0);
#endif
mux->hpd_update(port, 0, 0);
}
diff --git a/board/kukui/board.c b/board/kukui/board.c
index 3eb28bb4c7..a19b92d6cb 100644
--- a/board/kukui/board.c
+++ b/board/kukui/board.c
@@ -19,6 +19,7 @@
#include "driver/charger/rt946x.h"
#include "driver/sync.h"
#include "driver/tcpm/mt6370.h"
+#include "driver/usb_mux/it5205.h"
#include "extpower.h"
#include "gpio.h"
#include "hooks.h"
@@ -100,10 +101,30 @@ const struct tcpc_config_t tcpc_config[CONFIG_USB_PD_PORT_COUNT] = {
},
};
+void board_set_dp_mux_control(int output_enable, int polarity)
+{
+ if (board_get_version() >= 5)
+ return;
+
+ gpio_set_level(GPIO_USB_C0_DP_OE_L, !output_enable);
+ if (output_enable)
+ gpio_set_level(GPIO_USB_C0_DP_POLARITY, polarity);
+}
+
+static void board_hpd_update(int port, int hpd_lvl, int hpd_irq)
+{
+ /*
+ * svdm_dp_attention() did most of the work, we only need to notify
+ * host here.
+ */
+ host_set_single_event(EC_HOST_EVENT_USB_MUX);
+}
+
struct usb_mux usb_muxes[CONFIG_USB_PD_PORT_COUNT] = {
{
- .driver = &virtual_usb_mux_driver,
- .hpd_update = &virtual_hpd_update,
+ .port_addr = IT5205_I2C_ADDR1_FLAGS,
+ .driver = &it5205_usb_mux_driver,
+ .hpd_update = &board_hpd_update,
},
};
@@ -301,6 +322,13 @@ static void board_rev_init(void)
(PI3USB9201_USB_PATH_ON <<
PI3USB9201_REG_CTRL_1_MODE_SHIFT));
}
+
+ if (board_get_version() < 5) {
+ gpio_set_flags(GPIO_USB_C0_DP_OE_L, GPIO_OUT_HIGH);
+ gpio_set_flags(GPIO_USB_C0_DP_POLARITY, GPIO_OUT_LOW);
+ usb_muxes[0].driver = &virtual_usb_mux_driver;
+ usb_muxes[0].hpd_update = &virtual_hpd_update;
+ }
}
DECLARE_HOOK(HOOK_INIT, board_rev_init, HOOK_PRIO_INIT_ADC + 1);
diff --git a/board/kukui/board.h b/board/kukui/board.h
index 4fd1a76a50..c7d2da1ed9 100644
--- a/board/kukui/board.h
+++ b/board/kukui/board.h
@@ -23,6 +23,7 @@
#include "baseboard.h"
+#define CONFIG_USB_MUX_IT5205
#define CONFIG_VOLUME_BUTTONS
/* Battery */
@@ -74,6 +75,7 @@
/* I2C ports */
#define I2C_PORT_CHARGER 0
#define I2C_PORT_TCPC0 0
+#define I2C_PORT_USB_MUX 0
#define I2C_PORT_BATTERY 1
#define I2C_PORT_VIRTUAL_BATTERY I2C_PORT_BATTERY
#define I2C_PORT_ACCEL 1
diff --git a/board/kukui/gpio.inc b/board/kukui/gpio.inc
index f9ddacc6ec..e90644432b 100644
--- a/board/kukui/gpio.inc
+++ b/board/kukui/gpio.inc
@@ -48,6 +48,9 @@ GPIO_INT(POGO_ADC_INT_L, PIN(A, 6), GPIO_INT_BOTH,
/* unused */
GPIO(POGO_VBUS_PRESENT, PIN(A, 14), GPIO_INPUT)
+/* unused after board rev 5 */
+GPIO(USB_C0_DP_POLARITY, PIN(C, 14), GPIO_INPUT)
+GPIO(USB_C0_DP_OE_L, PIN(A, 5), GPIO_INPUT)
/* Reset pins */
@@ -80,10 +83,8 @@ GPIO(CCD_MODE_ODL, PIN(A, 1), GPIO_INPUT)
GPIO(ENTERING_RW, PIN(C, 6), GPIO_ODR_HIGH) /* EC_ENTERING_RW_ODL */
GPIO(EC_INT_L, PIN(B, 12), GPIO_ODR_HIGH) /* EC_AP_INT_ODL */
GPIO(EC_BOARD_ID_EN_L, PIN(C, 15), GPIO_ODR_HIGH) /* EC_BOARD_ID_EN_ODL */
-GPIO(USB_C0_DP_POLARITY, PIN(C, 14), GPIO_OUT_LOW)
GPIO(USB_C0_HPD_OD, PIN(F, 1), GPIO_ODR_LOW)
GPIO(BOOTBLOCK_EN_L, PIN(C, 1), GPIO_ODR_HIGH)
-GPIO(USB_C0_DP_OE_L, PIN(A, 5), GPIO_OUT_HIGH)
GPIO(EN_PP3300_POGO, PIN(A, 13), GPIO_OUT_LOW)
GPIO(EN_POGO_CHARGE_L, PIN(B, 6), GPIO_OUT_HIGH)
GPIO(EN_USBC_CHARGE_L, PIN(C, 7), GPIO_OUT_LOW)