Merge branch 'usb-next' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb
* 'usb-next' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb: (232 commits) USB: Add USB-ID for Multiplex RC serial adapter to cp210x.c xhci: Clean up 32-bit build warnings. USB: update documentation for usbmon usb: usb-storage doesn't support dynamic id currently, the patch disables the feature to fix an oops drivers/usb/class/cdc-acm.c: clear dangling pointer drivers/usb/dwc3/dwc3-pci.c: introduce missing kfree drivers/usb/host/isp1760-if.c: introduce missing kfree usb: option: add ZD Incorporated HSPA modem usb: ch9: fix up MaxStreams helper USB: usb-skeleton.c: cleanup open_count USB: usb-skeleton.c: fix open/disconnect race xhci: Properly handle COMP_2ND_BW_ERR USB: remove dead code from suspend/resume path USB: add quirk for another camera drivers: usb: wusbcore: Fix dependency for USB_WUSB xhci: Better debugging for critical host errors. xhci: Be less verbose during URB cancellation. xhci: Remove debugging about ring structure allocation. xhci: Remove debugging about toggling cycle bits. xhci: Remove debugging for individual transfers. ...
This commit is contained in:
+3
-2
@@ -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);
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 */
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
+19
-1
@@ -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))
|
||||
|
||||
|
||||
@@ -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 *);
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -64,6 +64,14 @@ struct renesas_usbhs_platform_callback {
|
||||
*/
|
||||
void (*hardware_exit)(struct platform_device *pdev);
|
||||
|
||||
/*
|
||||
* option:
|
||||
*
|
||||
* for board specific clock control
|
||||
*/
|
||||
void (*power_ctrl)(struct platform_device *pdev,
|
||||
void __iomem *base, int enable);
|
||||
|
||||
/*
|
||||
* option:
|
||||
*
|
||||
@@ -118,7 +126,7 @@ struct renesas_usbhs_driver_param {
|
||||
*
|
||||
* delay time from notify_hotplug callback
|
||||
*/
|
||||
int detection_delay;
|
||||
int detection_delay; /* msec */
|
||||
|
||||
/*
|
||||
* option:
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user