summaryrefslogtreecommitdiff
path: root/include/usb_mux.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/usb_mux.h')
-rw-r--r--include/usb_mux.h265
1 files changed, 0 insertions, 265 deletions
diff --git a/include/usb_mux.h b/include/usb_mux.h
deleted file mode 100644
index 9909f1c1c5..0000000000
--- a/include/usb_mux.h
+++ /dev/null
@@ -1,265 +0,0 @@
-/* Copyright 2012 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.
- */
-
-/* USB mux driver */
-
-#ifndef __CROS_EC_USB_MUX_H
-#define __CROS_EC_USB_MUX_H
-
-#include "ec_commands.h"
-#include "i2c.h"
-#include "tcpm/tcpm.h"
-#include "usb_charge.h"
-#include "usb_pd.h"
-
-/* Flags used for usb_mux.flags */
-#define USB_MUX_FLAG_NOT_TCPC BIT(0) /* TCPC/MUX device used only as MUX */
-#define USB_MUX_FLAG_SET_WITHOUT_FLIP BIT(1) /* SET should not flip */
-#define USB_MUX_FLAG_RESETS_IN_G3 BIT(2) /* Mux chip will reset in G3 */
-
-/*
- * USB-C mux state
- *
- * A bitwise combination of the USB_PD_MUX_* flags.
- * Note: this is 8 bits right now to make ec_response_usb_pd_mux_info size.
- */
-typedef uint8_t mux_state_t;
-
-/* Mux driver function pointers */
-struct usb_mux;
-struct usb_mux_driver {
- /**
- * Initialize USB mux. This is called every time the MUX is
- * access after being put in a fully disconnected state (low
- * power mode).
- *
- * @param me usb_mux
- * @return EC_SUCCESS on success, non-zero error code on failure.
- */
- int (*init)(const struct usb_mux *me);
-
- /**
- * Set USB mux state.
- *
- * @param[in] me usb_mux
- * @param[in] mux_state State to set mux to.
- * @param[out] bool ack_required - indication of whether this mux needs
- * to wait on a host command ACK at the end of a set
- * @return EC_SUCCESS on success, non-zero error code on failure.
- */
- int (*set)(const struct usb_mux *me, mux_state_t mux_state,
- bool *ack_required);
-
- /**
- * Get current state of USB mux.
- *
- * @param me usb_mux
- * @param mux_state Gets set to current state of mux.
- * @return EC_SUCCESS on success, non-zero error code on failure.
- */
- int (*get)(const struct usb_mux *me, mux_state_t *mux_state);
-
- /**
- * Return if retimer supports firmware update
- *
- * @return true - supported
- * false - not supported
- */
- bool (*is_retimer_fw_update_capable)(void);
-
- /**
- * Optional method that is called after the mux fully disconnects.
- *
- * Note: this method does not need to be defined for TCPC/MUX combos
- * where the TCPC is actively used since the PD state machine
- * will put the chip into lower power mode.
- *
- * @param me usb_mux
- * @return EC_SUCCESS on success, non-zero error code on failure.
- */
- int (*enter_low_power_mode)(const struct usb_mux *me);
-
- /**
- * Optional method that is called on HOOK_CHIPSET_RESET.
- *
- * @param me usb_mux
- * @return EC_SUCCESS on success, non-zero error code on failure.
- */
- int (*chipset_reset)(const struct usb_mux *me);
-};
-
-/* Describes a USB mux present in the system */
-struct usb_mux {
- /*
- * This is index into usb_muxes that points to the start of the
- * possible chain of usb_mux entries that this entry is on.
- */
- int usb_port;
-
- /*
- * I2C port and address. This is optional if your MUX is not
- * an I2C interface. If this is the case, use usb_port to
- * index an exernal array to track your connection parameters,
- * if they are needed. One case of this would be a driver
- * that will use usb_port as an index into tcpc_config_t to
- * gather the necessary information to communicate with the MUX
- */
- uint16_t i2c_port;
- uint16_t i2c_addr_flags;
-
- /* Run-time flags with prefix USB_MUX_FLAG_ */
- uint32_t flags;
-
- /* Mux driver */
- const struct usb_mux_driver *driver;
-
- /* Linked list chain of secondary MUXes. NULL terminated */
- const struct usb_mux *next_mux;
-
- /**
- * Optional method for tuning for USB mux during mux->driver->init().
- *
- * @param me usb_mux
- * @return EC_SUCCESS on success, non-zero error code on failure.
- */
- int (*board_init)(const struct usb_mux *me);
-
- /*
- * USB mux/retimer board specific set mux_state.
- *
- * @param me usb_mux
- * @param mux_state State to set mode to.
- * @return EC_SUCCESS on success, non-zero error code on failure.
- */
- int (*board_set)(const struct usb_mux *me, mux_state_t mux_state);
-
- /*
- * USB Type-C DP alt mode support. Notify Type-C controller
- * there is DP dongle hot-plug.
- *
- * @param me usb_mux
- * @param mux_state with HPD IRQ and HPD LVL flags set
- * accordingly
- */
- void (*hpd_update)(const struct usb_mux *me,
- mux_state_t mux_state);
-};
-
-/* Supported USB mux drivers */
-extern const struct usb_mux_driver amd_fp5_usb_mux_driver;
-extern const struct usb_mux_driver amd_fp6_usb_mux_driver;
-extern const struct usb_mux_driver anx7440_usb_mux_driver;
-extern const struct usb_mux_driver it5205_usb_mux_driver;
-extern const struct usb_mux_driver pi3usb3x532_usb_mux_driver;
-extern const struct usb_mux_driver ps8740_usb_mux_driver;
-extern const struct usb_mux_driver ps8743_usb_mux_driver;
-extern const struct usb_mux_driver ps8822_usb_mux_driver;
-extern const struct usb_mux_driver tcpm_usb_mux_driver;
-extern const struct usb_mux_driver tusb1064_usb_mux_driver;
-extern const struct usb_mux_driver virtual_usb_mux_driver;
-
-/* USB muxes present in system, ordered by PD port #, defined at board-level */
-#ifdef CONFIG_USB_MUX_RUNTIME_CONFIG
-extern struct usb_mux usb_muxes[];
-#else
-extern const struct usb_mux usb_muxes[];
-#endif
-
-/* Supported hpd_update functions */
-void virtual_hpd_update(const struct usb_mux *me, mux_state_t mux_state);
-
-/*
- * Helper methods that either use tcpc communication or direct i2c
- * communication depending on how the TCPC/MUX device is configured.
- */
-#ifdef CONFIG_USB_PD_TCPM_MUX
-static inline int mux_write(const struct usb_mux *me, int reg, int val)
-{
- return me->flags & USB_MUX_FLAG_NOT_TCPC
- ? i2c_write8(me->i2c_port, me->i2c_addr_flags, reg, val)
- : tcpc_write(me->usb_port, reg, val);
-}
-
-static inline int mux_read(const struct usb_mux *me, int reg, int *val)
-{
- return me->flags & USB_MUX_FLAG_NOT_TCPC
- ? i2c_read8(me->i2c_port, me->i2c_addr_flags, reg, val)
- : tcpc_read(me->usb_port, reg, val);
-}
-
-static inline int mux_write16(const struct usb_mux *me, int reg, int val)
-{
- return me->flags & USB_MUX_FLAG_NOT_TCPC
- ? i2c_write16(me->i2c_port, me->i2c_addr_flags, reg, val)
- : tcpc_write16(me->usb_port, reg, val);
-}
-
-static inline int mux_read16(const struct usb_mux *me, int reg, int *val)
-{
- return me->flags & USB_MUX_FLAG_NOT_TCPC
- ? i2c_read16(me->i2c_port, me->i2c_addr_flags, reg, val)
- : tcpc_read16(me->usb_port, reg, val);
-}
-#endif /* CONFIG_USB_PD_TCPM_MUX */
-
-/**
- * Initialize USB mux to its default state.
- *
- * @param port Port number.
- */
-void usb_mux_init(int port);
-
-/**
- * Configure superspeed muxes on type-C port.
- *
- * @param port port number.
- * @param mux_mode mux selected function.
- * @param usb_config usb2.0 selected function.
- * @param polarity plug polarity (0=CC1, 1=CC2).
- */
-void usb_mux_set(int port, mux_state_t mux_mode,
- enum usb_switch usb_config, int polarity);
-
-/**
- * Query superspeed mux status on type-C port.
- *
- * @param port port number.
- * @return current MUX state (USB_PD_MUX_*).
- */
-mux_state_t usb_mux_get(int port);
-
-/**
- * Flip the superspeed muxes on type-C port.
- *
- * This is used for factory test automation. Note that this function should
- * only flip the superspeed muxes and leave CC lines alone. Without further
- * changes, this function MUST ONLY be used for testing purpose, because
- * the protocol layer loses track of the superspeed polarity and DP/USB3.0
- * connection may break.
- *
- * @param port port number.
- */
-void usb_mux_flip(int port);
-
-/**
- * Update the hot-plug event.
- *
- * @param port port number.
- * @param mux_state HPD IRQ and LVL mux flags
- */
-void usb_mux_hpd_update(int port, mux_state_t mux_state);
-
-/**
- * Port information about retimer firmware update support.
- *
- * @return which ports support retimer firmware update
- * Bits[7:0]: represent PD ports 0-7;
- * each bit
- * = 1, this port supports retimer firmware update;
- * = 0, not support.
- */
-int usb_mux_retimer_fw_update_port_info(void);
-
-#endif