| 
									
										
										
										
											2008-01-30 15:21:33 -08:00
										 |  |  | /* USB OTG (On The Go) defines */ | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | /*
 | 
					
						
							| 
									
										
										
										
											2008-03-07 13:45:32 -05:00
										 |  |  |  * | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  |  * 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. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-03-07 13:45:32 -05:00
										 |  |  | #ifndef __LINUX_USB_OTG_H
 | 
					
						
							|  |  |  | #define __LINUX_USB_OTG_H
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-09-04 14:25:58 +05:30
										 |  |  | #include <linux/usb/phy.h>
 | 
					
						
							| 
									
										
										
										
											2009-12-17 13:01:36 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-02-13 13:24:04 +02:00
										 |  |  | struct usb_otg { | 
					
						
							|  |  |  | 	u8			default_a; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	struct usb_phy		*phy; | 
					
						
							|  |  |  | 	struct usb_bus		*host; | 
					
						
							|  |  |  | 	struct usb_gadget	*gadget; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	/* 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); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-27 15:17:18 +03:00
										 |  |  | #ifdef CONFIG_USB_OTG_UTILS
 | 
					
						
							| 
									
										
										
										
											2011-05-05 12:11:21 +02:00
										 |  |  | extern const char *otg_state_string(enum usb_otg_state state); | 
					
						
							| 
									
										
										
										
											2010-09-27 15:17:18 +03:00
										 |  |  | #else
 | 
					
						
							| 
									
										
										
										
											2011-05-05 12:11:21 +02:00
										 |  |  | static inline const char *otg_state_string(enum usb_otg_state state) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	return NULL; | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2010-09-27 15:17:18 +03:00
										 |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-24 23:54:31 -08:00
										 |  |  | /* Context: can sleep */ | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | static inline int | 
					
						
							| 
									
										
										
										
											2012-02-13 13:24:20 +02:00
										 |  |  | otg_start_hnp(struct usb_otg *otg) | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2012-02-13 13:24:20 +02:00
										 |  |  | 	if (otg && otg->start_hnp) | 
					
						
							|  |  |  | 		return otg->start_hnp(otg); | 
					
						
							| 
									
										
										
										
											2012-02-13 13:24:04 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-02-13 13:24:19 +02:00
										 |  |  | 	return -ENOTSUPP; | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-15 17:09:34 +03:00
										 |  |  | /* Context: can sleep */ | 
					
						
							|  |  |  | static inline int | 
					
						
							| 
									
										
										
										
											2012-02-13 13:24:20 +02:00
										 |  |  | otg_set_vbus(struct usb_otg *otg, bool enabled) | 
					
						
							| 
									
										
										
										
											2009-10-15 17:09:34 +03:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2012-02-13 13:24:20 +02:00
										 |  |  | 	if (otg && otg->set_vbus) | 
					
						
							|  |  |  | 		return otg->set_vbus(otg, enabled); | 
					
						
							| 
									
										
										
										
											2012-02-13 13:24:04 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-02-13 13:24:19 +02:00
										 |  |  | 	return -ENOTSUPP; | 
					
						
							| 
									
										
										
										
											2009-10-15 17:09:34 +03:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | /* for HCDs */ | 
					
						
							|  |  |  | static inline int | 
					
						
							| 
									
										
										
										
											2012-02-13 13:24:20 +02:00
										 |  |  | otg_set_host(struct usb_otg *otg, struct usb_bus *host) | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2012-02-13 13:24:20 +02:00
										 |  |  | 	if (otg && otg->set_host) | 
					
						
							|  |  |  | 		return otg->set_host(otg, host); | 
					
						
							| 
									
										
										
										
											2012-02-13 13:24:04 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-02-13 13:24:19 +02:00
										 |  |  | 	return -ENOTSUPP; | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* for usb peripheral controller drivers */ | 
					
						
							| 
									
										
										
										
											2009-01-24 23:54:31 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  | /* Context: can sleep */ | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | static inline int | 
					
						
							| 
									
										
										
										
											2012-02-13 13:24:20 +02:00
										 |  |  | otg_set_peripheral(struct usb_otg *otg, struct usb_gadget *periph) | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2012-02-13 13:24:20 +02:00
										 |  |  | 	if (otg && otg->set_peripheral) | 
					
						
							|  |  |  | 		return otg->set_peripheral(otg, periph); | 
					
						
							| 
									
										
										
										
											2012-02-13 13:24:04 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-02-13 13:24:19 +02:00
										 |  |  | 	return -ENOTSUPP; | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static inline int | 
					
						
							| 
									
										
										
										
											2012-02-13 13:24:20 +02:00
										 |  |  | otg_start_srp(struct usb_otg *otg) | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2012-02-13 13:24:20 +02:00
										 |  |  | 	if (otg && otg->start_srp) | 
					
						
							|  |  |  | 		return otg->start_srp(otg); | 
					
						
							| 
									
										
										
										
											2012-02-13 13:24:04 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-02-13 13:24:19 +02:00
										 |  |  | 	return -ENOTSUPP; | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* for OTG controller drivers (and maybe other stuff) */ | 
					
						
							|  |  |  | extern int usb_bus_start_enum(struct usb_bus *bus, unsigned port_num); | 
					
						
							| 
									
										
										
										
											2008-03-07 13:45:32 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | #endif /* __LINUX_USB_OTG_H */
 |