diff options
Diffstat (limited to 'include/usb_mux.h')
-rw-r--r-- | include/usb_mux.h | 50 |
1 files changed, 28 insertions, 22 deletions
diff --git a/include/usb_mux.h b/include/usb_mux.h index 0d43257994..d510a347d4 100644 --- a/include/usb_mux.h +++ b/include/usb_mux.h @@ -1,4 +1,4 @@ -/* Copyright 2012 The Chromium OS Authors. All rights reserved. +/* Copyright 2012 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ @@ -28,6 +28,7 @@ #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 */ +#define USB_MUX_FLAG_POLARITY_INVERTED BIT(3) /* Mux polarity is inverted */ #endif /* CONFIG_ZEPHYR */ @@ -127,9 +128,6 @@ struct usb_mux { /* 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(). * @@ -157,11 +155,19 @@ struct usb_mux { * @param[out] ack_required: indication of whether this function * requires a wait for an AP ACK after */ - void (*hpd_update)(const struct usb_mux *me, - mux_state_t mux_state, + void (*hpd_update)(const struct usb_mux *me, mux_state_t mux_state, bool *ack_required); }; +/* Linked list chain of secondary MUXes. NULL terminated */ +struct usb_mux_chain { + /* Structure describing USB mux */ + const struct usb_mux *mux; + + /* Pointer to next mux */ + const struct usb_mux_chain *next; +}; + /* 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; @@ -177,9 +183,9 @@ 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[]; +extern struct usb_mux_chain usb_muxes[]; #else -extern const struct usb_mux usb_muxes[]; +extern const struct usb_mux_chain usb_muxes[]; #endif /* Supported hpd_update functions */ @@ -193,30 +199,30 @@ void virtual_hpd_update(const struct usb_mux *me, mux_state_t mux_state, #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); + 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); + 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); + 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); + 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 */ @@ -235,8 +241,8 @@ void usb_mux_init(int port); * @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); +void usb_mux_set(int port, mux_state_t mux_mode, enum usb_switch usb_config, + int polarity); /** * Configure superspeed muxes on type-C port for only one index in the mux |