Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb-2.6: (148 commits) USB: serial: fix stalled writes USB: remove fake "address-of" expressions USB: fix thread-unsafe anchor utiliy routines USB: usbtest: support test device with only one iso-in or iso-out endpoint USB: usbtest: avoid to free coherent buffer in atomic context USB: xhci: Set DMA mask for host. USB: xhci: Don't flush doorbell writes. USB: xhci: Reduce reads and writes of interrupter registers. USB: xhci: Make xhci_set_hc_event_deq() static. USB: xhci: Minimize HW event ring dequeue pointer writes. USB: xhci: Make xhci_handle_event() static. USB: xhci: Remove unnecessary reads of IRQ_PENDING register. USB: xhci: Performance - move xhci_work() into xhci_irq() USB: xhci: Performance - move interrupt handlers into xhci-ring.c USB: xhci: Performance - move functions that find ep ring. USB:: fix linux/usb.h kernel-doc warnings USB: add USB serial ssu100 driver USB: usb-storage: implement autosuspend USB: ehci: fix remove of ehci debugfs dir USB: Add USB 2.0 to ssb ohci driver ...
This commit is contained in:
+4
-1
@@ -127,6 +127,8 @@ enum usb_interface_condition {
|
||||
* queued reset so that usb_cancel_queued_reset() doesn't try to
|
||||
* remove from the workqueue when running inside the worker
|
||||
* thread. See __usb_queue_reset_device().
|
||||
* @resetting_device: USB core reset the device, so use alt setting 0 as
|
||||
* current; needs bandwidth alloc after reset.
|
||||
*
|
||||
* USB device drivers attach to interfaces on a physical device. Each
|
||||
* interface encapsulates a single high level function, such as feeding
|
||||
@@ -843,7 +845,7 @@ struct usb_driver {
|
||||
|
||||
void (*disconnect) (struct usb_interface *intf);
|
||||
|
||||
int (*ioctl) (struct usb_interface *intf, unsigned int code,
|
||||
int (*unlocked_ioctl) (struct usb_interface *intf, unsigned int code,
|
||||
void *buf);
|
||||
|
||||
int (*suspend) (struct usb_interface *intf, pm_message_t message);
|
||||
@@ -1015,6 +1017,7 @@ typedef void (*usb_complete_t)(struct urb *);
|
||||
* is a different endpoint (and pipe) from "out" endpoint two.
|
||||
* The current configuration controls the existence, type, and
|
||||
* maximum packet size of any given endpoint.
|
||||
* @stream_id: the endpoint's stream ID for bulk streams
|
||||
* @dev: Identifies the USB device to perform the request.
|
||||
* @status: This is read in non-iso completion functions to get the
|
||||
* status of the particular request. ISO requests only use it
|
||||
|
||||
@@ -276,6 +276,8 @@ struct usb_composite_driver {
|
||||
int (*bind)(struct usb_composite_dev *);
|
||||
int (*unbind)(struct usb_composite_dev *);
|
||||
|
||||
void (*disconnect)(struct usb_composite_dev *);
|
||||
|
||||
/* global suspend hooks */
|
||||
void (*suspend)(struct usb_composite_dev *);
|
||||
void (*resume)(struct usb_composite_dev *);
|
||||
@@ -342,6 +344,10 @@ struct usb_composite_dev {
|
||||
};
|
||||
|
||||
extern int usb_string_id(struct usb_composite_dev *c);
|
||||
extern int usb_string_ids_tab(struct usb_composite_dev *c,
|
||||
struct usb_string *str);
|
||||
extern int usb_string_ids_n(struct usb_composite_dev *c, unsigned n);
|
||||
|
||||
|
||||
/* messaging utils */
|
||||
#define DBG(d, fmt, args...) \
|
||||
|
||||
@@ -39,6 +39,12 @@ struct ehci_caps {
|
||||
#define HCS_N_PORTS(p) (((p)>>0)&0xf) /* bits 3:0, ports on HC */
|
||||
|
||||
u32 hcc_params; /* HCCPARAMS - offset 0x8 */
|
||||
/* EHCI 1.1 addendum */
|
||||
#define HCC_32FRAME_PERIODIC_LIST(p) ((p)&(1 << 19))
|
||||
#define HCC_PER_PORT_CHANGE_EVENT(p) ((p)&(1 << 18))
|
||||
#define HCC_LPM(p) ((p)&(1 << 17))
|
||||
#define HCC_HW_PREFETCH(p) ((p)&(1 << 16))
|
||||
|
||||
#define HCC_EXT_CAPS(p) (((p)>>8)&0xff) /* for pci extended caps */
|
||||
#define HCC_ISOC_CACHE(p) ((p)&(1 << 7)) /* true: can cache isoc frame */
|
||||
#define HCC_ISOC_THRES(p) (((p)>>4)&0x7) /* bits 6:4, uframes cached */
|
||||
@@ -54,6 +60,13 @@ struct ehci_regs {
|
||||
|
||||
/* USBCMD: offset 0x00 */
|
||||
u32 command;
|
||||
|
||||
/* EHCI 1.1 addendum */
|
||||
#define CMD_HIRD (0xf<<24) /* host initiated resume duration */
|
||||
#define CMD_PPCEE (1<<15) /* per port change event enable */
|
||||
#define CMD_FSP (1<<14) /* fully synchronized prefetch */
|
||||
#define CMD_ASPE (1<<13) /* async schedule prefetch enable */
|
||||
#define CMD_PSPE (1<<12) /* periodic schedule prefetch enable */
|
||||
/* 23:16 is r/w intr rate, in microframes; default "8" == 1/msec */
|
||||
#define CMD_PARK (1<<11) /* enable "park" on async qh */
|
||||
#define CMD_PARK_CNT(c) (((c)>>8)&3) /* how many transfers to park for */
|
||||
@@ -67,6 +80,7 @@ struct ehci_regs {
|
||||
|
||||
/* USBSTS: offset 0x04 */
|
||||
u32 status;
|
||||
#define STS_PPCE_MASK (0xff<<16) /* Per-Port change event 1-16 */
|
||||
#define STS_ASS (1<<15) /* Async Schedule Status */
|
||||
#define STS_PSS (1<<14) /* Periodic Schedule Status */
|
||||
#define STS_RECL (1<<13) /* Reclamation */
|
||||
@@ -100,6 +114,14 @@ struct ehci_regs {
|
||||
|
||||
/* PORTSC: offset 0x44 */
|
||||
u32 port_status[0]; /* up to N_PORTS */
|
||||
/* EHCI 1.1 addendum */
|
||||
#define PORTSC_SUSPEND_STS_ACK 0
|
||||
#define PORTSC_SUSPEND_STS_NYET 1
|
||||
#define PORTSC_SUSPEND_STS_STALL 2
|
||||
#define PORTSC_SUSPEND_STS_ERR 3
|
||||
|
||||
#define PORT_DEV_ADDR (0x7f<<25) /* device address */
|
||||
#define PORT_SSTS (0x3<<23) /* suspend status */
|
||||
/* 31:23 reserved */
|
||||
#define PORT_WKOC_E (1<<22) /* wake on overcurrent (enable) */
|
||||
#define PORT_WKDISC_E (1<<21) /* wake on disconnect (enable) */
|
||||
@@ -115,6 +137,7 @@ struct ehci_regs {
|
||||
#define PORT_USB11(x) (((x)&(3<<10)) == (1<<10)) /* USB 1.1 device */
|
||||
/* 11:10 for detecting lowspeed devices (reset vs release ownership) */
|
||||
/* 9 reserved */
|
||||
#define PORT_LPM (1<<9) /* LPM transaction */
|
||||
#define PORT_RESET (1<<8) /* reset port */
|
||||
#define PORT_SUSPEND (1<<7) /* suspend port */
|
||||
#define PORT_RESUME (1<<6) /* resume it */
|
||||
|
||||
@@ -180,9 +180,9 @@ static int functionfs_bind(struct ffs_data *ffs, struct usb_composite_dev *cdev)
|
||||
static void functionfs_unbind(struct ffs_data *ffs)
|
||||
__attribute__((nonnull));
|
||||
|
||||
static int functionfs_add(struct usb_composite_dev *cdev,
|
||||
struct usb_configuration *c,
|
||||
struct ffs_data *ffs)
|
||||
static int functionfs_bind_config(struct usb_composite_dev *cdev,
|
||||
struct usb_configuration *c,
|
||||
struct ffs_data *ffs)
|
||||
__attribute__((warn_unused_result, nonnull));
|
||||
|
||||
|
||||
|
||||
+25
-6
@@ -89,18 +89,33 @@ struct usb_hcd {
|
||||
*/
|
||||
const struct hc_driver *driver; /* hw-specific hooks */
|
||||
|
||||
/* Flags that need to be manipulated atomically */
|
||||
/* 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.
|
||||
*/
|
||||
unsigned long flags;
|
||||
#define HCD_FLAG_HW_ACCESSIBLE 0x00000001
|
||||
#define HCD_FLAG_SAW_IRQ 0x00000002
|
||||
#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? */
|
||||
|
||||
/* The flags can be tested using these macros; they are likely to
|
||||
* 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))
|
||||
|
||||
/* Flags that get set only during HCD registration or removal. */
|
||||
unsigned rh_registered:1;/* is root hub registered? */
|
||||
unsigned rh_pollable:1; /* may we poll the root hub? */
|
||||
|
||||
/* The next flag is a stopgap, to be removed when all the HCDs
|
||||
* support the new root-hub polling mechanism. */
|
||||
unsigned uses_new_polling:1;
|
||||
unsigned poll_rh:1; /* poll for rh status? */
|
||||
unsigned poll_pending:1; /* status has changed? */
|
||||
unsigned wireless:1; /* Wireless USB HCD */
|
||||
unsigned authorized_default:1;
|
||||
unsigned has_tt:1; /* Integrated TT in root hub */
|
||||
@@ -198,7 +213,7 @@ struct hc_driver {
|
||||
* a whole, not just the root hub; they're for PCI bus glue.
|
||||
*/
|
||||
/* called after suspending the hub, before entering D3 etc */
|
||||
int (*pci_suspend)(struct usb_hcd *hcd);
|
||||
int (*pci_suspend)(struct usb_hcd *hcd, bool do_wakeup);
|
||||
|
||||
/* called after entering D0 (etc), before resuming the hub */
|
||||
int (*pci_resume)(struct usb_hcd *hcd, bool hibernated);
|
||||
@@ -299,6 +314,10 @@ struct hc_driver {
|
||||
int (*update_hub_device)(struct usb_hcd *, struct usb_device *hdev,
|
||||
struct usb_tt *tt, gfp_t mem_flags);
|
||||
int (*reset_device)(struct usb_hcd *, struct usb_device *);
|
||||
/* Notifies the HCD after a device is connected and its
|
||||
* address is set
|
||||
*/
|
||||
int (*update_device)(struct usb_hcd *, struct usb_device *);
|
||||
};
|
||||
|
||||
extern int usb_hcd_link_urb_to_ep(struct usb_hcd *hcd, struct urb *urb);
|
||||
|
||||
@@ -43,13 +43,6 @@ enum usb_xceiv_events {
|
||||
USB_EVENT_ENUMERATED, /* gadget driver enumerated */
|
||||
};
|
||||
|
||||
#define USB_OTG_PULLUP_ID (1 << 0)
|
||||
#define USB_OTG_PULLDOWN_DP (1 << 1)
|
||||
#define USB_OTG_PULLDOWN_DM (1 << 2)
|
||||
#define USB_OTG_EXT_VBUS_INDICATOR (1 << 3)
|
||||
#define USB_OTG_DRV_VBUS (1 << 4)
|
||||
#define USB_OTG_DRV_VBUS_EXT (1 << 5)
|
||||
|
||||
struct otg_transceiver;
|
||||
|
||||
/* for transceivers connected thru an ULPI interface, the user must
|
||||
@@ -146,10 +139,10 @@ static inline int otg_io_read(struct otg_transceiver *otg, u32 reg)
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
static inline int otg_io_write(struct otg_transceiver *otg, u32 reg, u32 val)
|
||||
static inline int otg_io_write(struct otg_transceiver *otg, u32 val, u32 reg)
|
||||
{
|
||||
if (otg->io_ops && otg->io_ops->write)
|
||||
return otg->io_ops->write(otg, reg, val);
|
||||
return otg->io_ops->write(otg, val, reg);
|
||||
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
@@ -26,4 +26,8 @@
|
||||
and can't handle talking to these interfaces */
|
||||
#define USB_QUIRK_HONOR_BNUMINTERFACES 0x00000020
|
||||
|
||||
/* device needs a pause during initialization, after we read the device
|
||||
descriptor */
|
||||
#define USB_QUIRK_DELAY_INIT 0x00000040
|
||||
|
||||
#endif /* __LINUX_USB_QUIRKS_H */
|
||||
|
||||
@@ -11,6 +11,42 @@
|
||||
#ifndef __LINUX_USB_ULPI_H
|
||||
#define __LINUX_USB_ULPI_H
|
||||
|
||||
#include <linux/usb/otg.h>
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
/*
|
||||
* ULPI Flags
|
||||
*/
|
||||
#define ULPI_OTG_ID_PULLUP (1 << 0)
|
||||
#define ULPI_OTG_DP_PULLDOWN_DIS (1 << 1)
|
||||
#define ULPI_OTG_DM_PULLDOWN_DIS (1 << 2)
|
||||
#define ULPI_OTG_DISCHRGVBUS (1 << 3)
|
||||
#define ULPI_OTG_CHRGVBUS (1 << 4)
|
||||
#define ULPI_OTG_DRVVBUS (1 << 5)
|
||||
#define ULPI_OTG_DRVVBUS_EXT (1 << 6)
|
||||
#define ULPI_OTG_EXTVBUSIND (1 << 7)
|
||||
|
||||
#define ULPI_IC_6PIN_SERIAL (1 << 8)
|
||||
#define ULPI_IC_3PIN_SERIAL (1 << 9)
|
||||
#define ULPI_IC_CARKIT (1 << 10)
|
||||
#define ULPI_IC_CLKSUSPM (1 << 11)
|
||||
#define ULPI_IC_AUTORESUME (1 << 12)
|
||||
#define ULPI_IC_EXTVBUS_INDINV (1 << 13)
|
||||
#define ULPI_IC_IND_PASSTHRU (1 << 14)
|
||||
#define ULPI_IC_PROTECT_DIS (1 << 15)
|
||||
|
||||
#define ULPI_FC_HS (1 << 16)
|
||||
#define ULPI_FC_FS (1 << 17)
|
||||
#define ULPI_FC_LS (1 << 18)
|
||||
#define ULPI_FC_FS4LS (1 << 19)
|
||||
#define ULPI_FC_TERMSEL (1 << 20)
|
||||
#define ULPI_FC_OP_NORM (1 << 21)
|
||||
#define ULPI_FC_OP_NODRV (1 << 22)
|
||||
#define ULPI_FC_OP_DIS_NRZI (1 << 23)
|
||||
#define ULPI_FC_OP_NSYNC_NEOP (1 << 24)
|
||||
#define ULPI_FC_RST (1 << 25)
|
||||
#define ULPI_FC_SUSPM (1 << 26)
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
/*
|
||||
@@ -58,6 +94,10 @@
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
/*
|
||||
* Register Bits
|
||||
*/
|
||||
|
||||
/* Function Control */
|
||||
#define ULPI_FUNC_CTRL_XCVRSEL (1 << 0)
|
||||
#define ULPI_FUNC_CTRL_XCVRSEL_MASK (3 << 0)
|
||||
|
||||
Reference in New Issue
Block a user