summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEdward Hill <ecgh@chromium.org>2020-03-17 23:29:25 -0600
committerCommit Bot <commit-bot@chromium.org>2020-03-20 18:14:20 +0000
commit32a40f3a2cfe46607e5d259927aec67c3c7d47ef (patch)
tree85d75c7775b3f17064e22844cfc1786e8212a81f
parenteedeace7ae301aca482d6a2f5a2d722e1e0cec31 (diff)
downloadchrome-ec-32a40f3a2cfe46607e5d259927aec67c3c7d47ef.tar.gz
dalboz: select GPIOs based on DB option
BUG=b:150349225 BRANCH=none TEST=none Signed-off-by: Edward Hill <ecgh@chromium.org> Change-Id: I7079d989013e022fb0bc7ffa925f51e6490d864c Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2101223 Reviewed-by: Denis Brockus <dbrockus@chromium.org> Reviewed-by: Paul Ma <magf@bitland.corp-partner.google.com> Tested-by: Paul Ma <magf@bitland.corp-partner.google.com>
-rw-r--r--baseboard/zork/baseboard.c5
-rw-r--r--baseboard/zork/variant_dalboz.c31
-rw-r--r--baseboard/zork/variant_trembyle.c9
-rw-r--r--board/dalboz/board.c35
-rw-r--r--board/dalboz/board.h4
-rw-r--r--board/dalboz/gpio.inc23
6 files changed, 80 insertions, 27 deletions
diff --git a/baseboard/zork/baseboard.c b/baseboard/zork/baseboard.c
index 19e167a45e..ad2482a432 100644
--- a/baseboard/zork/baseboard.c
+++ b/baseboard/zork/baseboard.c
@@ -406,11 +406,6 @@ void bc12_interrupt(enum gpio_signal signal)
}
}
-const int usb_port_enable[USB_PORT_COUNT] = {
- IOEX_EN_USB_A0_5V,
- IOEX_EN_USB_A1_5V_DB,
-};
-
static void baseboard_chipset_suspend(void)
{
/* Disable display and keyboard backlights. */
diff --git a/baseboard/zork/variant_dalboz.c b/baseboard/zork/variant_dalboz.c
index 753b77b0ca..b45b009218 100644
--- a/baseboard/zork/variant_dalboz.c
+++ b/baseboard/zork/variant_dalboz.c
@@ -14,21 +14,9 @@
#include "ioexpander_nct38xx.h"
#include "usb_mux.h"
-void baseboard_tcpc_init(void)
-{
- /* Enable PPC interrupts. */
- gpio_enable_interrupt(GPIO_USB_C0_PPC_FAULT_ODL);
- gpio_enable_interrupt(GPIO_USB_C1_PPC_INT_ODL);
-
- /* Enable TCPC interrupts. */
- gpio_enable_interrupt(GPIO_USB_C0_TCPC_INT_ODL);
- gpio_enable_interrupt(GPIO_USB_C1_TCPC_INT_ODL);
-
- /* Enable BC 1.2 interrupts */
- gpio_enable_interrupt(GPIO_USB_C0_BC12_INT_ODL);
- gpio_enable_interrupt(GPIO_USB_C1_BC12_INT_ODL);
-}
-DECLARE_HOOK(HOOK_INIT, baseboard_tcpc_init, HOOK_PRIO_INIT_I2C + 1);
+/*****************************************************************************
+ * IO expander
+ */
struct ioexpander_config_t ioex_config[] = {
[IOEX_C0_NCT3807] = {
@@ -51,6 +39,15 @@ struct ioexpander_config_t ioex_config[] = {
};
BUILD_ASSERT(ARRAY_SIZE(ioex_config) == CONFIG_IO_EXPANDER_PORT_COUNT);
+/*****************************************************************************
+ * USB-A
+ */
+
+const int usb_port_enable[USB_PORT_COUNT] = {
+ IOEX_EN_USB_A0_5V,
+ IOEX_EN_USB_A1_5V_DB_OPT1,
+};
+
static void usba_retimer_on(void)
{
ioex_set_level(IOEX_USB_A1_RETIMER_EN, 1);
@@ -63,6 +60,10 @@ static void usba_retimer_off(void)
}
DECLARE_HOOK(HOOK_CHIPSET_SHUTDOWN, usba_retimer_off, HOOK_PRIO_DEFAULT);
+/*****************************************************************************
+ * USB-C
+ */
+
/*
* USB C0 port SBU mux use standalone FSUSB42UMX
* chip and it need a board specific driver.
diff --git a/baseboard/zork/variant_trembyle.c b/baseboard/zork/variant_trembyle.c
index f33f66f32e..e73604038c 100644
--- a/baseboard/zork/variant_trembyle.c
+++ b/baseboard/zork/variant_trembyle.c
@@ -146,6 +146,15 @@ void mst_hpd_interrupt(enum ioex_signal signal)
}
/*****************************************************************************
+ * USB-A Power
+ */
+
+const int usb_port_enable[USB_PORT_COUNT] = {
+ IOEX_EN_USB_A0_5V,
+ IOEX_EN_USB_A1_5V_DB,
+};
+
+/*****************************************************************************
* Custom Zork USB-C1 Retimer/MUX driver
*/
diff --git a/board/dalboz/board.c b/board/dalboz/board.c
index e4397b1522..04b8b4ca2a 100644
--- a/board/dalboz/board.c
+++ b/board/dalboz/board.c
@@ -12,6 +12,7 @@
#include "fan.h"
#include "fan_chip.h"
#include "gpio.h"
+#include "hooks.h"
#include "lid_switch.h"
#include "power.h"
#include "power_button.h"
@@ -127,6 +128,40 @@ unsigned int motion_sensor_count = ARRAY_SIZE(motion_sensors);
#endif /* HAS_TASK_MOTIONSENSE */
+/* These IO expander GPIOs vary with DB option. */
+enum gpio_signal IOEX_USB_A1_RETIMER_EN = IOEX_USB_A1_RETIMER_EN_OPT1;
+enum gpio_signal IOEX_USB_A1_CHARGE_EN_DB_L = IOEX_USB_A1_CHARGE_EN_DB_L_OPT1;
+
+static void setup_usb_db(void)
+{
+ if (ec_config_get_usb_db() == DALBOZ_DB_D_OPT2_USBA_HDMI) {
+ ccprints("DB OPT2 HDMI");
+ ioex_config[IOEX_HDMI_PCAL6408].flags = 0;
+ ioex_init(IOEX_HDMI_PCAL6408);
+ IOEX_USB_A1_RETIMER_EN = IOEX_USB_A1_RETIMER_EN_OPT2;
+ IOEX_USB_A1_CHARGE_EN_DB_L = IOEX_USB_A1_CHARGE_EN_DB_L_OPT2;
+ } else {
+ ccprints("DB OPT1 USBC");
+ ioex_config[IOEX_C1_NCT3807].flags = 0;
+ ioex_init(IOEX_C1_NCT3807);
+ IOEX_USB_A1_RETIMER_EN = IOEX_USB_A1_RETIMER_EN_OPT1;
+ IOEX_USB_A1_CHARGE_EN_DB_L = IOEX_USB_A1_CHARGE_EN_DB_L_OPT1;
+ }
+
+ /* Enable PPC interrupts. */
+ gpio_enable_interrupt(GPIO_USB_C0_PPC_FAULT_ODL);
+ gpio_enable_interrupt(GPIO_USB_C1_PPC_INT_ODL);
+
+ /* Enable TCPC interrupts. */
+ gpio_enable_interrupt(GPIO_USB_C0_TCPC_INT_ODL);
+ gpio_enable_interrupt(GPIO_USB_C1_TCPC_INT_ODL);
+
+ /* Enable BC 1.2 interrupts */
+ gpio_enable_interrupt(GPIO_USB_C0_BC12_INT_ODL);
+ gpio_enable_interrupt(GPIO_USB_C1_BC12_INT_ODL);
+}
+DECLARE_HOOK(HOOK_INIT, setup_usb_db, HOOK_PRIO_INIT_I2C + 2);
+
void board_update_sensor_config_from_sku(void)
{
/* Enable Gyro interrupts */
diff --git a/board/dalboz/board.h b/board/dalboz/board.h
index 07a1ea56a1..44b2a1234b 100644
--- a/board/dalboz/board.h
+++ b/board/dalboz/board.h
@@ -142,6 +142,10 @@ static inline bool ec_config_has_usbc1_retimer_ps8740(void)
HAS_USBC1_RETIMER_PS8740);
}
+/* These IO expander GPIOs vary with DB option. */
+extern enum gpio_signal IOEX_USB_A1_RETIMER_EN;
+extern enum gpio_signal IOEX_USB_A1_CHARGE_EN_DB_L;
+
#endif /* !__ASSEMBLER__ */
#endif /* __CROS_EC_BOARD_H */
diff --git a/board/dalboz/gpio.inc b/board/dalboz/gpio.inc
index 05950f45c6..fb69562fdf 100644
--- a/board/dalboz/gpio.inc
+++ b/board/dalboz/gpio.inc
@@ -50,27 +50,36 @@ GPIO(DP1_HPD, PIN(F, 4), GPIO_OUT_LOW) /* C1 DP Hotplug Detect */
GPIO(LED_FULL_L, PIN(6, 0), GPIO_OUT_HIGH)
GPIO(LED_CHRG_L, PIN(C, 0), GPIO_OUT_HIGH)
-IOEX_INT(HDMI_CONN_HPD_3V3_DB, EXPIN(IOEX_C1_NCT3807, 1, 0), GPIO_INT_BOTH, hdmi_hpd_interrupt)
+/*
+ * Dalboz has 2 DB options, with different IO expanders. IOEX_C1_NCT3807 is the
+ * OPT1 DB (USB-C1), IOEX_HDMI_PCAL6408 is the OPT2 DB (HDMI).
+ */
+
+IOEX_INT(HDMI_CONN_HPD_3V3_DB, EXPIN(IOEX_HDMI_PCAL6408, 0, 4), GPIO_INT_BOTH, hdmi_hpd_interrupt)
IOEX(USB_C0_FAULT_ODL, EXPIN(IOEX_C0_NCT3807, 0, 3), GPIO_ODR_HIGH) /* C0 Fault to SOC */
IOEX(USB_C0_TCPC_FASTSW_CTL_EN, EXPIN(IOEX_C0_NCT3807, 0, 4), GPIO_OUT_LOW) /* C0 FastSwitch Control */
IOEX(USB_C1_FAULT_ODL, EXPIN(IOEX_C0_NCT3807, 1, 0), GPIO_ODR_HIGH) /* C1 Fault to SOC */
IOEX(USB_C0_PPC_ILIM_3A_EN, EXPIN(IOEX_C0_NCT3807, 1, 1), GPIO_OUT_LOW) /* C0 3A Current Limit Enable */
-IOEX(USB_C0_SBU_FAULT_ODL, EXPIN(IOEX_C0_NCT3807, 1, 2), GPIO_INPUT) /* C0 SBU Fault */
+IOEX(USB_C0_SBU_FAULT_ODL, EXPIN(IOEX_C0_NCT3807, 1, 2), GPIO_INPUT) /* C0 SBU Fault */
IOEX(KB_BL_EN, EXPIN(IOEX_C0_NCT3807, 1, 3), GPIO_OUT_LOW) /* KB Backlight Enable */
IOEX(EN_USB_A0_5V, EXPIN(IOEX_C0_NCT3807, 1, 5), GPIO_OUT_LOW) /* A0 5V Source Enable */
IOEX(USB_A0_CHARGE_EN_L, EXPIN(IOEX_C0_NCT3807, 1, 6), GPIO_OUT_HIGH) /* A0 5V High Current Enable */
IOEX(USB_C0_SBU_FLIP, EXPIN(IOEX_C0_NCT3807, 1, 7), GPIO_OUT_LOW) /* C0 SBU Flip */
-IOEX(USB_A1_RETIMER_EN, EXPIN(IOEX_C1_NCT3807, 0, 0), GPIO_OUT_LOW) /* A1 Retimer Enable */
+IOEX(USB_A1_RETIMER_EN_OPT1, EXPIN(IOEX_C1_NCT3807, 0, 0), GPIO_OUT_LOW) /* A1 Retimer Enable */
IOEX(USB_C1_HPD_IN_DB, EXPIN(IOEX_C1_NCT3807, 0, 2), GPIO_OUT_LOW) /* C1 HPD */
IOEX(USB_C1_TCPC_FASTSW_CTL_EN, EXPIN(IOEX_C1_NCT3807, 0, 4), GPIO_OUT_LOW) /* C1 FastSwitch Control */
-IOEX(USB_C1_SBU_FAULT_DB_ODL, EXPIN(IOEX_C1_NCT3807, 1, 2), GPIO_INPUT) /* C1 SBU Fault */
+IOEX(USB_C1_SBU_FAULT_DB_ODL, EXPIN(IOEX_C1_NCT3807, 1, 2), GPIO_INPUT) /* C1 SBU Fault */
IOEX(USB_C1_PPC_EN_L, EXPIN(IOEX_C1_NCT3807, 1, 3), GPIO_OUT_LOW) /* C1 PPC Enable */
-IOEX(HDMI_DATA_EN_DB, EXPIN(IOEX_C1_NCT3807, 1, 4), GPIO_OUT_HIGH) /* HDMI Retimer Enable */
IOEX(USB_C1_DATA_EN, EXPIN(IOEX_C1_NCT3807, 1, 5), GPIO_OUT_HIGH) /* C1 Retimer Enable */
-IOEX(EN_USB_A1_5V_DB, EXPIN(IOEX_C1_NCT3807, 1, 6), GPIO_OUT_LOW) /* A1 5V Source Enable */
-IOEX(USB_A1_CHARGE_EN_DB_L, EXPIN(IOEX_C1_NCT3807, 1, 7), GPIO_OUT_HIGH) /* A1 5V High Current Enable */
+IOEX(EN_USB_A1_5V_DB_OPT1, EXPIN(IOEX_C1_NCT3807, 1, 6), GPIO_OUT_LOW) /* A1 5V Source Enable */
+IOEX(USB_A1_CHARGE_EN_DB_L_OPT1,EXPIN(IOEX_C1_NCT3807, 1, 7), GPIO_OUT_HIGH) /* A1 5V High Current Enable */
+
+IOEX(USB_A1_RETIMER_EN_OPT2, EXPIN(IOEX_HDMI_PCAL6408, 0, 0), GPIO_OUT_LOW) /* A1 Retimer Enable */
+IOEX(EN_USB_A1_5V_DB_OPT2, EXPIN(IOEX_HDMI_PCAL6408, 0, 1), GPIO_OUT_LOW) /* A1 5V Source Enable */
+IOEX(USB_A1_CHARGE_EN_DB_L_OPT2,EXPIN(IOEX_HDMI_PCAL6408, 0, 2), GPIO_OUT_HIGH) /* A1 5V High Current Enable */
+IOEX(HDMI_DATA_EN_DB, EXPIN(IOEX_HDMI_PCAL6408, 0, 3), GPIO_OUT_HIGH) /* HDMI Retimer Enable */
/*
* The NPCX LPC driver configures and controls SCI, so PCH_SCI_ODL [PIN(7, 6)]