File Index
Files and directories
Sign in
FILE

role.h

File preview with syntax highlighting.

linux-6.19.14/include/linux/usb/role.h C
  1// SPDX-License-Identifier: GPL-2.0
  2
  3#ifndef __LINUX_USB_ROLE_H
  4#define __LINUX_USB_ROLE_H
  5
  6#include <linux/device.h>
  7
  8struct usb_role_switch;
  9
 10enum usb_role {
 11	USB_ROLE_NONE,
 12	USB_ROLE_HOST,
 13	USB_ROLE_DEVICE,
 14};
 15
 16typedef int (*usb_role_switch_set_t)(struct usb_role_switch *sw,
 17				     enum usb_role role);
 18typedef enum usb_role (*usb_role_switch_get_t)(struct usb_role_switch *sw);
 19
 20/**
 21 * struct usb_role_switch_desc - USB Role Switch Descriptor
 22 * @fwnode: The device node to be associated with the role switch
 23 * @usb2_port: Optional reference to the host controller port device (USB2)
 24 * @usb3_port: Optional reference to the host controller port device (USB3)
 25 * @udc: Optional reference to the peripheral controller device
 26 * @set: Callback for setting the role
 27 * @get: Callback for getting the role (optional)
 28 * @allow_userspace_control: If true userspace may change the role through sysfs
 29 * @driver_data: Private data pointer
 30 * @name: Name for the switch (optional)
 31 *
 32 * @usb2_port and @usb3_port will point to the USB host port and @udc to the USB
 33 * device controller behind the USB connector with the role switch. If
 34 * @usb2_port, @usb3_port and @udc are included in the description, the
 35 * reference count for them should be incremented by the caller of
 36 * usb_role_switch_register() before registering the switch.
 37 */
 38struct usb_role_switch_desc {
 39	struct fwnode_handle *fwnode;
 40	struct device *usb2_port;
 41	struct device *usb3_port;
 42	struct device *udc;
 43	usb_role_switch_set_t set;
 44	usb_role_switch_get_t get;
 45	bool allow_userspace_control;
 46	void *driver_data;
 47	const char *name;
 48};
 49
 50
 51#if IS_ENABLED(CONFIG_USB_ROLE_SWITCH)
 52int usb_role_switch_set_role(struct usb_role_switch *sw, enum usb_role role);
 53enum usb_role usb_role_switch_get_role(struct usb_role_switch *sw);
 54struct usb_role_switch *usb_role_switch_get(struct device *dev);
 55struct usb_role_switch *fwnode_usb_role_switch_get(struct fwnode_handle *node);
 56void usb_role_switch_put(struct usb_role_switch *sw);
 57
 58struct usb_role_switch *
 59usb_role_switch_find_by_fwnode(const struct fwnode_handle *fwnode);
 60
 61struct usb_role_switch *
 62usb_role_switch_register(struct device *parent,
 63			 const struct usb_role_switch_desc *desc);
 64void usb_role_switch_unregister(struct usb_role_switch *sw);
 65
 66void usb_role_switch_set_drvdata(struct usb_role_switch *sw, void *data);
 67void *usb_role_switch_get_drvdata(struct usb_role_switch *sw);
 68const char *usb_role_string(enum usb_role role);
 69#else
 70static inline int usb_role_switch_set_role(struct usb_role_switch *sw,
 71		enum usb_role role)
 72{
 73	return 0;
 74}
 75
 76static inline enum usb_role usb_role_switch_get_role(struct usb_role_switch *sw)
 77{
 78	return USB_ROLE_NONE;
 79}
 80
 81static inline struct usb_role_switch *usb_role_switch_get(struct device *dev)
 82{
 83	return ERR_PTR(-ENODEV);
 84}
 85
 86static inline struct usb_role_switch *
 87fwnode_usb_role_switch_get(struct fwnode_handle *node)
 88{
 89	return ERR_PTR(-ENODEV);
 90}
 91
 92static inline void usb_role_switch_put(struct usb_role_switch *sw) { }
 93
 94static inline struct usb_role_switch *
 95usb_role_switch_find_by_fwnode(const struct fwnode_handle *fwnode)
 96{
 97	return NULL;
 98}
 99
100static inline struct usb_role_switch *
101usb_role_switch_register(struct device *parent,
102			 const struct usb_role_switch_desc *desc)
103{
104	return ERR_PTR(-ENODEV);
105}
106
107static inline void usb_role_switch_unregister(struct usb_role_switch *sw) { }
108
109static inline void
110usb_role_switch_set_drvdata(struct usb_role_switch *sw, void *data)
111{
112}
113
114static inline void *usb_role_switch_get_drvdata(struct usb_role_switch *sw)
115{
116	return NULL;
117}
118
119static inline const char *usb_role_string(enum usb_role role)
120{
121	return "unknown";
122}
123
124#endif
125
126#endif /* __LINUX_USB_ROLE_H */
~/ Read-only file preview.