summaryrefslogtreecommitdiff
path: root/baseboard/guybrush/baseboard.c
diff options
context:
space:
mode:
authorRob Barnes <robbarnes@google.com>2021-06-07 14:39:12 -0600
committerCommit Bot <commit-bot@chromium.org>2021-06-11 21:21:42 +0000
commit8c0af6114508375f0c75112b9cef593719d8812a (patch)
tree797edbfe6fd17a9e021fe5252530845ba90bb47d /baseboard/guybrush/baseboard.c
parent4860dccf9a0ea7c5ecba92d984491bd7151a31f0 (diff)
downloadchrome-ec-8c0af6114508375f0c75112b9cef593719d8812a.tar.gz
guybrush: Reuse USB mux structure for USBA retimers
Reuse the USB mux structure for USB A retimers. These retimers do not have an internal mux, so many fields do not apply. This change makes it simpler to create generic methods. BUG=None TEST=Build and run BRANCH=None Signed-off-by: Rob Barnes <robbarnes@google.com> Change-Id: Idb2eef25bdd820febb18ef3b7af48c21f4c545d8 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2946306 Reviewed-by: Diana Z <dzigterman@chromium.org>
Diffstat (limited to 'baseboard/guybrush/baseboard.c')
-rw-r--r--baseboard/guybrush/baseboard.c60
1 files changed, 43 insertions, 17 deletions
diff --git a/baseboard/guybrush/baseboard.c b/baseboard/guybrush/baseboard.c
index 69e454eef9..b034b6f633 100644
--- a/baseboard/guybrush/baseboard.c
+++ b/baseboard/guybrush/baseboard.c
@@ -849,12 +849,13 @@ void board_hibernate(void)
}
}
-__overridable void board_a1_ps8811_retimer_setup(void)
+__overridable enum ec_error_list
+board_a1_ps8811_retimer_init(const struct usb_mux *me)
{
- CPRINTSUSB("A1: PS8811 retimer using default tuning");
+ return EC_SUCCESS;
}
-static void baseboard_a1_ps8811_retimer_setup(void)
+static int baseboard_a1_ps8811_retimer_init(const struct usb_mux *me)
{
int rv;
int tries = 2;
@@ -862,25 +863,37 @@ static void baseboard_a1_ps8811_retimer_setup(void)
do {
int val;
- rv = i2c_read8(I2C_PORT_TCPC1,
- PS8811_I2C_ADDR_FLAGS3 + PS8811_REG_PAGE1,
- PS8811_REG1_USB_BEQ_LEVEL, &val);
+ rv = i2c_read8(me->i2c_port,
+ me->i2c_addr_flags + PS8811_REG_PAGE1,
+ PS8811_REG1_USB_BEQ_LEVEL, &val);
} while (rv && --tries);
if (rv) {
CPRINTSUSB("A1: PS8811 retimer not detected!");
- return;
+ return rv;
}
CPRINTSUSB("A1: PS8811 retimer detected");
- board_a1_ps8811_retimer_setup();
+ rv = board_a1_ps8811_retimer_init(me);
+ if (rv)
+ CPRINTSUSB("A1: Error during PS8811 setup rv:%d", rv);
+ return rv;
}
-__overridable void board_a1_anx7491_retimer_setup(void)
+/* PS8811 is just a type-A USB retimer, reusing mux structure for convience. */
+const struct usb_mux usba1_ps8811 = {
+ .usb_port = USBA_PORT_A1,
+ .i2c_port = I2C_PORT_TCPC1,
+ .i2c_addr_flags = PS8811_I2C_ADDR_FLAGS3,
+ .board_init = &baseboard_a1_ps8811_retimer_init,
+};
+
+__overridable enum ec_error_list
+board_a1_anx7491_retimer_init(const struct usb_mux *me)
{
- CPRINTSUSB("A1: ANX7491 retimer using default tuning");
+ return EC_SUCCESS;
}
-static void baseboard_a1_anx7491_retimer_setup(void)
+static int baseboard_a1_anx7491_retimer_init(const struct usb_mux *me)
{
int rv;
int tries = 2;
@@ -888,29 +901,42 @@ static void baseboard_a1_anx7491_retimer_setup(void)
do {
int val;
- rv = i2c_read8(I2C_PORT_TCPC1, ANX7491_I2C_ADDR0_FLAGS, 0,
- &val);
+ rv = i2c_read8(me->i2c_port, me->i2c_addr_flags, 0, &val);
} while (rv && --tries);
if (rv) {
CPRINTSUSB("A1: ANX7491 retimer not detected!");
- return;
+ return rv;
}
CPRINTSUSB("A1: ANX7491 retimer detected");
- board_a1_anx7491_retimer_setup();
+ rv = board_a1_anx7491_retimer_init(me);
+ if (rv)
+ CPRINTSUSB("A1: Error during ANX7491 setup rv:%d", rv);
+ return rv;
}
+/* ANX7491 is just a type-A USB retimer, reusing mux structure for convience. */
+const struct usb_mux usba1_anx7491 = {
+ .usb_port = USBA_PORT_A1,
+ .i2c_port = I2C_PORT_TCPC1,
+ .i2c_addr_flags = ANX7491_I2C_ADDR0_FLAGS,
+ .board_init = &baseboard_a1_anx7491_retimer_init,
+};
+
void baseboard_a1_retimer_setup(void)
{
+ struct usb_mux a1_retimer;
switch (board_get_usb_a1_retimer()) {
case USB_A1_RETIMER_ANX7491:
- baseboard_a1_anx7491_retimer_setup();
+ a1_retimer = usba1_anx7491;
break;
case USB_A1_RETIMER_PS8811:
- baseboard_a1_ps8811_retimer_setup();
+ a1_retimer = usba1_ps8811;
break;
default:
CPRINTSUSB("A1: Unknown retimer!");
+ return;
}
+ a1_retimer.board_init(&a1_retimer);
}
DECLARE_DEFERRED(baseboard_a1_retimer_setup);