summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTomasz Michalec <tm@semihalf.com>2022-07-20 14:04:32 +0200
committerChromeos LUCI <chromeos-scoped@luci-project-accounts.iam.gserviceaccount.com>2022-09-13 11:18:18 +0000
commit56ae32aa9f6f1bf9e8f6ff36f6d7ea757f632f9c (patch)
treee4b25b2ef9dc7679131b85ae55ebe06fbb1a054f
parentc9d7a7d62fe12c1609a31c54272534ac664396ac (diff)
downloadchrome-ec-56ae32aa9f6f1bf9e8f6ff36f6d7ea757f632f9c.tar.gz
zephyr: skyrim: usb_mux: Split struct usb_mux in skyrim board
Update skyrim board to use new struct usb_mux_chain. LOW_COVERAGE_REASON=no test for skyrim yet and missing required usb mux emulators (PS8818, ANX7483) BUG=b:236274003 TEST=zmake build -a TEST=./twister -T zephyr/test BRANCH=None Cq-Depend: chromium:3779618 Signed-off-by: Tomasz Michalec <tm@semihalf.com> Change-Id: Ia572fa040a220b5f7129026c210be986edccb061 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3780419 Reviewed-by: Keith Short <keithshort@chromium.org> Commit-Queue: Tomasz Michalec <tmichalec@google.com> Tested-by: Tomasz Michalec <tmichalec@google.com>
-rw-r--r--zephyr/projects/skyrim/src/usbc_config.c99
-rw-r--r--zephyr/projects/skyrim/src/winterhold/usbc_config.c99
2 files changed, 118 insertions, 80 deletions
diff --git a/zephyr/projects/skyrim/src/usbc_config.c b/zephyr/projects/skyrim/src/usbc_config.c
index 957d32cf8b..7f969ecb17 100644
--- a/zephyr/projects/skyrim/src/usbc_config.c
+++ b/zephyr/projects/skyrim/src/usbc_config.c
@@ -98,14 +98,20 @@ struct usb_mux_driver ioex_sbu_mux_driver = {
* Since NX3DV221GM is not a i2c device, .i2c_port and
* .i2c_addr_flags are not required here.
*/
-struct usb_mux usbc0_sbu_mux = {
- .usb_port = USBC_PORT_C0,
- .driver = &ioex_sbu_mux_driver,
+struct usb_mux_chain usbc0_sbu_mux = {
+ .mux =
+ &(const struct usb_mux){
+ .usb_port = USBC_PORT_C0,
+ .driver = &ioex_sbu_mux_driver,
+ },
};
-struct usb_mux usbc1_sbu_mux = {
- .usb_port = USBC_PORT_C1,
- .driver = &ioex_sbu_mux_driver,
+struct usb_mux_chain usbc1_sbu_mux = {
+ .mux =
+ &(const struct usb_mux){
+ .usb_port = USBC_PORT_C1,
+ .driver = &ioex_sbu_mux_driver,
+ },
};
int baseboard_anx7483_c0_mux_set(const struct usb_mux *me,
@@ -165,13 +171,16 @@ int baseboard_anx7483_c1_mux_set(const struct usb_mux *me,
return EC_SUCCESS;
}
-struct usb_mux usbc0_anx7483 = {
- .usb_port = USBC_PORT_C0,
- .i2c_port = I2C_PORT_TCPC0,
- .i2c_addr_flags = ANX7483_I2C_ADDR0_FLAGS,
- .driver = &anx7483_usb_retimer_driver,
- .board_set = &baseboard_anx7483_c0_mux_set,
- .next_mux = &usbc0_sbu_mux,
+struct usb_mux_chain usbc0_anx7483 = {
+ .mux =
+ &(const struct usb_mux){
+ .usb_port = USBC_PORT_C0,
+ .i2c_port = I2C_PORT_TCPC0,
+ .i2c_addr_flags = ANX7483_I2C_ADDR0_FLAGS,
+ .driver = &anx7483_usb_retimer_driver,
+ .board_set = &baseboard_anx7483_c0_mux_set,
+ },
+ .next = &usbc0_sbu_mux,
};
__overridable int board_c1_ps8818_mux_set(const struct usb_mux *me,
@@ -188,38 +197,48 @@ __overridable int board_c1_ps8818_mux_set(const struct usb_mux *me,
return 0;
}
-struct usb_mux usbc1_ps8818 = {
- .usb_port = USBC_PORT_C1,
- .i2c_port = I2C_PORT_TCPC1,
- .flags = USB_MUX_FLAG_RESETS_IN_G3,
- .i2c_addr_flags = PS8818_I2C_ADDR_FLAGS,
- .driver = &ps8818_usb_retimer_driver,
- .board_set = &board_c1_ps8818_mux_set,
+struct usb_mux_chain usbc1_ps8818 = {
+ .mux =
+ &(const struct usb_mux){
+ .usb_port = USBC_PORT_C1,
+ .i2c_port = I2C_PORT_TCPC1,
+ .flags = USB_MUX_FLAG_RESETS_IN_G3,
+ .i2c_addr_flags = PS8818_I2C_ADDR_FLAGS,
+ .driver = &ps8818_usb_retimer_driver,
+ .board_set = &board_c1_ps8818_mux_set,
+ },
};
-struct usb_mux usbc1_anx7483 = {
- .usb_port = USBC_PORT_C1,
- .i2c_port = I2C_PORT_TCPC1,
- .i2c_addr_flags = ANX7483_I2C_ADDR0_FLAGS,
- .driver = &anx7483_usb_retimer_driver,
- .board_set = &baseboard_anx7483_c1_mux_set,
- .next_mux = &usbc1_sbu_mux,
+struct usb_mux_chain usbc1_anx7483 = {
+ .mux =
+ &(const struct usb_mux){
+ .usb_port = USBC_PORT_C1,
+ .i2c_port = I2C_PORT_TCPC1,
+ .i2c_addr_flags = ANX7483_I2C_ADDR0_FLAGS,
+ .driver = &anx7483_usb_retimer_driver,
+ .board_set = &baseboard_anx7483_c1_mux_set,
+ },
+ .next = &usbc1_sbu_mux,
};
-struct usb_mux usb_muxes[] = {
+struct usb_mux_chain usb_muxes[] = {
[USBC_PORT_C0] = {
- .usb_port = USBC_PORT_C0,
- .i2c_port = I2C_PORT_USB_MUX,
- .i2c_addr_flags = AMD_FP6_C0_MUX_I2C_ADDR,
- .driver = &amd_fp6_usb_mux_driver,
- .next_mux = &usbc0_anx7483,
+ .mux = &(const struct usb_mux) {
+ .usb_port = USBC_PORT_C0,
+ .i2c_port = I2C_PORT_USB_MUX,
+ .i2c_addr_flags = AMD_FP6_C0_MUX_I2C_ADDR,
+ .driver = &amd_fp6_usb_mux_driver,
+ },
+ .next = &usbc0_anx7483,
},
[USBC_PORT_C1] = {
- .usb_port = USBC_PORT_C1,
- .i2c_port = I2C_PORT_USB_MUX,
- .i2c_addr_flags = AMD_FP6_C4_MUX_I2C_ADDR,
- .driver = &amd_fp6_usb_mux_driver,
- /* .next_mux = filled in by setup_mux based on fw_config */
+ .mux = &(const struct usb_mux) {
+ .usb_port = USBC_PORT_C1,
+ .i2c_port = I2C_PORT_USB_MUX,
+ .i2c_addr_flags = AMD_FP6_C4_MUX_I2C_ADDR,
+ .driver = &amd_fp6_usb_mux_driver,
+ },
+ /* .next = filled in by setup_mux based on fw_config */
}
};
BUILD_ASSERT(ARRAY_SIZE(usb_muxes) == CONFIG_USB_PD_PORT_MAX_COUNT);
@@ -259,10 +278,10 @@ static void setup_mux(void)
if (val == FW_IO_DB_PS8811_PS8818) {
CPRINTSUSB("C1: Setting PS8818 mux");
- usb_muxes[USBC_PORT_C1].next_mux = &usbc1_ps8818;
+ usb_muxes[USBC_PORT_C1].next = &usbc1_ps8818;
} else if (val == FW_IO_DB_NONE_ANX7483) {
CPRINTSUSB("C1: Setting ANX7483 mux");
- usb_muxes[USBC_PORT_C1].next_mux = &usbc1_anx7483;
+ usb_muxes[USBC_PORT_C1].next = &usbc1_anx7483;
} else {
CPRINTSUSB("Unexpected DB_IO board: %d", val);
}
diff --git a/zephyr/projects/skyrim/src/winterhold/usbc_config.c b/zephyr/projects/skyrim/src/winterhold/usbc_config.c
index 9b51298ef4..0623079191 100644
--- a/zephyr/projects/skyrim/src/winterhold/usbc_config.c
+++ b/zephyr/projects/skyrim/src/winterhold/usbc_config.c
@@ -97,14 +97,20 @@ struct usb_mux_driver ioex_sbu_mux_driver = {
* Since NX3DV221GM is not a i2c device, .i2c_port and
* .i2c_addr_flags are not required here.
*/
-struct usb_mux usbc0_sbu_mux = {
- .usb_port = USBC_PORT_C0,
- .driver = &ioex_sbu_mux_driver,
+struct usb_mux_chain usbc0_sbu_mux = {
+ .mux =
+ &(const struct usb_mux){
+ .usb_port = USBC_PORT_C0,
+ .driver = &ioex_sbu_mux_driver,
+ },
};
-struct usb_mux usbc1_sbu_mux = {
- .usb_port = USBC_PORT_C1,
- .driver = &ioex_sbu_mux_driver,
+struct usb_mux_chain usbc1_sbu_mux = {
+ .mux =
+ &(const struct usb_mux){
+ .usb_port = USBC_PORT_C1,
+ .driver = &ioex_sbu_mux_driver,
+ },
};
int baseboard_anx7483_c0_mux_set(const struct usb_mux *me,
@@ -164,13 +170,16 @@ int baseboard_anx7483_c1_mux_set(const struct usb_mux *me,
return EC_SUCCESS;
}
-struct usb_mux usbc0_anx7483 = {
- .usb_port = USBC_PORT_C0,
- .i2c_port = I2C_PORT_TCPC0,
- .i2c_addr_flags = ANX7483_I2C_ADDR0_FLAGS,
- .driver = &anx7483_usb_retimer_driver,
- .board_set = &baseboard_anx7483_c0_mux_set,
- .next_mux = &usbc0_sbu_mux,
+struct usb_mux_chain usbc0_anx7483 = {
+ .mux =
+ &(const struct usb_mux){
+ .usb_port = USBC_PORT_C0,
+ .i2c_port = I2C_PORT_TCPC0,
+ .i2c_addr_flags = ANX7483_I2C_ADDR0_FLAGS,
+ .driver = &anx7483_usb_retimer_driver,
+ .board_set = &baseboard_anx7483_c0_mux_set,
+ },
+ .next = &usbc0_sbu_mux,
};
__overridable int board_c1_ps8818_mux_set(const struct usb_mux *me,
@@ -187,38 +196,48 @@ __overridable int board_c1_ps8818_mux_set(const struct usb_mux *me,
return 0;
}
-struct usb_mux usbc1_ps8818 = {
- .usb_port = USBC_PORT_C1,
- .i2c_port = I2C_PORT_TCPC1,
- .flags = USB_MUX_FLAG_RESETS_IN_G3,
- .i2c_addr_flags = PS8818_I2C_ADDR_FLAGS,
- .driver = &ps8818_usb_retimer_driver,
- .board_set = &board_c1_ps8818_mux_set,
+struct usb_mux_chain usbc1_ps8818 = {
+ .mux =
+ &(const struct usb_mux){
+ .usb_port = USBC_PORT_C1,
+ .i2c_port = I2C_PORT_TCPC1,
+ .flags = USB_MUX_FLAG_RESETS_IN_G3,
+ .i2c_addr_flags = PS8818_I2C_ADDR_FLAGS,
+ .driver = &ps8818_usb_retimer_driver,
+ .board_set = &board_c1_ps8818_mux_set,
+ },
};
-struct usb_mux usbc1_anx7483 = {
- .usb_port = USBC_PORT_C1,
- .i2c_port = I2C_PORT_TCPC1,
- .i2c_addr_flags = ANX7483_I2C_ADDR0_FLAGS,
- .driver = &anx7483_usb_retimer_driver,
- .board_set = &baseboard_anx7483_c1_mux_set,
- .next_mux = &usbc1_sbu_mux,
+struct usb_mux_chain usbc1_anx7483 = {
+ .mux =
+ &(const struct usb_mux){
+ .usb_port = USBC_PORT_C1,
+ .i2c_port = I2C_PORT_TCPC1,
+ .i2c_addr_flags = ANX7483_I2C_ADDR0_FLAGS,
+ .driver = &anx7483_usb_retimer_driver,
+ .board_set = &baseboard_anx7483_c1_mux_set,
+ },
+ .next = &usbc1_sbu_mux,
};
-struct usb_mux usb_muxes[] = {
+struct usb_mux_chain usb_muxes[] = {
[USBC_PORT_C0] = {
- .usb_port = USBC_PORT_C0,
- .i2c_port = I2C_PORT_USB_MUX,
- .i2c_addr_flags = AMD_FP6_C0_MUX_I2C_ADDR,
- .driver = &amd_fp6_usb_mux_driver,
- .next_mux = &usbc0_anx7483,
+ .mux = &(const struct usb_mux) {
+ .usb_port = USBC_PORT_C0,
+ .i2c_port = I2C_PORT_USB_MUX,
+ .i2c_addr_flags = AMD_FP6_C0_MUX_I2C_ADDR,
+ .driver = &amd_fp6_usb_mux_driver,
+ },
+ .next = &usbc0_anx7483,
},
[USBC_PORT_C1] = {
- .usb_port = USBC_PORT_C1,
- .i2c_port = I2C_PORT_USB_MUX,
- .i2c_addr_flags = AMD_FP6_C4_MUX_I2C_ADDR,
- .driver = &amd_fp6_usb_mux_driver,
- /* .next_mux = filled in by setup_mux based on fw_config */
+ .mux = &(const struct usb_mux) {
+ .usb_port = USBC_PORT_C1,
+ .i2c_port = I2C_PORT_USB_MUX,
+ .i2c_addr_flags = AMD_FP6_C4_MUX_I2C_ADDR,
+ .driver = &amd_fp6_usb_mux_driver,
+ },
+ /* .next = filled in by setup_mux based on fw_config */
}
};
BUILD_ASSERT(ARRAY_SIZE(usb_muxes) == CONFIG_USB_PD_PORT_MAX_COUNT);
@@ -258,10 +277,10 @@ static void setup_mux(void)
if (val == FW_IO_DB_PS8811_PS8818) {
CPRINTSUSB("C1: Setting PS8818 mux");
- usb_muxes[USBC_PORT_C1].next_mux = &usbc1_ps8818;
+ usb_muxes[USBC_PORT_C1].next = &usbc1_ps8818;
} else if (val == FW_IO_DB_NONE_ANX7483) {
CPRINTSUSB("C1: Setting ANX7483 mux");
- usb_muxes[USBC_PORT_C1].next_mux = &usbc1_anx7483;
+ usb_muxes[USBC_PORT_C1].next = &usbc1_anx7483;
} else {
CPRINTSUSB("Unexpected DB_IO board: %d", val);
}