Merge branch 'master' of /pub/scm/linux/kernel/git/torvalds/linux-2.6
This commit is contained in:
commit
fc228a04a4
206 changed files with 8402 additions and 5924 deletions
|
@ -96,6 +96,9 @@
|
|||
#define PCI_CLASS_SERIAL_ACCESS 0x0c01
|
||||
#define PCI_CLASS_SERIAL_SSA 0x0c02
|
||||
#define PCI_CLASS_SERIAL_USB 0x0c03
|
||||
#define PCI_CLASS_SERIAL_USB_UHCI 0x0c0300
|
||||
#define PCI_CLASS_SERIAL_USB_OHCI 0x0c0310
|
||||
#define PCI_CLASS_SERIAL_USB_EHCI 0x0c0320
|
||||
#define PCI_CLASS_SERIAL_FIBER 0x0c04
|
||||
#define PCI_CLASS_SERIAL_SMBUS 0x0c05
|
||||
|
||||
|
|
|
@ -224,7 +224,6 @@ struct dev_pm_info {
|
|||
unsigned should_wakeup:1;
|
||||
pm_message_t prev_state;
|
||||
void * saved_state;
|
||||
atomic_t pm_users;
|
||||
struct device * pm_parent;
|
||||
struct list_head entry;
|
||||
#endif
|
||||
|
@ -244,6 +243,9 @@ extern int device_suspend(pm_message_t state);
|
|||
#define device_may_wakeup(dev) \
|
||||
(device_can_wakeup(dev) && (dev)->power.should_wakeup)
|
||||
|
||||
extern int dpm_runtime_suspend(struct device *, pm_message_t);
|
||||
extern void dpm_runtime_resume(struct device *);
|
||||
|
||||
#else /* !CONFIG_PM */
|
||||
|
||||
static inline int device_suspend(pm_message_t state)
|
||||
|
@ -254,6 +256,16 @@ static inline int device_suspend(pm_message_t state)
|
|||
#define device_set_wakeup_enable(dev,val) do{}while(0)
|
||||
#define device_may_wakeup(dev) (0)
|
||||
|
||||
static inline int dpm_runtime_suspend(struct device * dev, pm_message_t state)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline void dpm_runtime_resume(struct device * dev)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
/* changes to device_may_wakeup take effect on the next pm state change.
|
||||
|
|
|
@ -57,6 +57,7 @@ struct usb_host_endpoint {
|
|||
struct usb_endpoint_descriptor desc;
|
||||
struct list_head urb_list;
|
||||
void *hcpriv;
|
||||
struct kobject *kobj; /* For sysfs info */
|
||||
|
||||
unsigned char *extra; /* Extra descriptors */
|
||||
int extralen;
|
||||
|
@ -136,7 +137,8 @@ struct usb_interface {
|
|||
* active alternate setting */
|
||||
unsigned num_altsetting; /* number of alternate settings */
|
||||
|
||||
int minor; /* minor number this interface is bound to */
|
||||
int minor; /* minor number this interface is
|
||||
* bound to */
|
||||
enum usb_interface_condition condition; /* state of binding */
|
||||
struct device dev; /* interface specific device info */
|
||||
struct class_device *class_dev;
|
||||
|
@ -229,7 +231,7 @@ struct usb_interface_cache {
|
|||
struct usb_host_config {
|
||||
struct usb_config_descriptor desc;
|
||||
|
||||
char *string;
|
||||
char *string; /* iConfiguration string, if present */
|
||||
/* the interfaces associated with this configuration,
|
||||
* stored in no particular order */
|
||||
struct usb_interface *interface[USB_MAXINTERFACES];
|
||||
|
@ -248,7 +250,7 @@ int __usb_get_extra_descriptor(char *buffer, unsigned size,
|
|||
__usb_get_extra_descriptor((ifpoint)->extra,(ifpoint)->extralen,\
|
||||
type,(void**)ptr)
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* ----------------------------------------------------------------------- */
|
||||
|
||||
struct usb_operations;
|
||||
|
||||
|
@ -268,7 +270,8 @@ struct usb_bus {
|
|||
unsigned is_b_host:1; /* true during some HNP roleswitches */
|
||||
unsigned b_hnp_enable:1; /* OTG: did A-Host enable HNP? */
|
||||
|
||||
int devnum_next; /* Next open device number in round-robin allocation */
|
||||
int devnum_next; /* Next open device number in
|
||||
* round-robin allocation */
|
||||
|
||||
struct usb_devmap devmap; /* device address allocation map */
|
||||
struct usb_operations *op; /* Operations (specific to the HC) */
|
||||
|
@ -289,15 +292,16 @@ struct usb_bus {
|
|||
struct dentry *usbfs_dentry; /* usbfs dentry entry for the bus */
|
||||
|
||||
struct class_device *class_dev; /* class device for this bus */
|
||||
struct kref kref; /* handles reference counting this bus */
|
||||
void (*release)(struct usb_bus *bus); /* function to destroy this bus's memory */
|
||||
struct kref kref; /* reference counting for this bus */
|
||||
void (*release)(struct usb_bus *bus);
|
||||
|
||||
#if defined(CONFIG_USB_MON)
|
||||
struct mon_bus *mon_bus; /* non-null when associated */
|
||||
int monitored; /* non-zero when monitored */
|
||||
#endif
|
||||
};
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* ----------------------------------------------------------------------- */
|
||||
|
||||
/* This is arbitrary.
|
||||
* From USB 2.0 spec Table 11-13, offset 7, a hub can
|
||||
|
@ -326,7 +330,8 @@ struct usb_device {
|
|||
|
||||
struct semaphore serialize;
|
||||
|
||||
unsigned int toggle[2]; /* one bit for each endpoint ([0] = IN, [1] = OUT) */
|
||||
unsigned int toggle[2]; /* one bit for each endpoint
|
||||
* ([0] = IN, [1] = OUT) */
|
||||
|
||||
struct usb_device *parent; /* our hub, unless we're the root */
|
||||
struct usb_bus *bus; /* Bus we're part of */
|
||||
|
@ -343,12 +348,14 @@ struct usb_device {
|
|||
|
||||
char **rawdescriptors; /* Raw descriptors for each config */
|
||||
|
||||
int have_langid; /* whether string_langid is valid yet */
|
||||
int have_langid; /* whether string_langid is valid */
|
||||
int string_langid; /* language ID for strings */
|
||||
|
||||
char *product;
|
||||
char *manufacturer;
|
||||
char *serial; /* static strings from the device */
|
||||
/* static strings from the device */
|
||||
char *product; /* iProduct string, if present */
|
||||
char *manufacturer; /* iManufacturer string, if present */
|
||||
char *serial; /* iSerialNumber string, if present */
|
||||
|
||||
struct list_head filelist;
|
||||
struct class_device *class_dev;
|
||||
struct dentry *usbfs_dentry; /* usbfs dentry entry for the device */
|
||||
|
@ -440,22 +447,31 @@ extern struct usb_host_interface *usb_altnum_to_altsetting(
|
|||
* USB 2.0 root hubs (EHCI host controllers) will get one path ID if they are
|
||||
* high speed, and a different one if they are full or low speed.
|
||||
*/
|
||||
static inline int usb_make_path (struct usb_device *dev, char *buf, size_t size)
|
||||
static inline int usb_make_path (struct usb_device *dev, char *buf,
|
||||
size_t size)
|
||||
{
|
||||
int actual;
|
||||
actual = snprintf (buf, size, "usb-%s-%s", dev->bus->bus_name, dev->devpath);
|
||||
actual = snprintf (buf, size, "usb-%s-%s", dev->bus->bus_name,
|
||||
dev->devpath);
|
||||
return (actual >= (int)size) ? -1 : actual;
|
||||
}
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
#define USB_DEVICE_ID_MATCH_DEVICE (USB_DEVICE_ID_MATCH_VENDOR | USB_DEVICE_ID_MATCH_PRODUCT)
|
||||
#define USB_DEVICE_ID_MATCH_DEV_RANGE (USB_DEVICE_ID_MATCH_DEV_LO | USB_DEVICE_ID_MATCH_DEV_HI)
|
||||
#define USB_DEVICE_ID_MATCH_DEVICE_AND_VERSION (USB_DEVICE_ID_MATCH_DEVICE | USB_DEVICE_ID_MATCH_DEV_RANGE)
|
||||
#define USB_DEVICE_ID_MATCH_DEVICE \
|
||||
(USB_DEVICE_ID_MATCH_VENDOR | USB_DEVICE_ID_MATCH_PRODUCT)
|
||||
#define USB_DEVICE_ID_MATCH_DEV_RANGE \
|
||||
(USB_DEVICE_ID_MATCH_DEV_LO | USB_DEVICE_ID_MATCH_DEV_HI)
|
||||
#define USB_DEVICE_ID_MATCH_DEVICE_AND_VERSION \
|
||||
(USB_DEVICE_ID_MATCH_DEVICE | USB_DEVICE_ID_MATCH_DEV_RANGE)
|
||||
#define USB_DEVICE_ID_MATCH_DEV_INFO \
|
||||
(USB_DEVICE_ID_MATCH_DEV_CLASS | USB_DEVICE_ID_MATCH_DEV_SUBCLASS | USB_DEVICE_ID_MATCH_DEV_PROTOCOL)
|
||||
(USB_DEVICE_ID_MATCH_DEV_CLASS | \
|
||||
USB_DEVICE_ID_MATCH_DEV_SUBCLASS | \
|
||||
USB_DEVICE_ID_MATCH_DEV_PROTOCOL)
|
||||
#define USB_DEVICE_ID_MATCH_INT_INFO \
|
||||
(USB_DEVICE_ID_MATCH_INT_CLASS | USB_DEVICE_ID_MATCH_INT_SUBCLASS | USB_DEVICE_ID_MATCH_INT_PROTOCOL)
|
||||
(USB_DEVICE_ID_MATCH_INT_CLASS | \
|
||||
USB_DEVICE_ID_MATCH_INT_SUBCLASS | \
|
||||
USB_DEVICE_ID_MATCH_INT_PROTOCOL)
|
||||
|
||||
/**
|
||||
* USB_DEVICE - macro used to describe a specific usb device
|
||||
|
@ -466,9 +482,11 @@ static inline int usb_make_path (struct usb_device *dev, char *buf, size_t size)
|
|||
* specific device.
|
||||
*/
|
||||
#define USB_DEVICE(vend,prod) \
|
||||
.match_flags = USB_DEVICE_ID_MATCH_DEVICE, .idVendor = (vend), .idProduct = (prod)
|
||||
.match_flags = USB_DEVICE_ID_MATCH_DEVICE, .idVendor = (vend), \
|
||||
.idProduct = (prod)
|
||||
/**
|
||||
* USB_DEVICE_VER - macro used to describe a specific usb device with a version range
|
||||
* USB_DEVICE_VER - macro used to describe a specific usb device with a
|
||||
* version range
|
||||
* @vend: the 16 bit USB Vendor ID
|
||||
* @prod: the 16 bit USB Product ID
|
||||
* @lo: the bcdDevice_lo value
|
||||
|
@ -478,7 +496,9 @@ static inline int usb_make_path (struct usb_device *dev, char *buf, size_t size)
|
|||
* specific device, with a version range.
|
||||
*/
|
||||
#define USB_DEVICE_VER(vend,prod,lo,hi) \
|
||||
.match_flags = USB_DEVICE_ID_MATCH_DEVICE_AND_VERSION, .idVendor = (vend), .idProduct = (prod), .bcdDevice_lo = (lo), .bcdDevice_hi = (hi)
|
||||
.match_flags = USB_DEVICE_ID_MATCH_DEVICE_AND_VERSION, \
|
||||
.idVendor = (vend), .idProduct = (prod), \
|
||||
.bcdDevice_lo = (lo), .bcdDevice_hi = (hi)
|
||||
|
||||
/**
|
||||
* USB_DEVICE_INFO - macro used to describe a class of usb devices
|
||||
|
@ -490,7 +510,8 @@ static inline int usb_make_path (struct usb_device *dev, char *buf, size_t size)
|
|||
* specific class of devices.
|
||||
*/
|
||||
#define USB_DEVICE_INFO(cl,sc,pr) \
|
||||
.match_flags = USB_DEVICE_ID_MATCH_DEV_INFO, .bDeviceClass = (cl), .bDeviceSubClass = (sc), .bDeviceProtocol = (pr)
|
||||
.match_flags = USB_DEVICE_ID_MATCH_DEV_INFO, .bDeviceClass = (cl), \
|
||||
.bDeviceSubClass = (sc), .bDeviceProtocol = (pr)
|
||||
|
||||
/**
|
||||
* USB_INTERFACE_INFO - macro used to describe a class of usb interfaces
|
||||
|
@ -502,9 +523,10 @@ static inline int usb_make_path (struct usb_device *dev, char *buf, size_t size)
|
|||
* specific class of interfaces.
|
||||
*/
|
||||
#define USB_INTERFACE_INFO(cl,sc,pr) \
|
||||
.match_flags = USB_DEVICE_ID_MATCH_INT_INFO, .bInterfaceClass = (cl), .bInterfaceSubClass = (sc), .bInterfaceProtocol = (pr)
|
||||
.match_flags = USB_DEVICE_ID_MATCH_INT_INFO, .bInterfaceClass = (cl), \
|
||||
.bInterfaceSubClass = (sc), .bInterfaceProtocol = (pr)
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* ----------------------------------------------------------------------- */
|
||||
|
||||
/**
|
||||
* struct usb_driver - identifies USB driver to usbcore
|
||||
|
@ -557,7 +579,8 @@ struct usb_driver {
|
|||
|
||||
void (*disconnect) (struct usb_interface *intf);
|
||||
|
||||
int (*ioctl) (struct usb_interface *intf, unsigned int code, void *buf);
|
||||
int (*ioctl) (struct usb_interface *intf, unsigned int code,
|
||||
void *buf);
|
||||
|
||||
int (*suspend) (struct usb_interface *intf, pm_message_t message);
|
||||
int (*resume) (struct usb_interface *intf);
|
||||
|
@ -572,10 +595,8 @@ extern struct bus_type usb_bus_type;
|
|||
|
||||
/**
|
||||
* struct usb_class_driver - identifies a USB driver that wants to use the USB major number
|
||||
* @name: devfs name for this driver. Will also be used by the driver
|
||||
* class code to create a usb class device.
|
||||
* @name: the usb class device name for this driver. Will show up in sysfs.
|
||||
* @fops: pointer to the struct file_operations of this driver.
|
||||
* @mode: the mode for the devfs file to be created for this driver.
|
||||
* @minor_base: the start of the minor range for this driver.
|
||||
*
|
||||
* This structure is used for the usb_register_dev() and
|
||||
|
@ -585,8 +606,7 @@ extern struct bus_type usb_bus_type;
|
|||
struct usb_class_driver {
|
||||
char *name;
|
||||
struct file_operations *fops;
|
||||
mode_t mode;
|
||||
int minor_base;
|
||||
int minor_base;
|
||||
};
|
||||
|
||||
/*
|
||||
|
@ -603,7 +623,7 @@ extern void usb_deregister_dev(struct usb_interface *intf,
|
|||
|
||||
extern int usb_disabled(void);
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* ----------------------------------------------------------------------- */
|
||||
|
||||
/*
|
||||
* URB support, for asynchronous request completions
|
||||
|
@ -613,12 +633,14 @@ extern int usb_disabled(void);
|
|||
* urb->transfer_flags:
|
||||
*/
|
||||
#define URB_SHORT_NOT_OK 0x0001 /* report short reads as errors */
|
||||
#define URB_ISO_ASAP 0x0002 /* iso-only, urb->start_frame ignored */
|
||||
#define URB_ISO_ASAP 0x0002 /* iso-only, urb->start_frame
|
||||
* ignored */
|
||||
#define URB_NO_TRANSFER_DMA_MAP 0x0004 /* urb->transfer_dma valid on submit */
|
||||
#define URB_NO_SETUP_DMA_MAP 0x0008 /* urb->setup_dma valid on submit */
|
||||
#define URB_NO_FSBR 0x0020 /* UHCI-specific */
|
||||
#define URB_ZERO_PACKET 0x0040 /* Finish bulk OUTs with short packet */
|
||||
#define URB_NO_INTERRUPT 0x0080 /* HINT: no non-error interrupt needed */
|
||||
#define URB_ZERO_PACKET 0x0040 /* Finish bulk OUT with short packet */
|
||||
#define URB_NO_INTERRUPT 0x0080 /* HINT: no non-error interrupt
|
||||
* needed */
|
||||
|
||||
struct usb_iso_packet_descriptor {
|
||||
unsigned int offset;
|
||||
|
@ -806,7 +828,8 @@ struct urb
|
|||
u8 reject; /* submissions will fail */
|
||||
|
||||
/* public, documented fields in the urb that can be used by drivers */
|
||||
struct list_head urb_list; /* list head for use by the urb owner */
|
||||
struct list_head urb_list; /* list head for use by the urb's
|
||||
* current owner */
|
||||
struct usb_device *dev; /* (in) pointer to associated device */
|
||||
unsigned int pipe; /* (in) pipe information */
|
||||
int status; /* (return) non-ISO status */
|
||||
|
@ -819,14 +842,16 @@ struct urb
|
|||
dma_addr_t setup_dma; /* (in) dma addr for setup_packet */
|
||||
int start_frame; /* (modify) start frame (ISO) */
|
||||
int number_of_packets; /* (in) number of ISO packets */
|
||||
int interval; /* (modify) transfer interval (INT/ISO) */
|
||||
int interval; /* (modify) transfer interval
|
||||
* (INT/ISO) */
|
||||
int error_count; /* (return) number of ISO errors */
|
||||
void *context; /* (in) context for completion */
|
||||
usb_complete_t complete; /* (in) completion routine */
|
||||
struct usb_iso_packet_descriptor iso_frame_desc[0]; /* (in) ISO ONLY */
|
||||
struct usb_iso_packet_descriptor iso_frame_desc[0];
|
||||
/* (in) ISO ONLY */
|
||||
};
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* ----------------------------------------------------------------------- */
|
||||
|
||||
/**
|
||||
* usb_fill_control_urb - initializes a control urb
|
||||
|
@ -974,11 +999,6 @@ extern int usb_bulk_msg(struct usb_device *usb_dev, unsigned int pipe,
|
|||
void *data, int len, int *actual_length,
|
||||
int timeout);
|
||||
|
||||
/* selective suspend/resume */
|
||||
extern int usb_suspend_device(struct usb_device *dev, pm_message_t message);
|
||||
extern int usb_resume_device(struct usb_device *dev);
|
||||
|
||||
|
||||
/* wrappers around usb_control_msg() for the most common standard requests */
|
||||
extern int usb_get_descriptor(struct usb_device *dev, unsigned char desctype,
|
||||
unsigned char descindex, void *buf, int size);
|
||||
|
@ -1056,7 +1076,7 @@ void usb_sg_cancel (struct usb_sg_request *io);
|
|||
void usb_sg_wait (struct usb_sg_request *io);
|
||||
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* ----------------------------------------------------------------------- */
|
||||
|
||||
/*
|
||||
* For various legacy reasons, Linux has a small cookie that's paired with
|
||||
|
@ -1097,23 +1117,34 @@ void usb_sg_wait (struct usb_sg_request *io);
|
|||
/* The D0/D1 toggle bits ... USE WITH CAUTION (they're almost hcd-internal) */
|
||||
#define usb_gettoggle(dev, ep, out) (((dev)->toggle[out] >> (ep)) & 1)
|
||||
#define usb_dotoggle(dev, ep, out) ((dev)->toggle[out] ^= (1 << (ep)))
|
||||
#define usb_settoggle(dev, ep, out, bit) ((dev)->toggle[out] = ((dev)->toggle[out] & ~(1 << (ep))) | ((bit) << (ep)))
|
||||
#define usb_settoggle(dev, ep, out, bit) \
|
||||
((dev)->toggle[out] = ((dev)->toggle[out] & ~(1 << (ep))) | \
|
||||
((bit) << (ep)))
|
||||
|
||||
|
||||
static inline unsigned int __create_pipe(struct usb_device *dev, unsigned int endpoint)
|
||||
static inline unsigned int __create_pipe(struct usb_device *dev,
|
||||
unsigned int endpoint)
|
||||
{
|
||||
return (dev->devnum << 8) | (endpoint << 15);
|
||||
}
|
||||
|
||||
/* Create various pipes... */
|
||||
#define usb_sndctrlpipe(dev,endpoint) ((PIPE_CONTROL << 30) | __create_pipe(dev,endpoint))
|
||||
#define usb_rcvctrlpipe(dev,endpoint) ((PIPE_CONTROL << 30) | __create_pipe(dev,endpoint) | USB_DIR_IN)
|
||||
#define usb_sndisocpipe(dev,endpoint) ((PIPE_ISOCHRONOUS << 30) | __create_pipe(dev,endpoint))
|
||||
#define usb_rcvisocpipe(dev,endpoint) ((PIPE_ISOCHRONOUS << 30) | __create_pipe(dev,endpoint) | USB_DIR_IN)
|
||||
#define usb_sndbulkpipe(dev,endpoint) ((PIPE_BULK << 30) | __create_pipe(dev,endpoint))
|
||||
#define usb_rcvbulkpipe(dev,endpoint) ((PIPE_BULK << 30) | __create_pipe(dev,endpoint) | USB_DIR_IN)
|
||||
#define usb_sndintpipe(dev,endpoint) ((PIPE_INTERRUPT << 30) | __create_pipe(dev,endpoint))
|
||||
#define usb_rcvintpipe(dev,endpoint) ((PIPE_INTERRUPT << 30) | __create_pipe(dev,endpoint) | USB_DIR_IN)
|
||||
#define usb_sndctrlpipe(dev,endpoint) \
|
||||
((PIPE_CONTROL << 30) | __create_pipe(dev,endpoint))
|
||||
#define usb_rcvctrlpipe(dev,endpoint) \
|
||||
((PIPE_CONTROL << 30) | __create_pipe(dev,endpoint) | USB_DIR_IN)
|
||||
#define usb_sndisocpipe(dev,endpoint) \
|
||||
((PIPE_ISOCHRONOUS << 30) | __create_pipe(dev,endpoint))
|
||||
#define usb_rcvisocpipe(dev,endpoint) \
|
||||
((PIPE_ISOCHRONOUS << 30) | __create_pipe(dev,endpoint) | USB_DIR_IN)
|
||||
#define usb_sndbulkpipe(dev,endpoint) \
|
||||
((PIPE_BULK << 30) | __create_pipe(dev,endpoint))
|
||||
#define usb_rcvbulkpipe(dev,endpoint) \
|
||||
((PIPE_BULK << 30) | __create_pipe(dev,endpoint) | USB_DIR_IN)
|
||||
#define usb_sndintpipe(dev,endpoint) \
|
||||
((PIPE_INTERRUPT << 30) | __create_pipe(dev,endpoint))
|
||||
#define usb_rcvintpipe(dev,endpoint) \
|
||||
((PIPE_INTERRUPT << 30) | __create_pipe(dev,endpoint) | USB_DIR_IN)
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
|
@ -1137,17 +1168,29 @@ usb_maxpacket(struct usb_device *udev, int pipe, int is_out)
|
|||
return le16_to_cpu(ep->desc.wMaxPacketSize);
|
||||
}
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* ----------------------------------------------------------------------- */
|
||||
|
||||
/* Events from the usb core */
|
||||
#define USB_DEVICE_ADD 0x0001
|
||||
#define USB_DEVICE_REMOVE 0x0002
|
||||
#define USB_BUS_ADD 0x0003
|
||||
#define USB_BUS_REMOVE 0x0004
|
||||
extern void usb_register_notify(struct notifier_block *nb);
|
||||
extern void usb_unregister_notify(struct notifier_block *nb);
|
||||
|
||||
#ifdef DEBUG
|
||||
#define dbg(format, arg...) printk(KERN_DEBUG "%s: " format "\n" , __FILE__ , ## arg)
|
||||
#define dbg(format, arg...) printk(KERN_DEBUG "%s: " format "\n" , \
|
||||
__FILE__ , ## arg)
|
||||
#else
|
||||
#define dbg(format, arg...) do {} while (0)
|
||||
#endif
|
||||
|
||||
#define err(format, arg...) printk(KERN_ERR "%s: " format "\n" , __FILE__ , ## arg)
|
||||
#define info(format, arg...) printk(KERN_INFO "%s: " format "\n" , __FILE__ , ## arg)
|
||||
#define warn(format, arg...) printk(KERN_WARNING "%s: " format "\n" , __FILE__ , ## arg)
|
||||
#define err(format, arg...) printk(KERN_ERR "%s: " format "\n" , \
|
||||
__FILE__ , ## arg)
|
||||
#define info(format, arg...) printk(KERN_INFO "%s: " format "\n" , \
|
||||
__FILE__ , ## arg)
|
||||
#define warn(format, arg...) printk(KERN_WARNING "%s: " format "\n" , \
|
||||
__FILE__ , ## arg)
|
||||
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
|
|
@ -63,6 +63,10 @@ struct otg_transceiver {
|
|||
int (*set_power)(struct otg_transceiver *otg,
|
||||
unsigned mA);
|
||||
|
||||
/* for non-OTG B devices: set transceiver into suspend mode */
|
||||
int (*set_suspend)(struct otg_transceiver *otg,
|
||||
int suspend);
|
||||
|
||||
/* for B devices only: start session with A-Host */
|
||||
int (*start_srp)(struct otg_transceiver *otg);
|
||||
|
||||
|
@ -107,6 +111,15 @@ otg_set_power(struct otg_transceiver *otg, unsigned mA)
|
|||
return otg->set_power(otg, mA);
|
||||
}
|
||||
|
||||
static inline int
|
||||
otg_set_suspend(struct otg_transceiver *otg, int suspend)
|
||||
{
|
||||
if (otg->set_suspend != NULL)
|
||||
return otg->set_suspend(otg, suspend);
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int
|
||||
otg_start_srp(struct otg_transceiver *otg)
|
||||
{
|
||||
|
|
|
@ -140,6 +140,12 @@ struct usbdevfs_urb32 {
|
|||
compat_caddr_t usercontext; /* unused */
|
||||
struct usbdevfs_iso_packet_desc iso_frame_desc[0];
|
||||
};
|
||||
|
||||
struct usbdevfs_ioctl32 {
|
||||
s32 ifno;
|
||||
s32 ioctl_code;
|
||||
compat_caddr_t data;
|
||||
};
|
||||
#endif
|
||||
|
||||
#define USBDEVFS_CONTROL _IOWR('U', 0, struct usbdevfs_ctrltransfer)
|
||||
|
@ -160,6 +166,7 @@ struct usbdevfs_urb32 {
|
|||
#define USBDEVFS_RELEASEINTERFACE _IOR('U', 16, unsigned int)
|
||||
#define USBDEVFS_CONNECTINFO _IOW('U', 17, struct usbdevfs_connectinfo)
|
||||
#define USBDEVFS_IOCTL _IOWR('U', 18, struct usbdevfs_ioctl)
|
||||
#define USBDEVFS_IOCTL32 _IOWR('U', 18, struct usbdevfs_ioctl32)
|
||||
#define USBDEVFS_HUB_PORTINFO _IOR('U', 19, struct usbdevfs_hub_portinfo)
|
||||
#define USBDEVFS_RESET _IO('U', 20)
|
||||
#define USBDEVFS_CLEAR_HALT _IOR('U', 21, unsigned int)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue