diff options
Diffstat (limited to 'include/usb.h')
| -rw-r--r-- | include/usb.h | 51 | 
1 files changed, 47 insertions, 4 deletions
| diff --git a/include/usb.h b/include/usb.h index 60db897cb..736730e89 100644 --- a/include/usb.h +++ b/include/usb.h @@ -125,6 +125,18 @@ struct usb_device {  	struct usb_device *children[USB_MAXCHILDREN];  	void *controller;		/* hardware controller private data */ +	/* slot_id - for xHCI enabled devices */ +	unsigned int slot_id; +}; + +/* + * You can initialize platform's USB host or device + * ports by passing this enum as an argument to + * board_usb_init(). + */ +enum usb_init_type { +	USB_INIT_HOST, +	USB_INIT_DEVICE  };  /********************************************************************** @@ -138,9 +150,9 @@ struct usb_device {  	defined(CONFIG_USB_OMAP3) || defined(CONFIG_USB_DA8XX) || \  	defined(CONFIG_USB_BLACKFIN) || defined(CONFIG_USB_AM35X) || \  	defined(CONFIG_USB_MUSB_DSPS) || defined(CONFIG_USB_MUSB_AM35X) || \ -	defined(CONFIG_USB_MUSB_OMAP2PLUS) +	defined(CONFIG_USB_MUSB_OMAP2PLUS) || defined(CONFIG_USB_XHCI) -int usb_lowlevel_init(int index, void **controller); +int usb_lowlevel_init(int index, enum usb_init_type init, void **controller);  int usb_lowlevel_stop(int index);  int submit_bulk_msg(struct usb_device *dev, unsigned long pipe, @@ -165,8 +177,34 @@ int submit_int_msg(struct usb_device *dev, unsigned long pipe, void *buffer,  extern void udc_disconnect(void); -#else -#error USB Lowlevel not defined +#endif + +/* + * board-specific hardware initialization, called by + * usb drivers and u-boot commands + * + * @param index USB controller number + * @param init initializes controller as USB host or device + */ +int board_usb_init(int index, enum usb_init_type init); + +/* + * can be used to clean up after failed USB initialization attempt + * vide: board_usb_init() + * + * @param index USB controller number for selective cleanup + * @param init usb_init_type passed to board_usb_init() + */ +int board_usb_cleanup(int index, enum usb_init_type init); + +/* + * If CONFIG_USB_CABLE_CHECK is set then this function + * should be defined in board file. + * + * @return 1 if cable is connected and 0 otherwise. + */ +#ifdef CONFIG_USB_CABLE_CHECK +int usb_cable_connected(void);  #endif  #ifdef CONFIG_USB_STORAGE @@ -338,6 +376,10 @@ int usb_set_interface(struct usb_device *dev, int interface, int alternate);  #define usb_pipecontrol(pipe)	(usb_pipetype((pipe)) == PIPE_CONTROL)  #define usb_pipebulk(pipe)	(usb_pipetype((pipe)) == PIPE_BULK) +#define usb_pipe_ep_index(pipe)	\ +		usb_pipecontrol(pipe) ? (usb_pipeendpoint(pipe) * 2) : \ +				((usb_pipeendpoint(pipe) * 2) - \ +				 (usb_pipein(pipe) ? 0 : 1))  /*************************************************************************   * Hub Stuff @@ -382,5 +424,6 @@ struct usb_device *usb_alloc_new_device(void *controller);  int usb_new_device(struct usb_device *dev);  void usb_free_device(void); +int usb_alloc_device(struct usb_device *dev);  #endif /*_USB_H_ */ |