diff options
author | lschyi <lschyi@google.com> | 2023-05-04 09:19:22 +0800 |
---|---|---|
committer | Chromeos LUCI <chromeos-scoped@luci-project-accounts.iam.gserviceaccount.com> | 2023-05-05 08:42:56 +0000 |
commit | c80b085203bfb1b9b69e1bb4347ace692464f8b3 (patch) | |
tree | 6422558163740afad64d6e68bb77cca0c76086ce | |
parent | 3a3a4fc9058904312088c9d3daf7013098637456 (diff) | |
download | chrome-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.h | 9 | ||||
-rw-r--r-- | zephyr/program/corsola/src/ite_usbc.c | 25 | ||||
-rw-r--r-- | zephyr/program/corsola/src/npcx_usbc.c | 10 | ||||
-rw-r--r-- | zephyr/program/corsola/src/usb_pd_policy.c | 4 | ||||
-rw-r--r-- | zephyr/program/corsola/src/usbc.c | 4 |
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 */ |