summaryrefslogtreecommitdiff
path: root/driver/tcpm/tusb422.c
diff options
context:
space:
mode:
authorJack Rosenthal <jrosenth@chromium.org>2021-11-04 12:11:58 -0600
committerCommit Bot <commit-bot@chromium.org>2021-11-05 04:22:34 +0000
commit252457d4b21f46889eebad61d4c0a65331919cec (patch)
tree01856c4d31d710b20e85a74c8d7b5836e35c3b98 /driver/tcpm/tusb422.c
parent08f5a1e6fc2c9467230444ac9b582dcf4d9f0068 (diff)
downloadchrome-ec-stabilize-14469.9.B-ish.tar.gz
In the interest of making long-term branch maintenance incur as little technical debt on us as possible, we should not maintain any files on the branch we are not actually using. This has the added effect of making it extremely clear when merging CLs from the main branch when changes have the possibility to affect us. The follow-on CL adds a convenience script to actually pull updates from the main branch and generate a CL for the update. BUG=b:204206272 BRANCH=ish TEST=make BOARD=arcada_ish && make BOARD=drallion_ish Signed-off-by: Jack Rosenthal <jrosenth@chromium.org> Change-Id: I17e4694c38219b5a0823e0a3e55a28d1348f4b18 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3262038 Reviewed-by: Jett Rink <jettrink@chromium.org> Reviewed-by: Tom Hughes <tomhughes@chromium.org>
Diffstat (limited to 'driver/tcpm/tusb422.c')
-rw-r--r--driver/tcpm/tusb422.c195
1 files changed, 0 insertions, 195 deletions
diff --git a/driver/tcpm/tusb422.c b/driver/tcpm/tusb422.c
deleted file mode 100644
index f2a4ec2fb3..0000000000
--- a/driver/tcpm/tusb422.c
+++ /dev/null
@@ -1,195 +0,0 @@
-/* Copyright 2018 The Chromium OS Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-/* Type-C port manager for TI TUSB422 Port Controller */
-
-#include "common.h"
-#include "tusb422.h"
-#include "tcpm/tcpci.h"
-#include "tcpm/tcpm.h"
-#include "timer.h"
-#include "usb_pd.h"
-
-#ifndef CONFIG_USB_PD_TCPM_TCPCI
-#error "TUSB422 is using a standard TCPCI interface"
-#error "Please upgrade your board configuration"
-
-#endif
-
-#if defined(CONFIG_USB_PD_DUAL_ROLE_AUTO_TOGGLE) && \
- !defined(CONFIG_USB_PD_TCPC_LOW_POWER)
-#error "TUSB422 driver requires CONFIG_USB_PD_TCPC_LOW_POWER if " \
- "CONFIG_USB_PD_DUAL_ROLE_AUTO_TOGGLE is enabled"
-#endif
-
-#if defined(CONFIG_USB_PD_DUAL_ROLE_AUTO_TOGGLE) && \
- defined(CONFIG_USB_PD_DISCHARGE_TCPC)
-#error "TUSB422 must disable TCPC discharge to support enabling Auto " \
- "Discharge Disconnect all the time."
-#endif
-
-enum tusb422_reg_addr {
- TUSB422_REG_VBUS_AND_VCONN_CONTROL = 0x98,
-};
-
-enum vbus_and_vconn_control_mask {
- INT_VCONNDIS_DISABLE = BIT(1),
- INT_VBUSDIS_DISABLE = BIT(2),
-};
-
-/* The TUSB422 cannot drive an FRS GPIO, but can detect FRS */
-static int tusb422_set_frs_enable(int port, int enable)
-{
- return tcpc_update8(port, TUSB422_REG_PHY_BMC_RX_CTRL,
- TUSB422_REG_PHY_BMC_RX_CTRL_FRS_RX_EN,
- enable ? MASK_SET : MASK_CLR);
-}
-
-static int tusb422_tcpci_tcpm_init(int port)
-{
- int rv;
-
- /*
- * Do not perform TCPC soft reset while waking from Low Power Mode,
- * because it makes DRP incapable of looking for connection correctly
- * (see b/176986511) and probably breaks firmware_PDTrySrc test
- * (see b/179234089).
- *
- * TODO(b/179234089): Consider implementing function that performs
- * only necessary things when leaving Low Power Mode, so we can perform
- * TCPC soft reset here.
- */
-
- rv = tcpci_tcpm_init(port);
- if (rv)
- return rv;
-
- if (IS_ENABLED(CONFIG_USB_PD_DUAL_ROLE_AUTO_TOGGLE)) {
- /*
- * When dual role auto toggle is enabled, the TUSB422 needs
- * auto discharge disconnect enabled so that the CC state
- * is detected correctly.
- * Without this, the CC lines get stuck in the SRC.Open state
- * after updating the ROLE Control register on a device connect.
- */
- tusb422_tcpm_drv.tcpc_enable_auto_discharge_disconnect(port, 1);
-
- /*
- * Disable internal VBUS discharge. AutoDischargeDisconnect must
- * generally remain enabled to keep TUSB422 in active mode.
- * However, this will interfere with FRS by default by
- * discharging at inappropriate times. Mitigate this by
- * disabling internal VBUS discharge. The TUSB422 must rely on
- * external VBUS discharge. See TUSB422 datasheet, 7.4.2 Active
- * Mode.
- */
- tcpc_write(port, TUSB422_REG_VBUS_AND_VCONN_CONTROL,
- INT_VBUSDIS_DISABLE);
- }
- if (IS_ENABLED(CONFIG_USB_PD_FRS_TCPC)) {
- /* Disable FRS detection, and enable the FRS detection alert */
- tusb422_set_frs_enable(port, 0);
- tcpc_update16(port, TCPC_REG_ALERT_MASK,
- TCPC_REG_ALERT_MASK_VENDOR_DEF, MASK_SET);
- tcpc_update8(port, TUSB422_REG_VENDOR_INTERRUPTS_MASK,
- TUSB422_REG_VENDOR_INTERRUPTS_MASK_FRS_RX,
- MASK_SET);
- }
- /*
- * VBUS detection is supposed to be enabled by default, however the
- * TUSB422 has this disabled following reset.
- */
- /* Enable VBUS detection */
- return tcpc_write16(port, TCPC_REG_COMMAND,
- TCPC_REG_COMMAND_ENABLE_VBUS_DETECT);
-}
-
-static int tusb422_tcpm_set_cc(int port, int pull)
-{
- /*
- * Enable AutoDischargeDisconnect to keep TUSB422 in active mode through
- * this transition. Note that the configuration keeps the TCPC from
- * actually discharging VBUS in this case.
- */
- if (IS_ENABLED(CONFIG_USB_PD_DUAL_ROLE_AUTO_TOGGLE))
- tusb422_tcpm_drv.tcpc_enable_auto_discharge_disconnect(port, 1);
-
- return tcpci_tcpm_set_cc(port, pull);
-}
-
-#ifdef CONFIG_USB_PD_DUAL_ROLE_AUTO_TOGGLE
-static int tusb422_tcpc_drp_toggle(int port)
-{
- /*
- * The TUSB422 requires auto discharge disconnect to be enabled for
- * active mode (not unattached) operation. Make sure it is disabled
- * before enabling DRP toggling.
- *
- * USB Type-C Port Controller Interface Specification revision 2.0,
- * Figure 4-21 Source Disconnect and Figure 4-22 Sink Disconnect
- */
- tusb422_tcpm_drv.tcpc_enable_auto_discharge_disconnect(port, 0);
-
- return tcpci_tcpc_drp_toggle(port);
-}
-#endif
-
-static void tusb422_tcpci_tcpc_alert(int port)
-{
- if (IS_ENABLED(CONFIG_USB_PD_FRS_TCPC)) {
- int regval;
-
- /* FRS detection is a vendor defined alert */
- tcpc_read(port, TUSB422_REG_VENDOR_INTERRUPTS_STATUS, &regval);
- if (regval & TUSB422_REG_VENDOR_INTERRUPTS_STATUS_FRS_RX) {
- tusb422_set_frs_enable(port, 0);
- tcpc_write(port, TUSB422_REG_VENDOR_INTERRUPTS_STATUS,
- regval);
- pd_got_frs_signal(port);
- }
- }
- tcpci_tcpc_alert(port);
-}
-
-const struct tcpm_drv tusb422_tcpm_drv = {
- .init = &tusb422_tcpci_tcpm_init,
- .release = &tcpci_tcpm_release,
- .get_cc = &tcpci_tcpm_get_cc,
-#ifdef CONFIG_USB_PD_VBUS_DETECT_TCPC
- .check_vbus_level = &tcpci_tcpm_check_vbus_level,
-#endif
- .select_rp_value = &tcpci_tcpm_select_rp_value,
- .set_cc = &tusb422_tcpm_set_cc,
- .set_polarity = &tcpci_tcpm_set_polarity,
-#ifdef CONFIG_USB_PD_DECODE_SOP
- .sop_prime_enable = &tcpci_tcpm_sop_prime_enable,
-#endif
- .set_vconn = &tcpci_tcpm_set_vconn,
- .set_msg_header = &tcpci_tcpm_set_msg_header,
- .set_rx_enable = &tcpci_tcpm_set_rx_enable,
- .get_message_raw = &tcpci_tcpm_get_message_raw,
- .transmit = &tcpci_tcpm_transmit,
- .tcpc_alert = &tusb422_tcpci_tcpc_alert,
-#ifdef CONFIG_USB_PD_DISCHARGE_TCPC
- .tcpc_discharge_vbus = &tcpci_tcpc_discharge_vbus,
-#endif
- .tcpc_enable_auto_discharge_disconnect =
- &tcpci_tcpc_enable_auto_discharge_disconnect,
-#ifdef CONFIG_USB_PD_DUAL_ROLE_AUTO_TOGGLE
- .drp_toggle = &tusb422_tcpc_drp_toggle,
-#endif
-#ifdef CONFIG_USB_PD_PPC
- .set_snk_ctrl = &tcpci_tcpm_set_snk_ctrl,
- .set_src_ctrl = &tcpci_tcpm_set_src_ctrl,
-#endif
- .get_chip_info = &tcpci_get_chip_info,
-#ifdef CONFIG_USB_PD_TCPC_LOW_POWER
- .enter_low_power_mode = &tcpci_enter_low_power_mode,
-#endif
- .set_bist_test_mode = &tcpci_set_bist_test_mode,
-#ifdef CONFIG_USB_PD_FRS_TCPC
- .set_frs_enable = &tusb422_set_frs_enable,
-#endif
-};