Merge tag 'usb-3.8-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb
Pull USB patches from Greg Kroah-Hartman: "Here's the big set of USB patches for 3.8-rc1. Lots of USB host driver cleanups in here, and a bit of a reorg of the EHCI driver to make it easier for the different EHCI platform drivers to all work together nicer, which was a reduction in overall code. We also deleted some unused firmware files, and got rid of the very old file_storage usb gadget driver that had been broken for a long time. This means we ended up removing way more code than added, always a nice thing to see: 310 files changed, 3028 insertions(+), 10754 deletions(-) Other than that, the usual set of new device ids, driver fixes, gadget driver and controller updates and the like. All of these have been in the linux-next tree for a number of weeks. Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>" * tag 'usb-3.8-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb: (228 commits) USB: mark uas driver as BROKEN xhci: Add Lynx Point LP to list of Intel switchable hosts uwb: fix uwb_dev_unlock() missed at an error path in uwb_rc_cmd_async() USB: ftdi_sio: Add support for Newport AGILIS motor drivers MAINTAINERS: remove drivers/block/ub.c USB: chipidea: fix use after free bug ezusb: add dependency to USB usb: ftdi_sio: fixup BeagleBone A5+ quirk USB: cp210x: add Virtenio Preon32 device id usb: storage: remove redundant memset() in usb_probe_stor1() USB: option: blacklist network interface on Huawei E173 USB: OHCI: workaround for hardware bug: retired TDs not added to the Done Queue USB: add new zte 3g-dongle's pid to option.c USB: opticon: switch to generic read implementation USB: opticon: refactor reab-urb processing USB: opticon: use usb-serial bulk-in urb USB: opticon: increase bulk-in size USB: opticon: use port as urb context USB: opticon: pass port to get_serial_info USB: opticon: make private data port specific ...
This commit is contained in:
+37
-13
@@ -482,6 +482,7 @@ struct usb3_lpm_parameters {
|
||||
* @connect_time: time device was first connected
|
||||
* @do_remote_wakeup: remote wakeup should be enabled
|
||||
* @reset_resume: needs reset instead of resume
|
||||
* @port_is_suspended: the upstream port is suspended (L2 or U3)
|
||||
* @wusb_dev: if this is a Wireless USB device, link to the WUSB
|
||||
* specific data for the device.
|
||||
* @slot_id: Slot ID assigned by xHCI
|
||||
@@ -560,6 +561,7 @@ struct usb_device {
|
||||
|
||||
unsigned do_remote_wakeup:1;
|
||||
unsigned reset_resume:1;
|
||||
unsigned port_is_suspended:1;
|
||||
#endif
|
||||
struct wusb_dev *wusb_dev;
|
||||
int slot_id;
|
||||
@@ -588,8 +590,9 @@ extern struct usb_device *usb_hub_find_child(struct usb_device *hdev,
|
||||
*/
|
||||
#define usb_hub_for_each_child(hdev, port1, child) \
|
||||
for (port1 = 1, child = usb_hub_find_child(hdev, port1); \
|
||||
port1 <= hdev->maxchild; \
|
||||
child = usb_hub_find_child(hdev, ++port1))
|
||||
port1 <= hdev->maxchild; \
|
||||
child = usb_hub_find_child(hdev, ++port1)) \
|
||||
if (!child) continue; else
|
||||
|
||||
/* USB device locking */
|
||||
#define usb_lock_device(udev) device_lock(&(udev)->dev)
|
||||
@@ -804,6 +807,22 @@ static inline int usb_make_path(struct usb_device *dev, char *buf, size_t size)
|
||||
.bcdDevice_lo = (lo), \
|
||||
.bcdDevice_hi = (hi)
|
||||
|
||||
/**
|
||||
* USB_DEVICE_INTERFACE_CLASS - describe a usb device with a specific interface class
|
||||
* @vend: the 16 bit USB Vendor ID
|
||||
* @prod: the 16 bit USB Product ID
|
||||
* @cl: bInterfaceClass value
|
||||
*
|
||||
* This macro is used to create a struct usb_device_id that matches a
|
||||
* specific interface class of devices.
|
||||
*/
|
||||
#define USB_DEVICE_INTERFACE_CLASS(vend, prod, cl) \
|
||||
.match_flags = USB_DEVICE_ID_MATCH_DEVICE | \
|
||||
USB_DEVICE_ID_MATCH_INT_CLASS, \
|
||||
.idVendor = (vend), \
|
||||
.idProduct = (prod), \
|
||||
.bInterfaceClass = (cl)
|
||||
|
||||
/**
|
||||
* USB_DEVICE_INTERFACE_PROTOCOL - describe a usb device with a specific interface protocol
|
||||
* @vend: the 16 bit USB Vendor ID
|
||||
@@ -1129,8 +1148,8 @@ extern int usb_disabled(void);
|
||||
* Note: URB_DIR_IN/OUT is automatically set in usb_submit_urb().
|
||||
*/
|
||||
#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; use the first unexpired
|
||||
* slot in the schedule */
|
||||
#define URB_NO_TRANSFER_DMA_MAP 0x0004 /* urb->transfer_dma valid on submit */
|
||||
#define URB_NO_FSBR 0x0020 /* UHCI-specific */
|
||||
#define URB_ZERO_PACKET 0x0040 /* Finish bulk OUT with short packet */
|
||||
@@ -1309,15 +1328,20 @@ typedef void (*usb_complete_t)(struct urb *);
|
||||
* the transfer interval in the endpoint descriptor is logarithmic.
|
||||
* Device drivers must convert that value to linear units themselves.)
|
||||
*
|
||||
* Isochronous URBs normally use the URB_ISO_ASAP transfer flag, telling
|
||||
* the host controller to schedule the transfer as soon as bandwidth
|
||||
* utilization allows, and then set start_frame to reflect the actual frame
|
||||
* selected during submission. Otherwise drivers must specify the start_frame
|
||||
* and handle the case where the transfer can't begin then. However, drivers
|
||||
* won't know how bandwidth is currently allocated, and while they can
|
||||
* find the current frame using usb_get_current_frame_number () they can't
|
||||
* know the range for that frame number. (Ranges for frame counter values
|
||||
* are HC-specific, and can go from 256 to 65536 frames from "now".)
|
||||
* If an isochronous endpoint queue isn't already running, the host
|
||||
* controller will schedule a new URB to start as soon as bandwidth
|
||||
* utilization allows. If the queue is running then a new URB will be
|
||||
* scheduled to start in the first transfer slot following the end of the
|
||||
* preceding URB, if that slot has not already expired. If the slot has
|
||||
* expired (which can happen when IRQ delivery is delayed for a long time),
|
||||
* the scheduling behavior depends on the URB_ISO_ASAP flag. If the flag
|
||||
* is clear then the URB will be scheduled to start in the expired slot,
|
||||
* implying that some of its packets will not be transferred; if the flag
|
||||
* is set then the URB will be scheduled in the first unexpired slot,
|
||||
* breaking the queue's synchronization. Upon URB completion, the
|
||||
* start_frame field will be set to the (micro)frame number in which the
|
||||
* transfer was scheduled. Ranges for frame counter values are HC-specific
|
||||
* and can go from as low as 256 to as high as 65536 frames.
|
||||
*
|
||||
* Isochronous URBs have a different data transfer model, in part because
|
||||
* the quality of service is only "best effort". Callers provide specially
|
||||
|
||||
@@ -38,6 +38,7 @@
|
||||
#include <linux/version.h>
|
||||
#include <linux/usb/ch9.h>
|
||||
#include <linux/usb/gadget.h>
|
||||
#include <linux/log2.h>
|
||||
|
||||
/*
|
||||
* USB function drivers should return USB_GADGET_DELAYED_STATUS if they
|
||||
@@ -51,6 +52,7 @@
|
||||
/* big enough to hold our biggest descriptor */
|
||||
#define USB_COMP_EP0_BUFSIZ 1024
|
||||
|
||||
#define USB_MS_TO_HS_INTERVAL(x) (ilog2((x * 1000 / 125)) + 1)
|
||||
struct usb_configuration;
|
||||
|
||||
/**
|
||||
@@ -117,7 +119,7 @@ struct usb_configuration;
|
||||
struct usb_function {
|
||||
const char *name;
|
||||
struct usb_gadget_strings **strings;
|
||||
struct usb_descriptor_header **descriptors;
|
||||
struct usb_descriptor_header **fs_descriptors;
|
||||
struct usb_descriptor_header **hs_descriptors;
|
||||
struct usb_descriptor_header **ss_descriptors;
|
||||
|
||||
|
||||
@@ -29,6 +29,8 @@
|
||||
* initialization.
|
||||
* @port_power_off: set to 1 if the controller needs to be powered down
|
||||
* after initialization.
|
||||
* @no_io_watchdog: set to 1 if the controller does not need the I/O
|
||||
* watchdog to run.
|
||||
*
|
||||
* These are general configuration options for the EHCI controller. All of
|
||||
* these options are activating more or less workarounds for some hardware.
|
||||
@@ -39,8 +41,7 @@ struct usb_ehci_pdata {
|
||||
unsigned has_synopsys_hc_bug:1;
|
||||
unsigned big_endian_desc:1;
|
||||
unsigned big_endian_mmio:1;
|
||||
unsigned port_power_on:1;
|
||||
unsigned port_power_off:1;
|
||||
unsigned no_io_watchdog:1;
|
||||
|
||||
/* Turn on all power and clocks */
|
||||
int (*power_on)(struct platform_device *pdev);
|
||||
|
||||
@@ -1,16 +1,8 @@
|
||||
#ifndef __EZUSB_H
|
||||
#define __EZUSB_H
|
||||
|
||||
|
||||
extern int ezusb_writememory(struct usb_device *dev, int address,
|
||||
unsigned char *data, int length, __u8 bRequest);
|
||||
|
||||
extern int ezusb_fx1_set_reset(struct usb_device *dev, unsigned char reset_bit);
|
||||
extern int ezusb_fx2_set_reset(struct usb_device *dev, unsigned char reset_bit);
|
||||
|
||||
extern int ezusb_fx1_ihex_firmware_download(struct usb_device *dev,
|
||||
const char *firmware_path);
|
||||
extern int ezusb_fx2_ihex_firmware_download(struct usb_device *dev,
|
||||
const char *firmware_path);
|
||||
|
||||
#endif /* __EZUSB_H */
|
||||
|
||||
@@ -939,6 +939,13 @@ static inline void usb_free_descriptors(struct usb_descriptor_header **v)
|
||||
kfree(v);
|
||||
}
|
||||
|
||||
struct usb_function;
|
||||
int usb_assign_descriptors(struct usb_function *f,
|
||||
struct usb_descriptor_header **fs,
|
||||
struct usb_descriptor_header **hs,
|
||||
struct usb_descriptor_header **ss);
|
||||
void usb_free_all_descriptors(struct usb_function *f);
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
/* utility to simplify map/unmap of usb_requests to/from DMA */
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
* @big_endian_desc: BE descriptors
|
||||
* @big_endian_mmio: BE registers
|
||||
* @no_big_frame_no: no big endian frame_no shift
|
||||
* @num_ports: number of ports
|
||||
*
|
||||
* These are general configuration options for the OHCI controller. All of
|
||||
* these options are activating more or less workarounds for some hardware.
|
||||
@@ -33,6 +34,7 @@ struct usb_ohci_pdata {
|
||||
unsigned big_endian_desc:1;
|
||||
unsigned big_endian_mmio:1;
|
||||
unsigned no_big_frame_no:1;
|
||||
unsigned int num_ports;
|
||||
|
||||
/* Turn on all power and clocks */
|
||||
int (*power_on)(struct platform_device *pdev);
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
#define __LINUX_USB_PHY_H
|
||||
|
||||
#include <linux/notifier.h>
|
||||
#include <linux/usb.h>
|
||||
|
||||
enum usb_phy_events {
|
||||
USB_EVENT_NONE, /* no events or cable disconnected */
|
||||
@@ -99,8 +100,10 @@ struct usb_phy {
|
||||
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);
|
||||
int (*notify_connect)(struct usb_phy *x,
|
||||
enum usb_device_speed speed);
|
||||
int (*notify_disconnect)(struct usb_phy *x,
|
||||
enum usb_device_speed speed);
|
||||
};
|
||||
|
||||
|
||||
@@ -189,19 +192,19 @@ usb_phy_set_suspend(struct usb_phy *x, int suspend)
|
||||
}
|
||||
|
||||
static inline int
|
||||
usb_phy_notify_connect(struct usb_phy *x, int port)
|
||||
usb_phy_notify_connect(struct usb_phy *x, enum usb_device_speed speed)
|
||||
{
|
||||
if (x->notify_connect)
|
||||
return x->notify_connect(x, port);
|
||||
return x->notify_connect(x, speed);
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int
|
||||
usb_phy_notify_disconnect(struct usb_phy *x, int port)
|
||||
usb_phy_notify_disconnect(struct usb_phy *x, enum usb_device_speed speed)
|
||||
{
|
||||
if (x->notify_disconnect)
|
||||
return x->notify_disconnect(x, port);
|
||||
return x->notify_disconnect(x, speed);
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user