aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/host/hwa-hc.c
diff options
context:
space:
mode:
authorThomas Pugliese <thomas.pugliese@gmail.com>2013-10-23 15:44:28 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2013-10-29 19:44:49 -0400
commitf07ddb9ef5c25c1044ab5b6509241320fb5e831a (patch)
tree6f7bb348ad03cc4e7e52634de48deaeecd468ae2 /drivers/usb/host/hwa-hc.c
parent2101242cef04991a580c3debb46972dbfaaaf138 (diff)
usb: wusbcore: add a quirk for Alereon HWA device isoc behavior
Add a quirk for Alereon HWA devices to concatenate the frames of isoc transfer requests. Signed-off-by: Thomas Pugliese <thomas.pugliese@gmail.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/usb/host/hwa-hc.c')
-rw-r--r--drivers/usb/host/hwa-hc.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/drivers/usb/host/hwa-hc.c b/drivers/usb/host/hwa-hc.c
index e5fb3cfd57a9..ada0a52797b1 100644
--- a/drivers/usb/host/hwa-hc.c
+++ b/drivers/usb/host/hwa-hc.c
@@ -679,7 +679,8 @@ static void hwahc_security_release(struct hwahc *hwahc)
679 /* nothing to do here so far... */ 679 /* nothing to do here so far... */
680} 680}
681 681
682static int hwahc_create(struct hwahc *hwahc, struct usb_interface *iface) 682static int hwahc_create(struct hwahc *hwahc, struct usb_interface *iface,
683 kernel_ulong_t quirks)
683{ 684{
684 int result; 685 int result;
685 struct device *dev = &iface->dev; 686 struct device *dev = &iface->dev;
@@ -724,7 +725,7 @@ static int hwahc_create(struct hwahc *hwahc, struct usb_interface *iface)
724 dev_err(dev, "Can't create WUSB HC structures: %d\n", result); 725 dev_err(dev, "Can't create WUSB HC structures: %d\n", result);
725 goto error_wusbhc_create; 726 goto error_wusbhc_create;
726 } 727 }
727 result = wa_create(&hwahc->wa, iface); 728 result = wa_create(&hwahc->wa, iface, quirks);
728 if (result < 0) 729 if (result < 0)
729 goto error_wa_create; 730 goto error_wa_create;
730 return 0; 731 return 0;
@@ -780,7 +781,7 @@ static int hwahc_probe(struct usb_interface *usb_iface,
780 wusbhc = usb_hcd_to_wusbhc(usb_hcd); 781 wusbhc = usb_hcd_to_wusbhc(usb_hcd);
781 hwahc = container_of(wusbhc, struct hwahc, wusbhc); 782 hwahc = container_of(wusbhc, struct hwahc, wusbhc);
782 hwahc_init(hwahc); 783 hwahc_init(hwahc);
783 result = hwahc_create(hwahc, usb_iface); 784 result = hwahc_create(hwahc, usb_iface, id->driver_info);
784 if (result < 0) { 785 if (result < 0) {
785 dev_err(dev, "Cannot initialize internals: %d\n", result); 786 dev_err(dev, "Cannot initialize internals: %d\n", result);
786 goto error_hwahc_create; 787 goto error_hwahc_create;
@@ -824,6 +825,12 @@ static void hwahc_disconnect(struct usb_interface *usb_iface)
824} 825}
825 826
826static struct usb_device_id hwahc_id_table[] = { 827static struct usb_device_id hwahc_id_table[] = {
828 /* Alereon 5310 */
829 { USB_DEVICE_AND_INTERFACE_INFO(0x13dc, 0x5310, 0xe0, 0x02, 0x01),
830 .driver_info = WUSB_QUIRK_ALEREON_HWA_CONCAT_ISOC },
831 /* Alereon 5611 */
832 { USB_DEVICE_AND_INTERFACE_INFO(0x13dc, 0x5611, 0xe0, 0x02, 0x01),
833 .driver_info = WUSB_QUIRK_ALEREON_HWA_CONCAT_ISOC },
827 /* FIXME: use class labels for this */ 834 /* FIXME: use class labels for this */
828 { USB_INTERFACE_INFO(0xe0, 0x02, 0x01), }, 835 { USB_INTERFACE_INFO(0xe0, 0x02, 0x01), },
829 {}, 836 {},