diff options
Diffstat (limited to 'include')
| -rw-r--r-- | include/linux/nls.h | 5 | ||||
| -rw-r--r-- | include/linux/platform_data/mv_usb.h | 18 | ||||
| -rw-r--r-- | include/linux/platform_data/s3c-hsudc.h | 34 | ||||
| -rw-r--r-- | include/linux/usb.h | 14 | ||||
| -rw-r--r-- | include/linux/usb/ch11.h | 31 | ||||
| -rw-r--r-- | include/linux/usb/ch9.h | 20 | ||||
| -rw-r--r-- | include/linux/usb/gadget.h | 26 | ||||
| -rw-r--r-- | include/linux/usb/hcd.h | 2 | ||||
| -rw-r--r-- | include/linux/usb/renesas_usbhs.h | 10 | ||||
| -rw-r--r-- | include/linux/usb/serial.h | 11 | 
10 files changed, 146 insertions, 25 deletions
diff --git a/include/linux/nls.h b/include/linux/nls.h index d47beef08df..5dc635f8d79 100644 --- a/include/linux/nls.h +++ b/include/linux/nls.h @@ -43,7 +43,7 @@ enum utf16_endian {  	UTF16_BIG_ENDIAN  }; -/* nls.c */ +/* nls_base.c */  extern int register_nls(struct nls_table *);  extern int unregister_nls(struct nls_table *);  extern struct nls_table *load_nls(char *); @@ -52,7 +52,8 @@ extern struct nls_table *load_nls_default(void);  extern int utf8_to_utf32(const u8 *s, int len, unicode_t *pu);  extern int utf32_to_utf8(unicode_t u, u8 *s, int maxlen); -extern int utf8s_to_utf16s(const u8 *s, int len, wchar_t *pwcs); +extern int utf8s_to_utf16s(const u8 *s, int len, +		enum utf16_endian endian, wchar_t *pwcs, int maxlen);  extern int utf16s_to_utf8s(const wchar_t *pwcs, int len,  		enum utf16_endian endian, u8 *s, int maxlen); diff --git a/include/linux/platform_data/mv_usb.h b/include/linux/platform_data/mv_usb.h index e9d9149ddf3..d94804aca76 100644 --- a/include/linux/platform_data/mv_usb.h +++ b/include/linux/platform_data/mv_usb.h @@ -42,9 +42,23 @@ struct mv_usb_platform_data {  	/* only valid for HCD. OTG or Host only*/  	unsigned int		mode; -	int     (*phy_init)(unsigned int regbase); -	void    (*phy_deinit)(unsigned int regbase); +	/* This flag is used for that needs id pin checked by otg */ +	unsigned int    disable_otg_clock_gating:1; +	/* Force a_bus_req to be asserted */ +	 unsigned int    otg_force_a_bus_req:1; + +	int	(*phy_init)(void __iomem *regbase); +	void	(*phy_deinit)(void __iomem *regbase);  	int	(*set_vbus)(unsigned int vbus); +	int     (*private_init)(void __iomem *opregs, void __iomem *phyregs);  }; +#ifndef CONFIG_HAVE_CLK +/* Dummy stub for clk framework */ +#define clk_get(dev, id)       NULL +#define clk_put(clock)         do {} while (0) +#define clk_enable(clock)      do {} while (0) +#define clk_disable(clock)     do {} while (0) +#endif +  #endif diff --git a/include/linux/platform_data/s3c-hsudc.h b/include/linux/platform_data/s3c-hsudc.h new file mode 100644 index 00000000000..6fa109339bf --- /dev/null +++ b/include/linux/platform_data/s3c-hsudc.h @@ -0,0 +1,34 @@ +/* + * S3C24XX USB 2.0 High-speed USB controller gadget driver + * + * Copyright (c) 2010 Samsung Electronics Co., Ltd. + *		http://www.samsung.com/ + * + * The S3C24XX USB 2.0 high-speed USB controller supports upto 9 endpoints. + * Each endpoint can be configured as either in or out endpoint. Endpoints + * can be configured for Bulk or Interrupt transfer mode. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. +*/ + +#ifndef __LINUX_USB_S3C_HSUDC_H +#define __LINUX_USB_S3C_HSUDC_H + +/** + * s3c24xx_hsudc_platdata - Platform data for USB High-Speed gadget controller. + * @epnum: Number of endpoints to be instantiated by the controller driver. + * @gpio_init: Platform specific USB related GPIO initialization. + * @gpio_uninit: Platform specific USB releted GPIO uninitialzation. + * + * Representation of platform data for the S3C24XX USB 2.0 High Speed gadget + * controllers. + */ +struct s3c24xx_hsudc_platdata { +	unsigned int	epnum; +	void		(*gpio_init)(void); +	void		(*gpio_uninit)(void); +}; + +#endif	/* __LINUX_USB_S3C_HSUDC_H */ diff --git a/include/linux/usb.h b/include/linux/usb.h index 7f8d4d61ca4..27a4e16d2bf 100644 --- a/include/linux/usb.h +++ b/include/linux/usb.h @@ -1233,6 +1233,7 @@ struct urb {  	void *transfer_buffer;		/* (in) associated data buffer */  	dma_addr_t transfer_dma;	/* (in) dma addr for transfer_buffer */  	struct scatterlist *sg;		/* (in) scatter gather buffer list */ +	int num_mapped_sgs;		/* (internal) mapped sg entries */  	int num_sgs;			/* (in) number of entries in the sg list */  	u32 transfer_buffer_length;	/* (in) data buffer length */  	u32 actual_length;		/* (return) actual transfer length */ @@ -1610,6 +1611,19 @@ usb_maxpacket(struct usb_device *udev, int pipe, int is_out)  /* ----------------------------------------------------------------------- */ +/* translate USB error codes to codes user space understands */ +static inline int usb_translate_errors(int error_code) +{ +	switch (error_code) { +	case 0: +	case -ENOMEM: +	case -ENODEV: +		return error_code; +	default: +		return -EIO; +	} +} +  /* Events from the usb core */  #define USB_DEVICE_ADD		0x0001  #define USB_DEVICE_REMOVE	0x0002 diff --git a/include/linux/usb/ch11.h b/include/linux/usb/ch11.h index 4ebaf082417..31fdb4c6ee3 100644 --- a/include/linux/usb/ch11.h +++ b/include/linux/usb/ch11.h @@ -26,7 +26,6 @@  #define HUB_RESET_TT		9  #define HUB_GET_TT_STATE	10  #define HUB_STOP_TT		11 -#define HUB_SET_DEPTH		12  /*   * Hub class additional requests defined by USB 3.0 spec @@ -165,11 +164,20 @@ struct usb_port_status {   * wHubCharacteristics (masks)   * See USB 2.0 spec Table 11-13, offset 3   */ -#define HUB_CHAR_LPSM		0x0003 /* D1 .. D0 */ -#define HUB_CHAR_COMPOUND	0x0004 /* D2       */ -#define HUB_CHAR_OCPM		0x0018 /* D4 .. D3 */ -#define HUB_CHAR_TTTT           0x0060 /* D6 .. D5 */ -#define HUB_CHAR_PORTIND        0x0080 /* D7       */ +#define HUB_CHAR_LPSM		0x0003 /* Logical Power Switching Mode mask */ +#define HUB_CHAR_COMMON_LPSM	0x0000 /* All ports power control at once */ +#define HUB_CHAR_INDV_PORT_LPSM	0x0001 /* per-port power control */ +#define HUB_CHAR_NO_LPSM	0x0002 /* no power switching */ + +#define HUB_CHAR_COMPOUND	0x0004 /* hub is part of a compound device */ + +#define HUB_CHAR_OCPM		0x0018 /* Over-Current Protection Mode mask */ +#define HUB_CHAR_COMMON_OCPM	0x0000 /* All ports Over-Current reporting */ +#define HUB_CHAR_INDV_PORT_OCPM	0x0008 /* per-port Over-current reporting */ +#define HUB_CHAR_NO_OCPM	0x0010 /* No Over-current Protection support */ + +#define HUB_CHAR_TTTT		0x0060 /* TT Think Time mask */ +#define HUB_CHAR_PORTIND	0x0080 /* per-port indicators (LEDs) */  struct usb_hub_status {  	__le16 wHubStatus; @@ -198,6 +206,17 @@ struct usb_hub_status {  #define USB_DT_HUB_NONVAR_SIZE		7  #define USB_DT_SS_HUB_SIZE              12 +/* + * Hub Device descriptor + * USB Hub class device protocols + */ + +#define USB_HUB_PR_FS		0 /* Full speed hub */ +#define USB_HUB_PR_HS_NO_TT	0 /* Hi-speed hub without TT */ +#define USB_HUB_PR_HS_SINGLE_TT	1 /* Hi-speed hub with single TT */ +#define USB_HUB_PR_HS_MULTI_TT	2 /* Hi-speed hub with multiple TT */ +#define USB_HUB_PR_SS		3 /* Super speed hub */ +  struct usb_hub_descriptor {  	__u8  bDescLength;  	__u8  bDescriptorType; diff --git a/include/linux/usb/ch9.h b/include/linux/usb/ch9.h index d5da6c68c25..61b29057b05 100644 --- a/include/linux/usb/ch9.h +++ b/include/linux/usb/ch9.h @@ -605,8 +605,26 @@ struct usb_ss_ep_comp_descriptor {  } __attribute__ ((packed));  #define USB_DT_SS_EP_COMP_SIZE		6 +  /* Bits 4:0 of bmAttributes if this is a bulk endpoint */ -#define USB_SS_MAX_STREAMS(p)		(1 << ((p) & 0x1f)) +static inline int +usb_ss_max_streams(const struct usb_ss_ep_comp_descriptor *comp) +{ +	int		max_streams; + +	if (!comp) +		return 0; + +	max_streams = comp->bmAttributes & 0x1f; + +	if (!max_streams) +		return 0; + +	max_streams = 1 << max_streams; + +	return max_streams; +} +  /* Bits 1:0 of bmAttributes if this is an isoc endpoint */  #define USB_SS_MULT(p)			(1 + ((p) & 0x3)) diff --git a/include/linux/usb/gadget.h b/include/linux/usb/gadget.h index 1d3a67523ff..da653b5c713 100644 --- a/include/linux/usb/gadget.h +++ b/include/linux/usb/gadget.h @@ -20,6 +20,7 @@  #include <linux/init.h>  #include <linux/list.h>  #include <linux/slab.h> +#include <linux/scatterlist.h>  #include <linux/types.h>  #include <linux/usb/ch9.h> @@ -32,6 +33,9 @@ struct usb_ep;   * @dma: DMA address corresponding to 'buf'.  If you don't set this   *	field, and the usb controller needs one, it is responsible   *	for mapping and unmapping the buffer. + * @sg: a scatterlist for SG-capable controllers. + * @num_sgs: number of SG entries + * @num_mapped_sgs: number of SG entries mapped to DMA (internal)   * @length: Length of that data   * @stream_id: The stream id, when USB3.0 bulk streams are being used   * @no_interrupt: If true, hints that no completion irq is needed. @@ -88,6 +92,10 @@ struct usb_request {  	unsigned		length;  	dma_addr_t		dma; +	struct scatterlist	*sg; +	unsigned		num_sgs; +	unsigned		num_mapped_sgs; +  	unsigned		stream_id:16;  	unsigned		no_interrupt:1;  	unsigned		zero:1; @@ -164,7 +172,7 @@ struct usb_ep {  	unsigned		maxpacket:16;  	unsigned		max_streams:16;  	unsigned		mult:2; -	unsigned		maxburst:4; +	unsigned		maxburst:5;  	u8			address;  	const struct usb_endpoint_descriptor	*desc;  	const struct usb_ss_ep_comp_descriptor	*comp_desc; @@ -477,8 +485,9 @@ struct usb_gadget_ops {   *	driver setup() requests   * @ep_list: List of other endpoints supported by the device.   * @speed: Speed of current connection to USB host. - * @is_dualspeed: True if the controller supports both high and full speed - *	operation.  If it does, the gadget driver must also support both. + * @max_speed: Maximal speed the UDC can handle.  UDC must support this + *      and all slower speeds. + * @sg_supported: true if we can handle scatter-gather   * @is_otg: True if the USB device port uses a Mini-AB jack, so that the   *	gadget driver must provide a USB OTG descriptor.   * @is_a_peripheral: False unless is_otg, the "A" end of a USB cable @@ -518,7 +527,8 @@ struct usb_gadget {  	struct usb_ep			*ep0;  	struct list_head		ep_list;	/* of usb_ep */  	enum usb_device_speed		speed; -	unsigned			is_dualspeed:1; +	enum usb_device_speed		max_speed; +	unsigned			sg_supported:1;  	unsigned			is_otg:1;  	unsigned			is_a_peripheral:1;  	unsigned			b_hnp_enable:1; @@ -549,7 +559,7 @@ static inline struct usb_gadget *dev_to_usb_gadget(struct device *dev)  static inline int gadget_is_dualspeed(struct usb_gadget *g)  {  #ifdef CONFIG_USB_GADGET_DUALSPEED -	/* runtime test would check "g->is_dualspeed" ... that might be +	/* runtime test would check "g->max_speed" ... that might be  	 * useful to work around hardware bugs, but is mostly pointless  	 */  	return 1; @@ -567,7 +577,7 @@ static inline int gadget_is_superspeed(struct usb_gadget *g)  {  #ifdef CONFIG_USB_GADGET_SUPERSPEED  	/* -	 * runtime test would check "g->is_superspeed" ... that might be +	 * runtime test would check "g->max_speed" ... that might be  	 * useful to work around hardware bugs, but is mostly pointless  	 */  	return 1; @@ -760,7 +770,7 @@ static inline int usb_gadget_disconnect(struct usb_gadget *gadget)  /**   * struct usb_gadget_driver - driver for usb 'slave' devices   * @function: String describing the gadget's function - * @speed: Highest speed the driver handles. + * @max_speed: Highest speed the driver handles.   * @setup: Invoked for ep0 control requests that aren't handled by   *	the hardware level driver. Most calls must be handled by   *	the gadget driver, including descriptor and configuration @@ -824,7 +834,7 @@ static inline int usb_gadget_disconnect(struct usb_gadget *gadget)   */  struct usb_gadget_driver {  	char			*function; -	enum usb_device_speed	speed; +	enum usb_device_speed	max_speed;  	void			(*unbind)(struct usb_gadget *);  	int			(*setup)(struct usb_gadget *,  					const struct usb_ctrlrequest *); diff --git a/include/linux/usb/hcd.h b/include/linux/usb/hcd.h index 03354d557b7..b2f62f3a32a 100644 --- a/include/linux/usb/hcd.h +++ b/include/linux/usb/hcd.h @@ -99,7 +99,6 @@ struct usb_hcd {  	 */  	unsigned long		flags;  #define HCD_FLAG_HW_ACCESSIBLE		0	/* at full power */ -#define HCD_FLAG_SAW_IRQ		1  #define HCD_FLAG_POLL_RH		2	/* poll for rh status? */  #define HCD_FLAG_POLL_PENDING		3	/* status has changed? */  #define HCD_FLAG_WAKEUP_PENDING		4	/* root hub is resuming? */ @@ -110,7 +109,6 @@ struct usb_hcd {  	 * be slightly faster than test_bit().  	 */  #define HCD_HW_ACCESSIBLE(hcd)	((hcd)->flags & (1U << HCD_FLAG_HW_ACCESSIBLE)) -#define HCD_SAW_IRQ(hcd)	((hcd)->flags & (1U << HCD_FLAG_SAW_IRQ))  #define HCD_POLL_RH(hcd)	((hcd)->flags & (1U << HCD_FLAG_POLL_RH))  #define HCD_POLL_PENDING(hcd)	((hcd)->flags & (1U << HCD_FLAG_POLL_PENDING))  #define HCD_WAKEUP_PENDING(hcd)	((hcd)->flags & (1U << HCD_FLAG_WAKEUP_PENDING)) diff --git a/include/linux/usb/renesas_usbhs.h b/include/linux/usb/renesas_usbhs.h index e5a40c31854..0d3f9887925 100644 --- a/include/linux/usb/renesas_usbhs.h +++ b/include/linux/usb/renesas_usbhs.h @@ -67,6 +67,14 @@ struct renesas_usbhs_platform_callback {  	/*  	 * option:  	 * +	 * for board specific clock control +	 */ +	void (*power_ctrl)(struct platform_device *pdev, +			   void __iomem *base, int enable); + +	/* +	 * option: +	 *  	 * Phy reset for platform  	 */  	void (*phy_reset)(struct platform_device *pdev); @@ -118,7 +126,7 @@ struct renesas_usbhs_driver_param {  	 *  	 * delay time from notify_hotplug callback  	 */ -	int detection_delay; +	int detection_delay; /* msec */  	/*  	 * option: diff --git a/include/linux/usb/serial.h b/include/linux/usb/serial.h index b29f70b2eca..4267a9c717b 100644 --- a/include/linux/usb/serial.h +++ b/include/linux/usb/serial.h @@ -58,11 +58,13 @@ enum port_dev_state {   * @read_urb: pointer to the bulk in struct urb for this port.   * @bulk_in_endpointAddress: endpoint address for the bulk in pipe for this   *	port. + * @bulk_in_buffers: pointers to the bulk in buffers for this port + * @read_urbs: pointers to the bulk in urbs for this port + * @read_urbs_free: status bitmap the for bulk in urbs   * @bulk_out_buffer: pointer to the bulk out buffer for this port.   * @bulk_out_size: the size of the bulk_out_buffer, in bytes.   * @write_urb: pointer to the bulk out struct urb for this port.   * @write_fifo: kfifo used to buffer outgoing data - * @write_urb_busy: port`s writing status   * @bulk_out_buffers: pointers to the bulk out buffers for this port   * @write_urbs: pointers to the bulk out urbs for this port   * @write_urbs_free: status bitmap the for bulk out urbs @@ -99,11 +101,14 @@ struct usb_serial_port {  	struct urb		*read_urb;  	__u8			bulk_in_endpointAddress; +	unsigned char		*bulk_in_buffers[2]; +	struct urb		*read_urbs[2]; +	unsigned long		read_urbs_free; +  	unsigned char		*bulk_out_buffer;  	int			bulk_out_size;  	struct urb		*write_urb;  	struct kfifo		write_fifo; -	int			write_urb_busy;  	unsigned char		*bulk_out_buffers[2];  	struct urb		*write_urbs[2]; @@ -340,7 +345,7 @@ extern void usb_serial_generic_disconnect(struct usb_serial *serial);  extern void usb_serial_generic_release(struct usb_serial *serial);  extern int usb_serial_generic_register(int debug);  extern void usb_serial_generic_deregister(void); -extern int usb_serial_generic_submit_read_urb(struct usb_serial_port *port, +extern int usb_serial_generic_submit_read_urbs(struct usb_serial_port *port,  						 gfp_t mem_flags);  extern void usb_serial_generic_process_read_urb(struct urb *urb);  extern int usb_serial_generic_prepare_write_buffer(struct usb_serial_port *port,  |