linux/include/linux/usb/role.h
<<
>>
Prefs
   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 device *dev, enum usb_role role);
  17typedef enum usb_role (*usb_role_switch_get_t)(struct device *dev);
  18
  19/**
  20 * struct usb_role_switch_desc - USB Role Switch Descriptor
  21 * @fwnode: The device node to be associated with the role switch
  22 * @usb2_port: Optional reference to the host controller port device (USB2)
  23 * @usb3_port: Optional reference to the host controller port device (USB3)
  24 * @udc: Optional reference to the peripheral controller device
  25 * @set: Callback for setting the role
  26 * @get: Callback for getting the role (optional)
  27 * @allow_userspace_control: If true userspace may change the role through sysfs
  28 *
  29 * @usb2_port and @usb3_port will point to the USB host port and @udc to the USB
  30 * device controller behind the USB connector with the role switch. If
  31 * @usb2_port, @usb3_port and @udc are included in the description, the
  32 * reference count for them should be incremented by the caller of
  33 * usb_role_switch_register() before registering the switch.
  34 */
  35struct usb_role_switch_desc {
  36        struct fwnode_handle *fwnode;
  37        struct device *usb2_port;
  38        struct device *usb3_port;
  39        struct device *udc;
  40        usb_role_switch_set_t set;
  41        usb_role_switch_get_t get;
  42        bool allow_userspace_control;
  43};
  44
  45int usb_role_switch_set_role(struct usb_role_switch *sw, enum usb_role role);
  46enum usb_role usb_role_switch_get_role(struct usb_role_switch *sw);
  47struct usb_role_switch *usb_role_switch_get(struct device *dev);
  48void usb_role_switch_put(struct usb_role_switch *sw);
  49
  50struct usb_role_switch *
  51usb_role_switch_register(struct device *parent,
  52                         const struct usb_role_switch_desc *desc);
  53void usb_role_switch_unregister(struct usb_role_switch *sw);
  54
  55#endif /* __LINUX_USB_ROLE_H */
  56