1// SPDX-License-Identifier: GPL-2.0 2 3#ifndef __USB_TYPEC_MUX 4#define __USB_TYPEC_MUX 5 6#include <linux/list.h> 7#include <linux/usb/typec.h> 8 9struct device; 10 11/** 12 * struct typec_switch - USB Type-C cable orientation switch 13 * @dev: Switch device 14 * @entry: List entry 15 * @set: Callback to the driver for setting the orientation 16 * 17 * USB Type-C pin flipper switch routing the correct data pairs from the 18 * connector to the USB controller depending on the orientation of the cable 19 * plug. 20 */ 21struct typec_switch { 22 struct device *dev; 23 struct list_head entry; 24 25 int (*set)(struct typec_switch *sw, enum typec_orientation orientation); 26}; 27 28/** 29 * struct typec_switch - USB Type-C connector pin mux 30 * @dev: Mux device 31 * @entry: List entry 32 * @set: Callback to the driver for setting the state of the mux 33 * 34 * Pin Multiplexer/DeMultiplexer switch routing the USB Type-C connector pins to 35 * different components depending on the requested mode of operation. Used with 36 * Accessory/Alternate modes. 37 */ 38struct typec_mux { 39 struct device *dev; 40 struct list_head entry; 41 42 int (*set)(struct typec_mux *mux, int state); 43}; 44 45struct typec_switch *typec_switch_get(struct device *dev); 46void typec_switch_put(struct typec_switch *sw); 47int typec_switch_register(struct typec_switch *sw); 48void typec_switch_unregister(struct typec_switch *sw); 49 50struct typec_mux * 51typec_mux_get(struct device *dev, const struct typec_altmode_desc *desc); 52void typec_mux_put(struct typec_mux *mux); 53int typec_mux_register(struct typec_mux *mux); 54void typec_mux_unregister(struct typec_mux *mux); 55 56#endif /* __USB_TYPEC_MUX */ 57