root/include/linux/usb/otg.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. otg_start_hnp
  2. otg_set_vbus
  3. otg_set_host
  4. otg_set_peripheral
  5. otg_start_srp

   1 /* SPDX-License-Identifier: GPL-2.0 */
   2 /* USB OTG (On The Go) defines */
   3 /*
   4  *
   5  * These APIs may be used between USB controllers.  USB device drivers
   6  * (for either host or peripheral roles) don't use these calls; they
   7  * continue to use just usb_device and usb_gadget.
   8  */
   9 
  10 #ifndef __LINUX_USB_OTG_H
  11 #define __LINUX_USB_OTG_H
  12 
  13 #include <linux/phy/phy.h>
  14 #include <linux/usb/phy.h>
  15 
  16 struct usb_otg {
  17         u8                      default_a;
  18 
  19         struct phy              *phy;
  20         /* old usb_phy interface */
  21         struct usb_phy          *usb_phy;
  22         struct usb_bus          *host;
  23         struct usb_gadget       *gadget;
  24 
  25         enum usb_otg_state      state;
  26 
  27         /* bind/unbind the host controller */
  28         int     (*set_host)(struct usb_otg *otg, struct usb_bus *host);
  29 
  30         /* bind/unbind the peripheral controller */
  31         int     (*set_peripheral)(struct usb_otg *otg,
  32                                         struct usb_gadget *gadget);
  33 
  34         /* effective for A-peripheral, ignored for B devices */
  35         int     (*set_vbus)(struct usb_otg *otg, bool enabled);
  36 
  37         /* for B devices only:  start session with A-Host */
  38         int     (*start_srp)(struct usb_otg *otg);
  39 
  40         /* start or continue HNP role switch */
  41         int     (*start_hnp)(struct usb_otg *otg);
  42 
  43 };
  44 
  45 /**
  46  * struct usb_otg_caps - describes the otg capabilities of the device
  47  * @otg_rev: The OTG revision number the device is compliant with, it's
  48  *              in binary-coded decimal (i.e. 2.0 is 0200H).
  49  * @hnp_support: Indicates if the device supports HNP.
  50  * @srp_support: Indicates if the device supports SRP.
  51  * @adp_support: Indicates if the device supports ADP.
  52  */
  53 struct usb_otg_caps {
  54         u16 otg_rev;
  55         bool hnp_support;
  56         bool srp_support;
  57         bool adp_support;
  58 };
  59 
  60 extern const char *usb_otg_state_string(enum usb_otg_state state);
  61 
  62 /* Context: can sleep */
  63 static inline int
  64 otg_start_hnp(struct usb_otg *otg)
  65 {
  66         if (otg && otg->start_hnp)
  67                 return otg->start_hnp(otg);
  68 
  69         return -ENOTSUPP;
  70 }
  71 
  72 /* Context: can sleep */
  73 static inline int
  74 otg_set_vbus(struct usb_otg *otg, bool enabled)
  75 {
  76         if (otg && otg->set_vbus)
  77                 return otg->set_vbus(otg, enabled);
  78 
  79         return -ENOTSUPP;
  80 }
  81 
  82 /* for HCDs */
  83 static inline int
  84 otg_set_host(struct usb_otg *otg, struct usb_bus *host)
  85 {
  86         if (otg && otg->set_host)
  87                 return otg->set_host(otg, host);
  88 
  89         return -ENOTSUPP;
  90 }
  91 
  92 /* for usb peripheral controller drivers */
  93 
  94 /* Context: can sleep */
  95 static inline int
  96 otg_set_peripheral(struct usb_otg *otg, struct usb_gadget *periph)
  97 {
  98         if (otg && otg->set_peripheral)
  99                 return otg->set_peripheral(otg, periph);
 100 
 101         return -ENOTSUPP;
 102 }
 103 
 104 static inline int
 105 otg_start_srp(struct usb_otg *otg)
 106 {
 107         if (otg && otg->start_srp)
 108                 return otg->start_srp(otg);
 109 
 110         return -ENOTSUPP;
 111 }
 112 
 113 /* for OTG controller drivers (and maybe other stuff) */
 114 extern int usb_bus_start_enum(struct usb_bus *bus, unsigned port_num);
 115 
 116 enum usb_dr_mode {
 117         USB_DR_MODE_UNKNOWN,
 118         USB_DR_MODE_HOST,
 119         USB_DR_MODE_PERIPHERAL,
 120         USB_DR_MODE_OTG,
 121 };
 122 
 123 /**
 124  * usb_get_dr_mode - Get dual role mode for given device
 125  * @dev: Pointer to the given device
 126  *
 127  * The function gets phy interface string from property 'dr_mode',
 128  * and returns the correspondig enum usb_dr_mode
 129  */
 130 extern enum usb_dr_mode usb_get_dr_mode(struct device *dev);
 131 
 132 #endif /* __LINUX_USB_OTG_H */

/* [<][>][^][v][top][bottom][index][help] */