summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlschyi <lschyi@google.com>2023-05-04 09:19:22 +0800
committerChromeos LUCI <chromeos-scoped@luci-project-accounts.iam.gserviceaccount.com>2023-05-05 08:42:56 +0000
commitc80b085203bfb1b9b69e1bb4347ace692464f8b3 (patch)
tree6422558163740afad64d6e68bb77cca0c76086ce
parent3a3a4fc9058904312088c9d3daf7013098637456 (diff)
downloadchrome-ec-c80b085203bfb1b9b69e1bb4347ace692464f8b3.tar.gz
corosla: Improve USB-C port configuration
The number of USB-C port configuration is hard coded in the config file and is set to 2. This becomes a blocker for boards with different number of USB-C ports, as the build assertion assumes the number of UBC-C ports and the number of USB PD ports is euqal, yet USB PD ports is determined by the dts configuration. Update the USB-C ports configuration by using macro `LISTIFY` to generate the UBS-C ports configuration, and also add logic to make different number of USB-C port compatible with implementation in corsola projects. BUG=b:274723043 TEST=`zmake build <all board> --clobber`, and test the dp, usb functionality on Krabby proto 1 board. Change-Id: I04622ec5d6bc4e7f396517e3f8e9b024ced078e8 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/4505771 Reviewed-by: Ting Shen <phoenixshen@chromium.org> Commit-Queue: Sung-Chi Li <lschyi@chromium.org> Tested-by: Sung-Chi Li <lschyi@chromium.org>
-rw-r--r--zephyr/program/corsola/include/baseboard_usbc_config.h9
-rw-r--r--zephyr/program/corsola/src/ite_usbc.c25
-rw-r--r--zephyr/program/corsola/src/npcx_usbc.c10
-rw-r--r--zephyr/program/corsola/src/usb_pd_policy.c4
-rw-r--r--zephyr/program/corsola/src/usbc.c4
5 files changed, 34 insertions, 18 deletions
diff --git a/zephyr/program/corsola/include/baseboard_usbc_config.h b/zephyr/program/corsola/include/baseboard_usbc_config.h
index e5ade293b4..5d3195ab7f 100644
--- a/zephyr/program/corsola/include/baseboard_usbc_config.h
+++ b/zephyr/program/corsola/include/baseboard_usbc_config.h
@@ -10,6 +10,8 @@
#include "gpio.h"
+#include <zephyr/sys/util_macro.h>
+
#ifdef CONFIG_PLATFORM_EC_USB_PD_TCPM_RT1718S
#define GPIO_EN_USB_C1_SINK RT1718S_GPIO1
#define GPIO_EN_USB_C1_SOURCE RT1718S_GPIO2
@@ -27,8 +29,11 @@ int ps8743_eq_c1_setting(void);
enum usba_port { USBA_PORT_A0 = 0, USBA_PORT_COUNT };
/* USB-C ports */
-enum usbc_port { USBC_PORT_C0 = 0, USBC_PORT_C1, USBC_PORT_COUNT };
-BUILD_ASSERT(USBC_PORT_COUNT == CONFIG_USB_PD_PORT_MAX_COUNT);
+#define USBC_PORT_N(i, _) USBC_PORT_C##i = i
+enum usbc_port {
+ LISTIFY(CONFIG_USB_PD_PORT_MAX_COUNT, USBC_PORT_N, (, )),
+ USBC_PORT_COUNT
+};
/**
* Is the port fine to be muxed its DisplayPort lines?
diff --git a/zephyr/program/corsola/src/ite_usbc.c b/zephyr/program/corsola/src/ite_usbc.c
index 4496053b6b..395cafcc01 100644
--- a/zephyr/program/corsola/src/ite_usbc.c
+++ b/zephyr/program/corsola/src/ite_usbc.c
@@ -15,10 +15,18 @@
#include "variant_db_detection.h"
#include "zephyr_adc.h"
+#include <zephyr/sys/util_macro.h>
+
#define CPRINTSUSB(format, args...) cprints(CC_USBCHARGE, format, ##args)
#define CPRINTS(format, args...) cprints(CC_SYSTEM, format, ##args)
#define CPRINTF(format, args...) cprintf(CC_SYSTEM, format, ##args)
+#define ITE_CC_PARAMETER(i, _) \
+ { \
+ .rising_time = IT83XX_TX_PRE_DRIVING_TIME_1_UNIT, \
+ .falling_time = IT83XX_TX_PRE_DRIVING_TIME_2_UNIT \
+ }
+
int tusb1064_mux_1_board_init(const struct usb_mux *me)
{
int rv;
@@ -40,20 +48,9 @@ int tusb1064_mux_1_board_init(const struct usb_mux *me)
const struct cc_para_t *board_get_cc_tuning_parameter(enum usbpd_port port)
{
const static struct cc_para_t
- cc_parameter[CONFIG_USB_PD_ITE_ACTIVE_PORT_COUNT] = {
- {
- .rising_time =
- IT83XX_TX_PRE_DRIVING_TIME_1_UNIT,
- .falling_time =
- IT83XX_TX_PRE_DRIVING_TIME_2_UNIT,
- },
- {
- .rising_time =
- IT83XX_TX_PRE_DRIVING_TIME_1_UNIT,
- .falling_time =
- IT83XX_TX_PRE_DRIVING_TIME_2_UNIT,
- },
- };
+ cc_parameter[CONFIG_USB_PD_ITE_ACTIVE_PORT_COUNT] = { LISTIFY(
+ CONFIG_USB_PD_ITE_ACTIVE_PORT_COUNT, ITE_CC_PARAMETER,
+ (, )) };
return &cc_parameter[port];
}
diff --git a/zephyr/program/corsola/src/npcx_usbc.c b/zephyr/program/corsola/src/npcx_usbc.c
index 0ee6a43dc1..10a977696e 100644
--- a/zephyr/program/corsola/src/npcx_usbc.c
+++ b/zephyr/program/corsola/src/npcx_usbc.c
@@ -59,10 +59,12 @@ void board_tcpc_init(void)
board_reset_pd_mcu();
}
+#if CONFIG_USB_PD_PORT_MAX_COUNT > 1
/* Do not enable TCPC interrupt on port 1 if not type-c */
if (corsola_get_db_type() != CORSOLA_DB_TYPEC) {
tcpc_config[USBC_PORT_C1].irq_gpio.port = NULL;
}
+#endif /* CONFIG_USB_PD_PORT_MAX_COUNT > 1 */
/* Enable BC1.2 interrupts. */
gpio_enable_dt_interrupt(GPIO_INT_FROM_NODELABEL(int_usb_c0_bc12));
@@ -118,6 +120,7 @@ __override int board_rt1718s_init(int port)
return EC_SUCCESS;
}
+#if CONFIG_USB_PD_PORT_MAX_COUNT > 1
__override int board_rt1718s_set_frs_enable(int port, int enable)
{
if (port == USBC_PORT_C1)
@@ -130,6 +133,7 @@ __override int board_rt1718s_set_frs_enable(int port, int enable)
enable ? GPIO_OUT_HIGH : GPIO_OUT_LOW);
return EC_SUCCESS;
}
+#endif /* CONFIG_USB_PD_PORT_MAX_COUNT > 1 */
void board_reset_pd_mcu(void)
{
@@ -144,8 +148,10 @@ void board_reset_pd_mcu(void)
*/
msleep(2);
+#if CONFIG_USB_PD_PORT_MAX_COUNT > 1
/* reset C1 RT1718s */
rt1718s_sw_reset(USBC_PORT_C1);
+#endif /* CONFIG_USB_PD_PORT_MAX_COUNT > 1 */
}
/* Used by Vbus discharge common code with CONFIG_USB_PD_DISCHARGE */
@@ -154,6 +160,7 @@ int board_vbus_source_enabled(int port)
return ppc_is_sourcing_vbus(port);
}
+#if CONFIG_USB_PD_PORT_MAX_COUNT > 1
__override int board_rt1718s_set_snk_enable(int port, int enable)
{
if (port == USBC_PORT_C1) {
@@ -162,6 +169,7 @@ __override int board_rt1718s_set_snk_enable(int port, int enable)
return EC_SUCCESS;
}
+#endif /* CONFIG_USB_PD_PORT_MAX_COUNT > 1 */
int board_set_active_charge_port(int port)
{
@@ -253,9 +261,11 @@ __override int board_get_vbus_voltage(int port)
if (rv)
return 0;
break;
+#if CONFIG_USB_PD_PORT_MAX_COUNT > 1
case USBC_PORT_C1:
rt1718s_get_adc(port, RT1718S_ADC_VBUS1, &voltage);
break;
+#endif /* CONFIG_USB_PD_PORT_MAX_COUNT > 1 */
default:
return 0;
}
diff --git a/zephyr/program/corsola/src/usb_pd_policy.c b/zephyr/program/corsola/src/usb_pd_policy.c
index 06750149b9..30ded99aba 100644
--- a/zephyr/program/corsola/src/usb_pd_policy.c
+++ b/zephyr/program/corsola/src/usb_pd_policy.c
@@ -229,7 +229,7 @@ void pd_power_supply_reset(int port)
prev_en = ppc_is_sourcing_vbus(port);
-#ifdef CONFIG_USB_PD_TCPM_RT1718S
+#if defined(CONFIG_USB_PD_TCPM_RT1718S) && CONFIG_USB_PD_PORT_MAX_COUNT > 1
if (port == USBC_PORT_C1) {
rt1718s_gpio_set_level(port, GPIO_EN_USB_C1_SOURCE, 0);
}
@@ -254,7 +254,7 @@ int pd_set_power_supply_ready(int port)
pd_set_vbus_discharge(port, 0);
-#ifdef CONFIG_USB_PD_TCPM_RT1718S
+#if defined(CONFIG_USB_PD_TCPM_RT1718S) && CONFIG_USB_PD_PORT_MAX_COUNT > 1
/* Provide Vbus. */
if (port == USBC_PORT_C1) {
rt1718s_gpio_set_level(port, GPIO_EN_USB_C1_SOURCE, 1);
diff --git a/zephyr/program/corsola/src/usbc.c b/zephyr/program/corsola/src/usbc.c
index 7b6cb92d4c..5a97744724 100644
--- a/zephyr/program/corsola/src/usbc.c
+++ b/zephyr/program/corsola/src/usbc.c
@@ -138,6 +138,7 @@ void x_ec_interrupt(enum gpio_signal signal)
}
}
+#ifdef CONFIG_VARIANT_CORSOLA_DB_DETECTION
static void board_hdmi_handler(struct ap_power_ev_callback *cb,
struct ap_power_ev_data data)
{
@@ -158,6 +159,7 @@ static void board_hdmi_handler(struct ap_power_ev_callback *cb,
gpio_pin_set_dt(GPIO_DT_FROM_ALIAS(gpio_en_hdmi_pwr), value);
gpio_pin_set_dt(GPIO_DT_FROM_ALIAS(gpio_ps185_pwrdn_odl), value);
}
+#endif /* CONFIG_VARIANT_CORSOLA_DB_DETECTION */
static void tasks_init_deferred(void)
{
@@ -172,6 +174,7 @@ static void tasks_init_deferred(void)
}
DECLARE_DEFERRED(tasks_init_deferred);
+#ifdef CONFIG_VARIANT_CORSOLA_DB_DETECTION
static void baseboard_x_ec_gpio2_init(void)
{
static struct ppc_drv virtual_ppc_drv = { 0 };
@@ -236,3 +239,4 @@ __override uint8_t get_dp_pin_mode(int port)
return pd_dfp_dp_get_pin_mode(port, dp_status[port]);
}
+#endif /* CONFIG_VARIANT_CORSOLA_DB_DETECTION */