USB patches for 3.6-rc1
Here's the big USB patch set for the 3.6-rc1 merge window. Lots of little changes in here, primarily for gadget controllers and drivers. There's some scsi changes that I think also went in through the scsi tree, but they merge just fine. All of these patches have been in the linux-next tree for a while now. Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.18 (GNU/Linux) iEYEABECAAYFAlAQhpcACgkQMUfUDdst+yms4wCgpMbfFYTZ8lHpDnXHYFv6qw8j FIsAmwT4mbT7m8C0k+ELV/5T2e0eYJEQ =QetG -----END PGP SIGNATURE----- Merge tag 'usb-3.6-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb Pull USB patches from Greg Kroah-Hartman: "Here's the big USB patch set for the 3.6-rc1 merge window. Lots of little changes in here, primarily for gadget controllers and drivers. There's some scsi changes that I think also went in through the scsi tree, but they merge just fine. All of these patches have been in the linux-next tree for a while now. Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>" Fix up trivial conflicts in include/scsi/scsi_device.h (same libata conflict that Jeff had already encountered) * tag 'usb-3.6-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb: (207 commits) usb: Add USB_QUIRK_RESET_RESUME for all Logitech UVC webcams usb: Add quirk detection based on interface information usb: s3c-hsotg: Add header file protection macros in s3c-hsotg.h USB: ehci-s5p: Add vbus setup function to the s5p ehci glue layer USB: add USB_VENDOR_AND_INTERFACE_INFO() macro USB: notify phy when root hub port connect change USB: remove 8 bytes of padding from usb_host_interface on 64 bit builds USB: option: add ZTE MF821D USB: sierra: QMI mode MC7710 moved to qcserial USB: qcserial: adding Sierra Wireless devices USB: qcserial: support generic Qualcomm serial ports USB: qcserial: make probe more flexible USB: qcserial: centralize probe exit path USB: qcserial: consolidate usb_set_interface calls USB: ehci-s5p: Add support for device tree USB: ohci-exynos: Add support for device tree USB: ehci-omap: fix compile failure(v1) usb: host: tegra: pass correct pointer in ehci_setup() USB: ehci-fsl: Update ifdef check to work on 64-bit ppc USB: serial: keyspan: Removed unrequired parentheses. ...
This commit is contained in:
commit
9fc377799b
159 changed files with 8063 additions and 4146 deletions
|
@ -5,12 +5,15 @@
|
|||
#ifndef __LINUX_USB_CHIPIDEA_H
|
||||
#define __LINUX_USB_CHIPIDEA_H
|
||||
|
||||
#include <linux/usb/otg.h>
|
||||
|
||||
struct ci13xxx;
|
||||
struct ci13xxx_udc_driver {
|
||||
struct ci13xxx_platform_data {
|
||||
const char *name;
|
||||
/* offset of the capability registers */
|
||||
uintptr_t capoffset;
|
||||
unsigned power_budget;
|
||||
struct usb_phy *phy;
|
||||
unsigned long flags;
|
||||
#define CI13XXX_REGS_SHARED BIT(0)
|
||||
#define CI13XXX_REQUIRE_TRANSCEIVER BIT(1)
|
||||
|
@ -19,10 +22,17 @@ struct ci13xxx_udc_driver {
|
|||
|
||||
#define CI13XXX_CONTROLLER_RESET_EVENT 0
|
||||
#define CI13XXX_CONTROLLER_STOPPED_EVENT 1
|
||||
void (*notify_event) (struct ci13xxx *udc, unsigned event);
|
||||
void (*notify_event) (struct ci13xxx *ci, unsigned event);
|
||||
};
|
||||
|
||||
/* Default offset of capability registers */
|
||||
#define DEF_CAPOFFSET 0x100
|
||||
|
||||
/* Add ci13xxx device */
|
||||
struct platform_device *ci13xxx_add_device(struct device *dev,
|
||||
struct resource *res, int nres,
|
||||
struct ci13xxx_platform_data *platdata);
|
||||
/* Remove ci13xxx device */
|
||||
void ci13xxx_remove_device(struct platform_device *pdev);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -111,7 +111,13 @@ struct ehci_regs {
|
|||
/* ASYNCLISTADDR: offset 0x18 */
|
||||
u32 async_next; /* address of next async queue head */
|
||||
|
||||
u32 reserved[9];
|
||||
u32 reserved1[2];
|
||||
|
||||
/* TXFILLTUNING: offset 0x24 */
|
||||
u32 txfill_tuning; /* TX FIFO Tuning register */
|
||||
#define TXFIFO_DEFAULT (8<<16) /* FIFO burst threshold 8 */
|
||||
|
||||
u32 reserved2[6];
|
||||
|
||||
/* CONFIGFLAG: offset 0x40 */
|
||||
u32 configured_flag;
|
||||
|
@ -155,26 +161,34 @@ struct ehci_regs {
|
|||
#define PORT_CSC (1<<1) /* connect status change */
|
||||
#define PORT_CONNECT (1<<0) /* device connected */
|
||||
#define PORT_RWC_BITS (PORT_CSC | PORT_PEC | PORT_OCC)
|
||||
};
|
||||
|
||||
#define USBMODE 0x68 /* USB Device mode */
|
||||
u32 reserved3[9];
|
||||
|
||||
/* USBMODE: offset 0x68 */
|
||||
u32 usbmode; /* USB Device mode */
|
||||
#define USBMODE_SDIS (1<<3) /* Stream disable */
|
||||
#define USBMODE_BE (1<<2) /* BE/LE endianness select */
|
||||
#define USBMODE_CM_HC (3<<0) /* host controller mode */
|
||||
#define USBMODE_CM_IDLE (0<<0) /* idle state */
|
||||
|
||||
u32 reserved4[7];
|
||||
|
||||
/* Moorestown has some non-standard registers, partially due to the fact that
|
||||
* its EHCI controller has both TT and LPM support. HOSTPCx are extensions to
|
||||
* PORTSCx
|
||||
*/
|
||||
#define HOSTPC0 0x84 /* HOSTPC extension */
|
||||
/* HOSTPC: offset 0x84 */
|
||||
u32 hostpc[0]; /* HOSTPC extension */
|
||||
#define HOSTPC_PHCD (1<<22) /* Phy clock disable */
|
||||
#define HOSTPC_PSPD (3<<25) /* Port speed detection */
|
||||
#define USBMODE_EX 0xc8 /* USB Device mode extension */
|
||||
|
||||
u32 reserved5[17];
|
||||
|
||||
/* USBMODE_EX: offset 0xc8 */
|
||||
u32 usbmode_ex; /* USB Device mode extension */
|
||||
#define USBMODE_EX_VBPS (1<<5) /* VBus Power Select On */
|
||||
#define USBMODE_EX_HC (3<<0) /* host controller mode */
|
||||
#define TXFILLTUNING 0x24 /* TX FIFO Tuning register */
|
||||
#define TXFIFO_DEFAULT (8<<16) /* FIFO burst threshold 8 */
|
||||
};
|
||||
|
||||
/* Appendix C, Debug port ... intended for use with special "debug devices"
|
||||
* that can help if there's no serial console. (nonstandard enumeration.)
|
||||
|
|
|
@ -93,6 +93,12 @@ struct usb_hcd {
|
|||
*/
|
||||
const struct hc_driver *driver; /* hw-specific hooks */
|
||||
|
||||
/*
|
||||
* OTG and some Host controllers need software interaction with phys;
|
||||
* other external phys should be software-transparent
|
||||
*/
|
||||
struct usb_phy *phy;
|
||||
|
||||
/* Flags that need to be manipulated atomically because they can
|
||||
* change while the host controller is running. Always use
|
||||
* set_bit() or clear_bit() to change their values.
|
||||
|
|
30
include/linux/usb/musb-omap.h
Normal file
30
include/linux/usb/musb-omap.h
Normal file
|
@ -0,0 +1,30 @@
|
|||
/*
|
||||
* Copyright (C) 2011-2012 by Texas Instruments
|
||||
*
|
||||
* The Inventra Controller Driver for Linux 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 __MUSB_OMAP_H__
|
||||
#define __MUSB_OMAP_H__
|
||||
|
||||
enum omap_musb_vbus_id_status {
|
||||
OMAP_MUSB_UNKNOWN = 0,
|
||||
OMAP_MUSB_ID_GROUND,
|
||||
OMAP_MUSB_ID_FLOAT,
|
||||
OMAP_MUSB_VBUS_VALID,
|
||||
OMAP_MUSB_VBUS_OFF,
|
||||
};
|
||||
|
||||
#if (defined(CONFIG_USB_MUSB_OMAP2PLUS) || \
|
||||
defined(CONFIG_USB_MUSB_OMAP2PLUS_MODULE))
|
||||
void omap_musb_mailbox(enum omap_musb_vbus_id_status status);
|
||||
#else
|
||||
static inline void omap_musb_mailbox(enum omap_musb_vbus_id_status status)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* __MUSB_OMAP_H__ */
|
|
@ -43,6 +43,13 @@ enum usb_phy_events {
|
|||
USB_EVENT_ENUMERATED, /* gadget driver enumerated */
|
||||
};
|
||||
|
||||
/* associate a type with PHY */
|
||||
enum usb_phy_type {
|
||||
USB_PHY_TYPE_UNDEFINED,
|
||||
USB_PHY_TYPE_USB2,
|
||||
USB_PHY_TYPE_USB3,
|
||||
};
|
||||
|
||||
struct usb_phy;
|
||||
|
||||
/* for transceivers connected thru an ULPI interface, the user must
|
||||
|
@ -89,6 +96,7 @@ struct usb_phy {
|
|||
const char *label;
|
||||
unsigned int flags;
|
||||
|
||||
enum usb_phy_type type;
|
||||
enum usb_otg_state state;
|
||||
enum usb_phy_events last_event;
|
||||
|
||||
|
@ -105,6 +113,9 @@ struct usb_phy {
|
|||
u16 port_status;
|
||||
u16 port_change;
|
||||
|
||||
/* to support controllers that have multiple transceivers */
|
||||
struct list_head head;
|
||||
|
||||
/* initialize/shutdown the OTG controller */
|
||||
int (*init)(struct usb_phy *x);
|
||||
void (*shutdown)(struct usb_phy *x);
|
||||
|
@ -117,11 +128,15 @@ struct usb_phy {
|
|||
int (*set_suspend)(struct usb_phy *x,
|
||||
int suspend);
|
||||
|
||||
/* notify phy connect status change */
|
||||
int (*notify_connect)(struct usb_phy *x, int port);
|
||||
int (*notify_disconnect)(struct usb_phy *x, int port);
|
||||
};
|
||||
|
||||
|
||||
/* for board-specific init logic */
|
||||
extern int usb_set_transceiver(struct usb_phy *);
|
||||
extern int usb_add_phy(struct usb_phy *, enum usb_phy_type type);
|
||||
extern void usb_remove_phy(struct usb_phy *);
|
||||
|
||||
#if defined(CONFIG_NOP_USB_XCEIV) || (defined(CONFIG_NOP_USB_XCEIV_MODULE) && defined(MODULE))
|
||||
/* sometimes transceivers are accessed only through e.g. ULPI */
|
||||
|
@ -172,16 +187,29 @@ usb_phy_shutdown(struct usb_phy *x)
|
|||
|
||||
/* for usb host and peripheral controller drivers */
|
||||
#ifdef CONFIG_USB_OTG_UTILS
|
||||
extern struct usb_phy *usb_get_transceiver(void);
|
||||
extern void usb_put_transceiver(struct usb_phy *);
|
||||
extern struct usb_phy *usb_get_phy(enum usb_phy_type type);
|
||||
extern struct usb_phy *devm_usb_get_phy(struct device *dev,
|
||||
enum usb_phy_type type);
|
||||
extern void usb_put_phy(struct usb_phy *);
|
||||
extern void devm_usb_put_phy(struct device *dev, struct usb_phy *x);
|
||||
extern const char *otg_state_string(enum usb_otg_state state);
|
||||
#else
|
||||
static inline struct usb_phy *usb_get_transceiver(void)
|
||||
static inline struct usb_phy *usb_get_phy(enum usb_phy_type type)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static inline void usb_put_transceiver(struct usb_phy *x)
|
||||
static inline struct usb_phy *devm_usb_get_phy(struct device *dev,
|
||||
enum usb_phy_type type)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static inline void usb_put_phy(struct usb_phy *x)
|
||||
{
|
||||
}
|
||||
|
||||
static inline void devm_usb_put_phy(struct device *dev, struct usb_phy *x)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -251,6 +279,24 @@ usb_phy_set_suspend(struct usb_phy *x, int suspend)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static inline int
|
||||
usb_phy_notify_connect(struct usb_phy *x, int port)
|
||||
{
|
||||
if (x->notify_connect)
|
||||
return x->notify_connect(x, port);
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int
|
||||
usb_phy_notify_disconnect(struct usb_phy *x, int port)
|
||||
{
|
||||
if (x->notify_disconnect)
|
||||
return x->notify_disconnect(x, port);
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int
|
||||
otg_start_srp(struct usb_otg *otg)
|
||||
{
|
||||
|
@ -276,4 +322,15 @@ usb_unregister_notifier(struct usb_phy *x, struct notifier_block *nb)
|
|||
/* for OTG controller drivers (and maybe other stuff) */
|
||||
extern int usb_bus_start_enum(struct usb_bus *bus, unsigned port_num);
|
||||
|
||||
static inline const char *usb_phy_type_string(enum usb_phy_type type)
|
||||
{
|
||||
switch (type) {
|
||||
case USB_PHY_TYPE_USB2:
|
||||
return "USB2 PHY";
|
||||
case USB_PHY_TYPE_USB3:
|
||||
return "USB3 PHY";
|
||||
default:
|
||||
return "UNKNOWN PHY TYPE";
|
||||
}
|
||||
}
|
||||
#endif /* __LINUX_USB_OTG_H */
|
||||
|
|
|
@ -132,6 +132,14 @@ struct renesas_usbhs_driver_param {
|
|||
* option:
|
||||
*
|
||||
* dma id for dmaengine
|
||||
* The data transfer direction on D0FIFO/D1FIFO should be
|
||||
* fixed for keeping consistency.
|
||||
* So, the platform id settings will be..
|
||||
* .d0_tx_id = xx_TX,
|
||||
* .d1_rx_id = xx_RX,
|
||||
* or
|
||||
* .d1_tx_id = xx_TX,
|
||||
* .d0_rx_id = xx_RX,
|
||||
*/
|
||||
int d0_tx_id;
|
||||
int d0_rx_id;
|
||||
|
|
|
@ -20,6 +20,28 @@ enum {
|
|||
IU_ID_WRITE_READY = 0x07,
|
||||
};
|
||||
|
||||
enum {
|
||||
TMF_ABORT_TASK = 0x01,
|
||||
TMF_ABORT_TASK_SET = 0x02,
|
||||
TMF_CLEAR_TASK_SET = 0x04,
|
||||
TMF_LOGICAL_UNIT_RESET = 0x08,
|
||||
TMF_I_T_NEXUS_RESET = 0x10,
|
||||
TMF_CLEAR_ACA = 0x40,
|
||||
TMF_QUERY_TASK = 0x80,
|
||||
TMF_QUERY_TASK_SET = 0x81,
|
||||
TMF_QUERY_ASYNC_EVENT = 0x82,
|
||||
};
|
||||
|
||||
enum {
|
||||
RC_TMF_COMPLETE = 0x00,
|
||||
RC_INVALID_INFO_UNIT = 0x02,
|
||||
RC_TMF_NOT_SUPPORTED = 0x04,
|
||||
RC_TMF_FAILED = 0x05,
|
||||
RC_TMF_SUCCEEDED = 0x08,
|
||||
RC_INCORRECT_LUN = 0x09,
|
||||
RC_OVERLAPPED_TAG = 0x0a,
|
||||
};
|
||||
|
||||
struct command_iu {
|
||||
__u8 iu_id;
|
||||
__u8 rsvd1;
|
||||
|
@ -32,6 +54,16 @@ struct command_iu {
|
|||
__u8 cdb[16]; /* XXX: Overflow-checking tools may misunderstand */
|
||||
};
|
||||
|
||||
struct task_mgmt_iu {
|
||||
__u8 iu_id;
|
||||
__u8 rsvd1;
|
||||
__be16 tag;
|
||||
__u8 function;
|
||||
__u8 rsvd2;
|
||||
__be16 task_tag;
|
||||
struct scsi_lun lun;
|
||||
};
|
||||
|
||||
/*
|
||||
* Also used for the Read Ready and Write Ready IUs since they have the
|
||||
* same first four bytes
|
||||
|
@ -47,6 +79,14 @@ struct sense_iu {
|
|||
__u8 sense[SCSI_SENSE_BUFFERSIZE];
|
||||
};
|
||||
|
||||
struct response_ui {
|
||||
__u8 iu_id;
|
||||
__u8 rsvd1;
|
||||
__be16 tag;
|
||||
__be16 add_response_info;
|
||||
__u8 response_code;
|
||||
};
|
||||
|
||||
struct usb_pipe_usage_descriptor {
|
||||
__u8 bLength;
|
||||
__u8 bDescriptorType;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue