Blame view

kernel/linux-imx6_3.14.28/include/linux/usb/otg.h 2.24 KB
6b13f685e   김민수   BSP 최초 추가
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
  /* USB OTG (On The Go) defines */
  /*
   *
   * These APIs may be used between USB controllers.  USB device drivers
   * (for either host or peripheral roles) don't use these calls; they
   * continue to use just usb_device and usb_gadget.
   */
  
  #ifndef __LINUX_USB_OTG_H
  #define __LINUX_USB_OTG_H
  
  #include <linux/phy/phy.h>
  #include <linux/usb/phy.h>
  
  struct usb_otg {
  	u8			default_a;
  
  	struct phy		*phy;
  	/* old usb_phy interface */
  	struct usb_phy		*usb_phy;
  	struct usb_bus		*host;
  	struct usb_gadget	*gadget;
  
  	enum usb_otg_state	state;
  
  	/* bind/unbind the host controller */
  	int	(*set_host)(struct usb_otg *otg, struct usb_bus *host);
  
  	/* bind/unbind the peripheral controller */
  	int	(*set_peripheral)(struct usb_otg *otg,
  					struct usb_gadget *gadget);
  
  	/* effective for A-peripheral, ignored for B devices */
  	int	(*set_vbus)(struct usb_otg *otg, bool enabled);
  
  	/* for B devices only:  start session with A-Host */
  	int	(*start_srp)(struct usb_otg *otg);
  
  	/* start or continue HNP role switch */
  	int	(*start_hnp)(struct usb_otg *otg);
  
  };
  
  extern const char *usb_otg_state_string(enum usb_otg_state state);
  
  /* Context: can sleep */
  static inline int
  otg_start_hnp(struct usb_otg *otg)
  {
  	if (otg && otg->start_hnp)
  		return otg->start_hnp(otg);
  
  	return -ENOTSUPP;
  }
  
  /* Context: can sleep */
  static inline int
  otg_set_vbus(struct usb_otg *otg, bool enabled)
  {
  	if (otg && otg->set_vbus)
  		return otg->set_vbus(otg, enabled);
  
  	return -ENOTSUPP;
  }
  
  /* for HCDs */
  static inline int
  otg_set_host(struct usb_otg *otg, struct usb_bus *host)
  {
  	if (otg && otg->set_host)
  		return otg->set_host(otg, host);
  
  	return -ENOTSUPP;
  }
  
  /* for usb peripheral controller drivers */
  
  /* Context: can sleep */
  static inline int
  otg_set_peripheral(struct usb_otg *otg, struct usb_gadget *periph)
  {
  	if (otg && otg->set_peripheral)
  		return otg->set_peripheral(otg, periph);
  
  	return -ENOTSUPP;
  }
  
  static inline int
  otg_start_srp(struct usb_otg *otg)
  {
  	if (otg && otg->start_srp)
  		return otg->start_srp(otg);
  
  	return -ENOTSUPP;
  }
  
  /* for OTG controller drivers (and maybe other stuff) */
  extern int usb_bus_start_enum(struct usb_bus *bus, unsigned port_num);
  
  enum usb_dr_mode {
  	USB_DR_MODE_UNKNOWN,
  	USB_DR_MODE_HOST,
  	USB_DR_MODE_PERIPHERAL,
  	USB_DR_MODE_OTG,
  };
  
  #endif /* __LINUX_USB_OTG_H */