typec_mux.h (2202B)
1// SPDX-License-Identifier: GPL-2.0 2 3#ifndef __USB_TYPEC_MUX 4#define __USB_TYPEC_MUX 5 6#include <linux/property.h> 7#include <linux/usb/typec.h> 8 9struct device; 10struct typec_mux; 11struct typec_mux_dev; 12struct typec_switch; 13struct typec_switch_dev; 14struct typec_altmode; 15struct fwnode_handle; 16 17typedef int (*typec_switch_set_fn_t)(struct typec_switch_dev *sw, 18 enum typec_orientation orientation); 19 20struct typec_switch_desc { 21 struct fwnode_handle *fwnode; 22 typec_switch_set_fn_t set; 23 const char *name; 24 void *drvdata; 25}; 26 27struct typec_switch *fwnode_typec_switch_get(struct fwnode_handle *fwnode); 28void typec_switch_put(struct typec_switch *sw); 29int typec_switch_set(struct typec_switch *sw, 30 enum typec_orientation orientation); 31 32static inline struct typec_switch *typec_switch_get(struct device *dev) 33{ 34 return fwnode_typec_switch_get(dev_fwnode(dev)); 35} 36 37struct typec_switch_dev * 38typec_switch_register(struct device *parent, 39 const struct typec_switch_desc *desc); 40void typec_switch_unregister(struct typec_switch_dev *sw); 41 42void typec_switch_set_drvdata(struct typec_switch_dev *sw, void *data); 43void *typec_switch_get_drvdata(struct typec_switch_dev *sw); 44 45struct typec_mux_state { 46 struct typec_altmode *alt; 47 unsigned long mode; 48 void *data; 49}; 50 51typedef int (*typec_mux_set_fn_t)(struct typec_mux_dev *mux, 52 struct typec_mux_state *state); 53 54struct typec_mux_desc { 55 struct fwnode_handle *fwnode; 56 typec_mux_set_fn_t set; 57 const char *name; 58 void *drvdata; 59}; 60 61struct typec_mux *fwnode_typec_mux_get(struct fwnode_handle *fwnode, 62 const struct typec_altmode_desc *desc); 63void typec_mux_put(struct typec_mux *mux); 64int typec_mux_set(struct typec_mux *mux, struct typec_mux_state *state); 65 66static inline struct typec_mux * 67typec_mux_get(struct device *dev, const struct typec_altmode_desc *desc) 68{ 69 return fwnode_typec_mux_get(dev_fwnode(dev), desc); 70} 71 72struct typec_mux_dev * 73typec_mux_register(struct device *parent, const struct typec_mux_desc *desc); 74void typec_mux_unregister(struct typec_mux_dev *mux); 75 76void typec_mux_set_drvdata(struct typec_mux_dev *mux, void *data); 77void *typec_mux_get_drvdata(struct typec_mux_dev *mux); 78 79#endif /* __USB_TYPEC_MUX */