diff options
33 files changed, 172 insertions, 79 deletions
diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c index 4191db32f12c..4a8a1d68002c 100644 --- a/drivers/usb/core/hub.c +++ b/drivers/usb/core/hub.c | |||
@@ -668,6 +668,15 @@ resubmit: | |||
668 | static inline int | 668 | static inline int |
669 | hub_clear_tt_buffer (struct usb_device *hdev, u16 devinfo, u16 tt) | 669 | hub_clear_tt_buffer (struct usb_device *hdev, u16 devinfo, u16 tt) |
670 | { | 670 | { |
671 | /* Need to clear both directions for control ep */ | ||
672 | if (((devinfo >> 11) & USB_ENDPOINT_XFERTYPE_MASK) == | ||
673 | USB_ENDPOINT_XFER_CONTROL) { | ||
674 | int status = usb_control_msg(hdev, usb_sndctrlpipe(hdev, 0), | ||
675 | HUB_CLEAR_TT_BUFFER, USB_RT_PORT, | ||
676 | devinfo ^ 0x8000, tt, NULL, 0, 1000); | ||
677 | if (status) | ||
678 | return status; | ||
679 | } | ||
671 | return usb_control_msg(hdev, usb_sndctrlpipe(hdev, 0), | 680 | return usb_control_msg(hdev, usb_sndctrlpipe(hdev, 0), |
672 | HUB_CLEAR_TT_BUFFER, USB_RT_PORT, devinfo, | 681 | HUB_CLEAR_TT_BUFFER, USB_RT_PORT, devinfo, |
673 | tt, NULL, 0, 1000); | 682 | tt, NULL, 0, 1000); |
@@ -2848,6 +2857,15 @@ static int usb_disable_function_remotewakeup(struct usb_device *udev) | |||
2848 | USB_CTRL_SET_TIMEOUT); | 2857 | USB_CTRL_SET_TIMEOUT); |
2849 | } | 2858 | } |
2850 | 2859 | ||
2860 | /* Count of wakeup-enabled devices at or below udev */ | ||
2861 | static unsigned wakeup_enabled_descendants(struct usb_device *udev) | ||
2862 | { | ||
2863 | struct usb_hub *hub = usb_hub_to_struct_hub(udev); | ||
2864 | |||
2865 | return udev->do_remote_wakeup + | ||
2866 | (hub ? hub->wakeup_enabled_descendants : 0); | ||
2867 | } | ||
2868 | |||
2851 | /* | 2869 | /* |
2852 | * usb_port_suspend - suspend a usb device's upstream port | 2870 | * usb_port_suspend - suspend a usb device's upstream port |
2853 | * @udev: device that's no longer in active use, not a root hub | 2871 | * @udev: device that's no longer in active use, not a root hub |
@@ -2888,8 +2906,8 @@ static int usb_disable_function_remotewakeup(struct usb_device *udev) | |||
2888 | * Linux (2.6) currently has NO mechanisms to initiate that: no khubd | 2906 | * Linux (2.6) currently has NO mechanisms to initiate that: no khubd |
2889 | * timer, no SRP, no requests through sysfs. | 2907 | * timer, no SRP, no requests through sysfs. |
2890 | * | 2908 | * |
2891 | * If Runtime PM isn't enabled or used, non-SuperSpeed devices really get | 2909 | * If Runtime PM isn't enabled or used, non-SuperSpeed devices may not get |
2892 | * suspended only when their bus goes into global suspend (i.e., the root | 2910 | * suspended until their bus goes into global suspend (i.e., the root |
2893 | * hub is suspended). Nevertheless, we change @udev->state to | 2911 | * hub is suspended). Nevertheless, we change @udev->state to |
2894 | * USB_STATE_SUSPENDED as this is the device's "logical" state. The actual | 2912 | * USB_STATE_SUSPENDED as this is the device's "logical" state. The actual |
2895 | * upstream port setting is stored in @udev->port_is_suspended. | 2913 | * upstream port setting is stored in @udev->port_is_suspended. |
@@ -2960,15 +2978,21 @@ int usb_port_suspend(struct usb_device *udev, pm_message_t msg) | |||
2960 | /* see 7.1.7.6 */ | 2978 | /* see 7.1.7.6 */ |
2961 | if (hub_is_superspeed(hub->hdev)) | 2979 | if (hub_is_superspeed(hub->hdev)) |
2962 | status = hub_set_port_link_state(hub, port1, USB_SS_PORT_LS_U3); | 2980 | status = hub_set_port_link_state(hub, port1, USB_SS_PORT_LS_U3); |
2963 | else if (PMSG_IS_AUTO(msg)) | 2981 | |
2964 | status = set_port_feature(hub->hdev, port1, | ||
2965 | USB_PORT_FEAT_SUSPEND); | ||
2966 | /* | 2982 | /* |
2967 | * For system suspend, we do not need to enable the suspend feature | 2983 | * For system suspend, we do not need to enable the suspend feature |
2968 | * on individual USB-2 ports. The devices will automatically go | 2984 | * on individual USB-2 ports. The devices will automatically go |
2969 | * into suspend a few ms after the root hub stops sending packets. | 2985 | * into suspend a few ms after the root hub stops sending packets. |
2970 | * The USB 2.0 spec calls this "global suspend". | 2986 | * The USB 2.0 spec calls this "global suspend". |
2987 | * | ||
2988 | * However, many USB hubs have a bug: They don't relay wakeup requests | ||
2989 | * from a downstream port if the port's suspend feature isn't on. | ||
2990 | * Therefore we will turn on the suspend feature if udev or any of its | ||
2991 | * descendants is enabled for remote wakeup. | ||
2971 | */ | 2992 | */ |
2993 | else if (PMSG_IS_AUTO(msg) || wakeup_enabled_descendants(udev) > 0) | ||
2994 | status = set_port_feature(hub->hdev, port1, | ||
2995 | USB_PORT_FEAT_SUSPEND); | ||
2972 | else { | 2996 | else { |
2973 | really_suspend = false; | 2997 | really_suspend = false; |
2974 | status = 0; | 2998 | status = 0; |
@@ -3003,15 +3027,16 @@ int usb_port_suspend(struct usb_device *udev, pm_message_t msg) | |||
3003 | if (!PMSG_IS_AUTO(msg)) | 3027 | if (!PMSG_IS_AUTO(msg)) |
3004 | status = 0; | 3028 | status = 0; |
3005 | } else { | 3029 | } else { |
3006 | /* device has up to 10 msec to fully suspend */ | ||
3007 | dev_dbg(&udev->dev, "usb %ssuspend, wakeup %d\n", | 3030 | dev_dbg(&udev->dev, "usb %ssuspend, wakeup %d\n", |
3008 | (PMSG_IS_AUTO(msg) ? "auto-" : ""), | 3031 | (PMSG_IS_AUTO(msg) ? "auto-" : ""), |
3009 | udev->do_remote_wakeup); | 3032 | udev->do_remote_wakeup); |
3010 | usb_set_device_state(udev, USB_STATE_SUSPENDED); | ||
3011 | if (really_suspend) { | 3033 | if (really_suspend) { |
3012 | udev->port_is_suspended = 1; | 3034 | udev->port_is_suspended = 1; |
3035 | |||
3036 | /* device has up to 10 msec to fully suspend */ | ||
3013 | msleep(10); | 3037 | msleep(10); |
3014 | } | 3038 | } |
3039 | usb_set_device_state(udev, USB_STATE_SUSPENDED); | ||
3015 | } | 3040 | } |
3016 | 3041 | ||
3017 | /* | 3042 | /* |
@@ -3293,7 +3318,11 @@ static int hub_suspend(struct usb_interface *intf, pm_message_t msg) | |||
3293 | unsigned port1; | 3318 | unsigned port1; |
3294 | int status; | 3319 | int status; |
3295 | 3320 | ||
3296 | /* Warn if children aren't already suspended */ | 3321 | /* |
3322 | * Warn if children aren't already suspended. | ||
3323 | * Also, add up the number of wakeup-enabled descendants. | ||
3324 | */ | ||
3325 | hub->wakeup_enabled_descendants = 0; | ||
3297 | for (port1 = 1; port1 <= hdev->maxchild; port1++) { | 3326 | for (port1 = 1; port1 <= hdev->maxchild; port1++) { |
3298 | struct usb_device *udev; | 3327 | struct usb_device *udev; |
3299 | 3328 | ||
@@ -3303,6 +3332,9 @@ static int hub_suspend(struct usb_interface *intf, pm_message_t msg) | |||
3303 | if (PMSG_IS_AUTO(msg)) | 3332 | if (PMSG_IS_AUTO(msg)) |
3304 | return -EBUSY; | 3333 | return -EBUSY; |
3305 | } | 3334 | } |
3335 | if (udev) | ||
3336 | hub->wakeup_enabled_descendants += | ||
3337 | wakeup_enabled_descendants(udev); | ||
3306 | } | 3338 | } |
3307 | 3339 | ||
3308 | if (hdev->do_remote_wakeup && hub->quirk_check_port_auto_suspend) { | 3340 | if (hdev->do_remote_wakeup && hub->quirk_check_port_auto_suspend) { |
diff --git a/drivers/usb/core/hub.h b/drivers/usb/core/hub.h index 6508e02b3dac..4e4790dea343 100644 --- a/drivers/usb/core/hub.h +++ b/drivers/usb/core/hub.h | |||
@@ -59,6 +59,9 @@ struct usb_hub { | |||
59 | struct usb_tt tt; /* Transaction Translator */ | 59 | struct usb_tt tt; /* Transaction Translator */ |
60 | 60 | ||
61 | unsigned mA_per_port; /* current for each child */ | 61 | unsigned mA_per_port; /* current for each child */ |
62 | #ifdef CONFIG_PM | ||
63 | unsigned wakeup_enabled_descendants; | ||
64 | #endif | ||
62 | 65 | ||
63 | unsigned limited_power:1; | 66 | unsigned limited_power:1; |
64 | unsigned quiescing:1; | 67 | unsigned quiescing:1; |
diff --git a/drivers/usb/dwc3/Kconfig b/drivers/usb/dwc3/Kconfig index 757aa18027d0..2378958ea63e 100644 --- a/drivers/usb/dwc3/Kconfig +++ b/drivers/usb/dwc3/Kconfig | |||
@@ -1,6 +1,6 @@ | |||
1 | config USB_DWC3 | 1 | config USB_DWC3 |
2 | tristate "DesignWare USB3 DRD Core Support" | 2 | tristate "DesignWare USB3 DRD Core Support" |
3 | depends on (USB || USB_GADGET) && GENERIC_HARDIRQS | 3 | depends on (USB || USB_GADGET) && GENERIC_HARDIRQS && HAS_DMA |
4 | select USB_XHCI_PLATFORM if USB_SUPPORT && USB_XHCI_HCD | 4 | select USB_XHCI_PLATFORM if USB_SUPPORT && USB_XHCI_HCD |
5 | help | 5 | help |
6 | Say Y or M here if your system has a Dual Role SuperSpeed | 6 | Say Y or M here if your system has a Dual Role SuperSpeed |
diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c index c35d49d39b76..358375e0b291 100644 --- a/drivers/usb/dwc3/core.c +++ b/drivers/usb/dwc3/core.c | |||
@@ -450,7 +450,7 @@ static int dwc3_probe(struct platform_device *pdev) | |||
450 | } | 450 | } |
451 | 451 | ||
452 | if (IS_ERR(dwc->usb3_phy)) { | 452 | if (IS_ERR(dwc->usb3_phy)) { |
453 | ret = PTR_ERR(dwc->usb2_phy); | 453 | ret = PTR_ERR(dwc->usb3_phy); |
454 | 454 | ||
455 | /* | 455 | /* |
456 | * if -ENXIO is returned, it means PHY layer wasn't | 456 | * if -ENXIO is returned, it means PHY layer wasn't |
diff --git a/drivers/usb/dwc3/core.h b/drivers/usb/dwc3/core.h index b69d322e3cab..27dad993b007 100644 --- a/drivers/usb/dwc3/core.h +++ b/drivers/usb/dwc3/core.h | |||
@@ -759,8 +759,8 @@ struct dwc3 { | |||
759 | 759 | ||
760 | struct dwc3_event_type { | 760 | struct dwc3_event_type { |
761 | u32 is_devspec:1; | 761 | u32 is_devspec:1; |
762 | u32 type:6; | 762 | u32 type:7; |
763 | u32 reserved8_31:25; | 763 | u32 reserved8_31:24; |
764 | } __packed; | 764 | } __packed; |
765 | 765 | ||
766 | #define DWC3_DEPEVT_XFERCOMPLETE 0x01 | 766 | #define DWC3_DEPEVT_XFERCOMPLETE 0x01 |
diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c index b5e5b35df49c..f77083fedc68 100644 --- a/drivers/usb/dwc3/gadget.c +++ b/drivers/usb/dwc3/gadget.c | |||
@@ -1584,6 +1584,7 @@ err1: | |||
1584 | __dwc3_gadget_ep_disable(dwc->eps[0]); | 1584 | __dwc3_gadget_ep_disable(dwc->eps[0]); |
1585 | 1585 | ||
1586 | err0: | 1586 | err0: |
1587 | dwc->gadget_driver = NULL; | ||
1587 | spin_unlock_irqrestore(&dwc->lock, flags); | 1588 | spin_unlock_irqrestore(&dwc->lock, flags); |
1588 | 1589 | ||
1589 | return ret; | 1590 | return ret; |
diff --git a/drivers/usb/gadget/Kconfig b/drivers/usb/gadget/Kconfig index 62f6802f6e0f..8e9368330b10 100644 --- a/drivers/usb/gadget/Kconfig +++ b/drivers/usb/gadget/Kconfig | |||
@@ -193,6 +193,7 @@ config USB_FUSB300 | |||
193 | Faraday usb device controller FUSB300 driver | 193 | Faraday usb device controller FUSB300 driver |
194 | 194 | ||
195 | config USB_FOTG210_UDC | 195 | config USB_FOTG210_UDC |
196 | depends on HAS_DMA | ||
196 | tristate "Faraday FOTG210 USB Peripheral Controller" | 197 | tristate "Faraday FOTG210 USB Peripheral Controller" |
197 | help | 198 | help |
198 | Faraday USB2.0 OTG controller which can be configured as | 199 | Faraday USB2.0 OTG controller which can be configured as |
@@ -328,13 +329,14 @@ config USB_S3C_HSUDC | |||
328 | 329 | ||
329 | config USB_MV_UDC | 330 | config USB_MV_UDC |
330 | tristate "Marvell USB2.0 Device Controller" | 331 | tristate "Marvell USB2.0 Device Controller" |
331 | depends on GENERIC_HARDIRQS | 332 | depends on GENERIC_HARDIRQS && HAS_DMA |
332 | help | 333 | help |
333 | Marvell Socs (including PXA and MMP series) include a high speed | 334 | Marvell Socs (including PXA and MMP series) include a high speed |
334 | USB2.0 OTG controller, which can be configured as high speed or | 335 | USB2.0 OTG controller, which can be configured as high speed or |
335 | full speed USB peripheral. | 336 | full speed USB peripheral. |
336 | 337 | ||
337 | config USB_MV_U3D | 338 | config USB_MV_U3D |
339 | depends on HAS_DMA | ||
338 | tristate "MARVELL PXA2128 USB 3.0 controller" | 340 | tristate "MARVELL PXA2128 USB 3.0 controller" |
339 | help | 341 | help |
340 | MARVELL PXA2128 Processor series include a super speed USB3.0 device | 342 | MARVELL PXA2128 Processor series include a super speed USB3.0 device |
@@ -639,6 +641,7 @@ config USB_CONFIGFS_RNDIS | |||
639 | depends on USB_CONFIGFS | 641 | depends on USB_CONFIGFS |
640 | depends on NET | 642 | depends on NET |
641 | select USB_U_ETHER | 643 | select USB_U_ETHER |
644 | select USB_U_RNDIS | ||
642 | select USB_F_RNDIS | 645 | select USB_F_RNDIS |
643 | help | 646 | help |
644 | Microsoft Windows XP bundles the "Remote NDIS" (RNDIS) protocol, | 647 | Microsoft Windows XP bundles the "Remote NDIS" (RNDIS) protocol, |
diff --git a/drivers/usb/gadget/at91_udc.c b/drivers/usb/gadget/at91_udc.c index 073b938f9135..d9a6add0c852 100644 --- a/drivers/usb/gadget/at91_udc.c +++ b/drivers/usb/gadget/at91_udc.c | |||
@@ -870,8 +870,8 @@ static void clk_on(struct at91_udc *udc) | |||
870 | if (udc->clocked) | 870 | if (udc->clocked) |
871 | return; | 871 | return; |
872 | udc->clocked = 1; | 872 | udc->clocked = 1; |
873 | clk_enable(udc->iclk); | 873 | clk_prepare_enable(udc->iclk); |
874 | clk_enable(udc->fclk); | 874 | clk_prepare_enable(udc->fclk); |
875 | } | 875 | } |
876 | 876 | ||
877 | static void clk_off(struct at91_udc *udc) | 877 | static void clk_off(struct at91_udc *udc) |
@@ -880,8 +880,8 @@ static void clk_off(struct at91_udc *udc) | |||
880 | return; | 880 | return; |
881 | udc->clocked = 0; | 881 | udc->clocked = 0; |
882 | udc->gadget.speed = USB_SPEED_UNKNOWN; | 882 | udc->gadget.speed = USB_SPEED_UNKNOWN; |
883 | clk_disable(udc->fclk); | 883 | clk_disable_unprepare(udc->fclk); |
884 | clk_disable(udc->iclk); | 884 | clk_disable_unprepare(udc->iclk); |
885 | } | 885 | } |
886 | 886 | ||
887 | /* | 887 | /* |
@@ -1725,7 +1725,7 @@ static int at91udc_probe(struct platform_device *pdev) | |||
1725 | /* init software state */ | 1725 | /* init software state */ |
1726 | udc = &controller; | 1726 | udc = &controller; |
1727 | udc->gadget.dev.parent = dev; | 1727 | udc->gadget.dev.parent = dev; |
1728 | if (pdev->dev.of_node) | 1728 | if (IS_ENABLED(CONFIG_OF) && pdev->dev.of_node) |
1729 | at91udc_of_init(udc, pdev->dev.of_node); | 1729 | at91udc_of_init(udc, pdev->dev.of_node); |
1730 | else | 1730 | else |
1731 | memcpy(&udc->board, dev->platform_data, | 1731 | memcpy(&udc->board, dev->platform_data, |
@@ -1782,12 +1782,14 @@ static int at91udc_probe(struct platform_device *pdev) | |||
1782 | } | 1782 | } |
1783 | 1783 | ||
1784 | /* don't do anything until we have both gadget driver and VBUS */ | 1784 | /* don't do anything until we have both gadget driver and VBUS */ |
1785 | clk_enable(udc->iclk); | 1785 | retval = clk_prepare_enable(udc->iclk); |
1786 | if (retval) | ||
1787 | goto fail1; | ||
1786 | at91_udp_write(udc, AT91_UDP_TXVC, AT91_UDP_TXVC_TXVDIS); | 1788 | at91_udp_write(udc, AT91_UDP_TXVC, AT91_UDP_TXVC_TXVDIS); |
1787 | at91_udp_write(udc, AT91_UDP_IDR, 0xffffffff); | 1789 | at91_udp_write(udc, AT91_UDP_IDR, 0xffffffff); |
1788 | /* Clear all pending interrupts - UDP may be used by bootloader. */ | 1790 | /* Clear all pending interrupts - UDP may be used by bootloader. */ |
1789 | at91_udp_write(udc, AT91_UDP_ICR, 0xffffffff); | 1791 | at91_udp_write(udc, AT91_UDP_ICR, 0xffffffff); |
1790 | clk_disable(udc->iclk); | 1792 | clk_disable_unprepare(udc->iclk); |
1791 | 1793 | ||
1792 | /* request UDC and maybe VBUS irqs */ | 1794 | /* request UDC and maybe VBUS irqs */ |
1793 | udc->udp_irq = platform_get_irq(pdev, 0); | 1795 | udc->udp_irq = platform_get_irq(pdev, 0); |
diff --git a/drivers/usb/gadget/f_ecm.c b/drivers/usb/gadget/f_ecm.c index 5d3561ea1c15..edab45da3741 100644 --- a/drivers/usb/gadget/f_ecm.c +++ b/drivers/usb/gadget/f_ecm.c | |||
@@ -959,8 +959,11 @@ static struct usb_function_instance *ecm_alloc_inst(void) | |||
959 | mutex_init(&opts->lock); | 959 | mutex_init(&opts->lock); |
960 | opts->func_inst.free_func_inst = ecm_free_inst; | 960 | opts->func_inst.free_func_inst = ecm_free_inst; |
961 | opts->net = gether_setup_default(); | 961 | opts->net = gether_setup_default(); |
962 | if (IS_ERR(opts->net)) | 962 | if (IS_ERR(opts->net)) { |
963 | return ERR_PTR(PTR_ERR(opts->net)); | 963 | struct net_device *net = opts->net; |
964 | kfree(opts); | ||
965 | return ERR_CAST(net); | ||
966 | } | ||
964 | 967 | ||
965 | config_group_init_type_name(&opts->func_inst.group, "", &ecm_func_type); | 968 | config_group_init_type_name(&opts->func_inst.group, "", &ecm_func_type); |
966 | 969 | ||
diff --git a/drivers/usb/gadget/f_eem.c b/drivers/usb/gadget/f_eem.c index 90ee8022e8d8..d00392d879db 100644 --- a/drivers/usb/gadget/f_eem.c +++ b/drivers/usb/gadget/f_eem.c | |||
@@ -593,8 +593,11 @@ static struct usb_function_instance *eem_alloc_inst(void) | |||
593 | mutex_init(&opts->lock); | 593 | mutex_init(&opts->lock); |
594 | opts->func_inst.free_func_inst = eem_free_inst; | 594 | opts->func_inst.free_func_inst = eem_free_inst; |
595 | opts->net = gether_setup_default(); | 595 | opts->net = gether_setup_default(); |
596 | if (IS_ERR(opts->net)) | 596 | if (IS_ERR(opts->net)) { |
597 | return ERR_CAST(opts->net); | 597 | struct net_device *net = opts->net; |
598 | kfree(opts); | ||
599 | return ERR_CAST(net); | ||
600 | } | ||
598 | 601 | ||
599 | config_group_init_type_name(&opts->func_inst.group, "", &eem_func_type); | 602 | config_group_init_type_name(&opts->func_inst.group, "", &eem_func_type); |
600 | 603 | ||
diff --git a/drivers/usb/gadget/f_ncm.c b/drivers/usb/gadget/f_ncm.c index 952177f7eb9b..1c28fe13328a 100644 --- a/drivers/usb/gadget/f_ncm.c +++ b/drivers/usb/gadget/f_ncm.c | |||
@@ -1350,8 +1350,11 @@ static struct usb_function_instance *ncm_alloc_inst(void) | |||
1350 | mutex_init(&opts->lock); | 1350 | mutex_init(&opts->lock); |
1351 | opts->func_inst.free_func_inst = ncm_free_inst; | 1351 | opts->func_inst.free_func_inst = ncm_free_inst; |
1352 | opts->net = gether_setup_default(); | 1352 | opts->net = gether_setup_default(); |
1353 | if (IS_ERR(opts->net)) | 1353 | if (IS_ERR(opts->net)) { |
1354 | return ERR_PTR(PTR_ERR(opts->net)); | 1354 | struct net_device *net = opts->net; |
1355 | kfree(opts); | ||
1356 | return ERR_CAST(net); | ||
1357 | } | ||
1355 | 1358 | ||
1356 | config_group_init_type_name(&opts->func_inst.group, "", &ncm_func_type); | 1359 | config_group_init_type_name(&opts->func_inst.group, "", &ncm_func_type); |
1357 | 1360 | ||
diff --git a/drivers/usb/gadget/f_phonet.c b/drivers/usb/gadget/f_phonet.c index 7944fb0efe3b..1bf26e9f38cd 100644 --- a/drivers/usb/gadget/f_phonet.c +++ b/drivers/usb/gadget/f_phonet.c | |||
@@ -656,8 +656,11 @@ static struct usb_function_instance *phonet_alloc_inst(void) | |||
656 | 656 | ||
657 | opts->func_inst.free_func_inst = phonet_free_inst; | 657 | opts->func_inst.free_func_inst = phonet_free_inst; |
658 | opts->net = gphonet_setup_default(); | 658 | opts->net = gphonet_setup_default(); |
659 | if (IS_ERR(opts->net)) | 659 | if (IS_ERR(opts->net)) { |
660 | return ERR_PTR(PTR_ERR(opts->net)); | 660 | struct net_device *net = opts->net; |
661 | kfree(opts); | ||
662 | return ERR_CAST(net); | ||
663 | } | ||
661 | 664 | ||
662 | config_group_init_type_name(&opts->func_inst.group, "", | 665 | config_group_init_type_name(&opts->func_inst.group, "", |
663 | &phonet_func_type); | 666 | &phonet_func_type); |
diff --git a/drivers/usb/gadget/f_rndis.c b/drivers/usb/gadget/f_rndis.c index 191df35ae69d..717ed7f95639 100644 --- a/drivers/usb/gadget/f_rndis.c +++ b/drivers/usb/gadget/f_rndis.c | |||
@@ -963,8 +963,11 @@ static struct usb_function_instance *rndis_alloc_inst(void) | |||
963 | mutex_init(&opts->lock); | 963 | mutex_init(&opts->lock); |
964 | opts->func_inst.free_func_inst = rndis_free_inst; | 964 | opts->func_inst.free_func_inst = rndis_free_inst; |
965 | opts->net = gether_setup_default(); | 965 | opts->net = gether_setup_default(); |
966 | if (IS_ERR(opts->net)) | 966 | if (IS_ERR(opts->net)) { |
967 | return ERR_CAST(opts->net); | 967 | struct net_device *net = opts->net; |
968 | kfree(opts); | ||
969 | return ERR_CAST(net); | ||
970 | } | ||
968 | 971 | ||
969 | config_group_init_type_name(&opts->func_inst.group, "", | 972 | config_group_init_type_name(&opts->func_inst.group, "", |
970 | &rndis_func_type); | 973 | &rndis_func_type); |
diff --git a/drivers/usb/gadget/f_subset.c b/drivers/usb/gadget/f_subset.c index 5601e1d96c4f..7c8674fa7e80 100644 --- a/drivers/usb/gadget/f_subset.c +++ b/drivers/usb/gadget/f_subset.c | |||
@@ -505,8 +505,11 @@ static struct usb_function_instance *geth_alloc_inst(void) | |||
505 | mutex_init(&opts->lock); | 505 | mutex_init(&opts->lock); |
506 | opts->func_inst.free_func_inst = geth_free_inst; | 506 | opts->func_inst.free_func_inst = geth_free_inst; |
507 | opts->net = gether_setup_default(); | 507 | opts->net = gether_setup_default(); |
508 | if (IS_ERR(opts->net)) | 508 | if (IS_ERR(opts->net)) { |
509 | return ERR_CAST(opts->net); | 509 | struct net_device *net = opts->net; |
510 | kfree(opts); | ||
511 | return ERR_CAST(net); | ||
512 | } | ||
510 | 513 | ||
511 | config_group_init_type_name(&opts->func_inst.group, "", | 514 | config_group_init_type_name(&opts->func_inst.group, "", |
512 | &gether_func_type); | 515 | &gether_func_type); |
diff --git a/drivers/usb/gadget/fotg210-udc.c b/drivers/usb/gadget/fotg210-udc.c index cce5535b1dc6..10cd18ddd0d4 100644 --- a/drivers/usb/gadget/fotg210-udc.c +++ b/drivers/usb/gadget/fotg210-udc.c | |||
@@ -1074,7 +1074,7 @@ static struct usb_gadget_ops fotg210_gadget_ops = { | |||
1074 | .udc_stop = fotg210_udc_stop, | 1074 | .udc_stop = fotg210_udc_stop, |
1075 | }; | 1075 | }; |
1076 | 1076 | ||
1077 | static int __exit fotg210_udc_remove(struct platform_device *pdev) | 1077 | static int fotg210_udc_remove(struct platform_device *pdev) |
1078 | { | 1078 | { |
1079 | struct fotg210_udc *fotg210 = dev_get_drvdata(&pdev->dev); | 1079 | struct fotg210_udc *fotg210 = dev_get_drvdata(&pdev->dev); |
1080 | 1080 | ||
@@ -1088,7 +1088,7 @@ static int __exit fotg210_udc_remove(struct platform_device *pdev) | |||
1088 | return 0; | 1088 | return 0; |
1089 | } | 1089 | } |
1090 | 1090 | ||
1091 | static int __init fotg210_udc_probe(struct platform_device *pdev) | 1091 | static int fotg210_udc_probe(struct platform_device *pdev) |
1092 | { | 1092 | { |
1093 | struct resource *res, *ires; | 1093 | struct resource *res, *ires; |
1094 | struct fotg210_udc *fotg210 = NULL; | 1094 | struct fotg210_udc *fotg210 = NULL; |
diff --git a/drivers/usb/gadget/mv_u3d_core.c b/drivers/usb/gadget/mv_u3d_core.c index 07fdb3eaf48a..ec6a2d290398 100644 --- a/drivers/usb/gadget/mv_u3d_core.c +++ b/drivers/usb/gadget/mv_u3d_core.c | |||
@@ -1776,7 +1776,7 @@ static int mv_u3d_remove(struct platform_device *dev) | |||
1776 | kfree(u3d->eps); | 1776 | kfree(u3d->eps); |
1777 | 1777 | ||
1778 | if (u3d->irq) | 1778 | if (u3d->irq) |
1779 | free_irq(u3d->irq, &dev->dev); | 1779 | free_irq(u3d->irq, u3d); |
1780 | 1780 | ||
1781 | if (u3d->cap_regs) | 1781 | if (u3d->cap_regs) |
1782 | iounmap(u3d->cap_regs); | 1782 | iounmap(u3d->cap_regs); |
@@ -1974,7 +1974,7 @@ static int mv_u3d_probe(struct platform_device *dev) | |||
1974 | return 0; | 1974 | return 0; |
1975 | 1975 | ||
1976 | err_unregister: | 1976 | err_unregister: |
1977 | free_irq(u3d->irq, &dev->dev); | 1977 | free_irq(u3d->irq, u3d); |
1978 | err_request_irq: | 1978 | err_request_irq: |
1979 | err_get_irq: | 1979 | err_get_irq: |
1980 | kfree(u3d->status_req); | 1980 | kfree(u3d->status_req); |
diff --git a/drivers/usb/gadget/udc-core.c b/drivers/usb/gadget/udc-core.c index ffd8fa541101..c28ac9872030 100644 --- a/drivers/usb/gadget/udc-core.c +++ b/drivers/usb/gadget/udc-core.c | |||
@@ -50,6 +50,8 @@ static DEFINE_MUTEX(udc_lock); | |||
50 | 50 | ||
51 | /* ------------------------------------------------------------------------- */ | 51 | /* ------------------------------------------------------------------------- */ |
52 | 52 | ||
53 | #ifdef CONFIG_HAS_DMA | ||
54 | |||
53 | int usb_gadget_map_request(struct usb_gadget *gadget, | 55 | int usb_gadget_map_request(struct usb_gadget *gadget, |
54 | struct usb_request *req, int is_in) | 56 | struct usb_request *req, int is_in) |
55 | { | 57 | { |
@@ -99,6 +101,8 @@ void usb_gadget_unmap_request(struct usb_gadget *gadget, | |||
99 | } | 101 | } |
100 | EXPORT_SYMBOL_GPL(usb_gadget_unmap_request); | 102 | EXPORT_SYMBOL_GPL(usb_gadget_unmap_request); |
101 | 103 | ||
104 | #endif /* CONFIG_HAS_DMA */ | ||
105 | |||
102 | /* ------------------------------------------------------------------------- */ | 106 | /* ------------------------------------------------------------------------- */ |
103 | 107 | ||
104 | void usb_gadget_set_state(struct usb_gadget *gadget, | 108 | void usb_gadget_set_state(struct usb_gadget *gadget, |
@@ -194,9 +198,11 @@ int usb_add_gadget_udc_release(struct device *parent, struct usb_gadget *gadget, | |||
194 | dev_set_name(&gadget->dev, "gadget"); | 198 | dev_set_name(&gadget->dev, "gadget"); |
195 | gadget->dev.parent = parent; | 199 | gadget->dev.parent = parent; |
196 | 200 | ||
201 | #ifdef CONFIG_HAS_DMA | ||
197 | dma_set_coherent_mask(&gadget->dev, parent->coherent_dma_mask); | 202 | dma_set_coherent_mask(&gadget->dev, parent->coherent_dma_mask); |
198 | gadget->dev.dma_parms = parent->dma_parms; | 203 | gadget->dev.dma_parms = parent->dma_parms; |
199 | gadget->dev.dma_mask = parent->dma_mask; | 204 | gadget->dev.dma_mask = parent->dma_mask; |
205 | #endif | ||
200 | 206 | ||
201 | if (release) | 207 | if (release) |
202 | gadget->dev.release = release; | 208 | gadget->dev.release = release; |
diff --git a/drivers/usb/host/ehci-hub.c b/drivers/usb/host/ehci-hub.c index 2b702772d04d..6dce37555c4f 100644 --- a/drivers/usb/host/ehci-hub.c +++ b/drivers/usb/host/ehci-hub.c | |||
@@ -874,6 +874,7 @@ static int ehci_hub_control ( | |||
874 | ehci->reset_done[wIndex] = jiffies | 874 | ehci->reset_done[wIndex] = jiffies |
875 | + msecs_to_jiffies(20); | 875 | + msecs_to_jiffies(20); |
876 | usb_hcd_start_port_resume(&hcd->self, wIndex); | 876 | usb_hcd_start_port_resume(&hcd->self, wIndex); |
877 | set_bit(wIndex, &ehci->resuming_ports); | ||
877 | /* check the port again */ | 878 | /* check the port again */ |
878 | mod_timer(&ehci_to_hcd(ehci)->rh_timer, | 879 | mod_timer(&ehci_to_hcd(ehci)->rh_timer, |
879 | ehci->reset_done[wIndex]); | 880 | ehci->reset_done[wIndex]); |
diff --git a/drivers/usb/host/pci-quirks.h b/drivers/usb/host/pci-quirks.h index 4b8a2092432f..978c849f9c9a 100644 --- a/drivers/usb/host/pci-quirks.h +++ b/drivers/usb/host/pci-quirks.h | |||
@@ -13,6 +13,7 @@ void usb_enable_xhci_ports(struct pci_dev *xhci_pdev); | |||
13 | void usb_disable_xhci_ports(struct pci_dev *xhci_pdev); | 13 | void usb_disable_xhci_ports(struct pci_dev *xhci_pdev); |
14 | void sb800_prefetch(struct device *dev, int on); | 14 | void sb800_prefetch(struct device *dev, int on); |
15 | #else | 15 | #else |
16 | struct pci_dev; | ||
16 | static inline void usb_amd_quirk_pll_disable(void) {} | 17 | static inline void usb_amd_quirk_pll_disable(void) {} |
17 | static inline void usb_amd_quirk_pll_enable(void) {} | 18 | static inline void usb_amd_quirk_pll_enable(void) {} |
18 | static inline void usb_amd_dev_put(void) {} | 19 | static inline void usb_amd_dev_put(void) {} |
diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c index cc24e39b97d5..f00cb203faea 100644 --- a/drivers/usb/host/xhci-pci.c +++ b/drivers/usb/host/xhci-pci.c | |||
@@ -93,7 +93,6 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci) | |||
93 | } | 93 | } |
94 | if (pdev->vendor == PCI_VENDOR_ID_INTEL && | 94 | if (pdev->vendor == PCI_VENDOR_ID_INTEL && |
95 | pdev->device == PCI_DEVICE_ID_INTEL_PANTHERPOINT_XHCI) { | 95 | pdev->device == PCI_DEVICE_ID_INTEL_PANTHERPOINT_XHCI) { |
96 | xhci->quirks |= XHCI_SPURIOUS_SUCCESS; | ||
97 | xhci->quirks |= XHCI_EP_LIMIT_QUIRK; | 96 | xhci->quirks |= XHCI_EP_LIMIT_QUIRK; |
98 | xhci->limit_active_eps = 64; | 97 | xhci->limit_active_eps = 64; |
99 | xhci->quirks |= XHCI_SW_BW_CHECKING; | 98 | xhci->quirks |= XHCI_SW_BW_CHECKING; |
diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c index 1e57eafa6910..5b08cd85f8e7 100644 --- a/drivers/usb/host/xhci-ring.c +++ b/drivers/usb/host/xhci-ring.c | |||
@@ -434,7 +434,7 @@ static void ring_doorbell_for_active_rings(struct xhci_hcd *xhci, | |||
434 | 434 | ||
435 | /* A ring has pending URBs if its TD list is not empty */ | 435 | /* A ring has pending URBs if its TD list is not empty */ |
436 | if (!(ep->ep_state & EP_HAS_STREAMS)) { | 436 | if (!(ep->ep_state & EP_HAS_STREAMS)) { |
437 | if (!(list_empty(&ep->ring->td_list))) | 437 | if (ep->ring && !(list_empty(&ep->ring->td_list))) |
438 | xhci_ring_ep_doorbell(xhci, slot_id, ep_index, 0); | 438 | xhci_ring_ep_doorbell(xhci, slot_id, ep_index, 0); |
439 | return; | 439 | return; |
440 | } | 440 | } |
diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c index 2c49f00260ca..41eb4fc33453 100644 --- a/drivers/usb/host/xhci.c +++ b/drivers/usb/host/xhci.c | |||
@@ -329,7 +329,7 @@ static void xhci_cleanup_msix(struct xhci_hcd *xhci) | |||
329 | return; | 329 | return; |
330 | } | 330 | } |
331 | 331 | ||
332 | static void xhci_msix_sync_irqs(struct xhci_hcd *xhci) | 332 | static void __maybe_unused xhci_msix_sync_irqs(struct xhci_hcd *xhci) |
333 | { | 333 | { |
334 | int i; | 334 | int i; |
335 | 335 | ||
@@ -1181,9 +1181,6 @@ static int xhci_check_args(struct usb_hcd *hcd, struct usb_device *udev, | |||
1181 | } | 1181 | } |
1182 | 1182 | ||
1183 | xhci = hcd_to_xhci(hcd); | 1183 | xhci = hcd_to_xhci(hcd); |
1184 | if (xhci->xhc_state & XHCI_STATE_HALTED) | ||
1185 | return -ENODEV; | ||
1186 | |||
1187 | if (check_virt_dev) { | 1184 | if (check_virt_dev) { |
1188 | if (!udev->slot_id || !xhci->devs[udev->slot_id]) { | 1185 | if (!udev->slot_id || !xhci->devs[udev->slot_id]) { |
1189 | printk(KERN_DEBUG "xHCI %s called with unaddressed " | 1186 | printk(KERN_DEBUG "xHCI %s called with unaddressed " |
@@ -1199,6 +1196,9 @@ static int xhci_check_args(struct usb_hcd *hcd, struct usb_device *udev, | |||
1199 | } | 1196 | } |
1200 | } | 1197 | } |
1201 | 1198 | ||
1199 | if (xhci->xhc_state & XHCI_STATE_HALTED) | ||
1200 | return -ENODEV; | ||
1201 | |||
1202 | return 1; | 1202 | return 1; |
1203 | } | 1203 | } |
1204 | 1204 | ||
@@ -3898,7 +3898,7 @@ int xhci_find_raw_port_number(struct usb_hcd *hcd, int port1) | |||
3898 | * Issue an Evaluate Context command to change the Maximum Exit Latency in the | 3898 | * Issue an Evaluate Context command to change the Maximum Exit Latency in the |
3899 | * slot context. If that succeeds, store the new MEL in the xhci_virt_device. | 3899 | * slot context. If that succeeds, store the new MEL in the xhci_virt_device. |
3900 | */ | 3900 | */ |
3901 | static int xhci_change_max_exit_latency(struct xhci_hcd *xhci, | 3901 | static int __maybe_unused xhci_change_max_exit_latency(struct xhci_hcd *xhci, |
3902 | struct usb_device *udev, u16 max_exit_latency) | 3902 | struct usb_device *udev, u16 max_exit_latency) |
3903 | { | 3903 | { |
3904 | struct xhci_virt_device *virt_dev; | 3904 | struct xhci_virt_device *virt_dev; |
@@ -4892,6 +4892,13 @@ int xhci_gen_setup(struct usb_hcd *hcd, xhci_get_quirks_t get_quirks) | |||
4892 | 4892 | ||
4893 | get_quirks(dev, xhci); | 4893 | get_quirks(dev, xhci); |
4894 | 4894 | ||
4895 | /* In xhci controllers which follow xhci 1.0 spec gives a spurious | ||
4896 | * success event after a short transfer. This quirk will ignore such | ||
4897 | * spurious event. | ||
4898 | */ | ||
4899 | if (xhci->hci_version > 0x96) | ||
4900 | xhci->quirks |= XHCI_SPURIOUS_SUCCESS; | ||
4901 | |||
4895 | /* Make sure the HC is halted. */ | 4902 | /* Make sure the HC is halted. */ |
4896 | retval = xhci_halt(xhci); | 4903 | retval = xhci_halt(xhci); |
4897 | if (retval) | 4904 | if (retval) |
diff --git a/drivers/usb/misc/sisusbvga/sisusb.c b/drivers/usb/misc/sisusbvga/sisusb.c index c21386ec5d35..de98906f786d 100644 --- a/drivers/usb/misc/sisusbvga/sisusb.c +++ b/drivers/usb/misc/sisusbvga/sisusb.c | |||
@@ -3247,6 +3247,7 @@ static const struct usb_device_id sisusb_table[] = { | |||
3247 | { USB_DEVICE(0x0711, 0x0903) }, | 3247 | { USB_DEVICE(0x0711, 0x0903) }, |
3248 | { USB_DEVICE(0x0711, 0x0918) }, | 3248 | { USB_DEVICE(0x0711, 0x0918) }, |
3249 | { USB_DEVICE(0x0711, 0x0920) }, | 3249 | { USB_DEVICE(0x0711, 0x0920) }, |
3250 | { USB_DEVICE(0x0711, 0x0950) }, | ||
3250 | { USB_DEVICE(0x182d, 0x021c) }, | 3251 | { USB_DEVICE(0x182d, 0x021c) }, |
3251 | { USB_DEVICE(0x182d, 0x0269) }, | 3252 | { USB_DEVICE(0x182d, 0x0269) }, |
3252 | { } | 3253 | { } |
diff --git a/drivers/usb/phy/phy-omap-usb3.c b/drivers/usb/phy/phy-omap-usb3.c index efe6e1464f45..a2fb30bbb971 100644 --- a/drivers/usb/phy/phy-omap-usb3.c +++ b/drivers/usb/phy/phy-omap-usb3.c | |||
@@ -71,9 +71,9 @@ static struct usb_dpll_params omap_usb3_dpll_params[NUM_SYS_CLKS] = { | |||
71 | {1250, 5, 4, 20, 0}, /* 12 MHz */ | 71 | {1250, 5, 4, 20, 0}, /* 12 MHz */ |
72 | {3125, 20, 4, 20, 0}, /* 16.8 MHz */ | 72 | {3125, 20, 4, 20, 0}, /* 16.8 MHz */ |
73 | {1172, 8, 4, 20, 65537}, /* 19.2 MHz */ | 73 | {1172, 8, 4, 20, 65537}, /* 19.2 MHz */ |
74 | {1000, 7, 4, 10, 0}, /* 20 MHz */ | ||
74 | {1250, 12, 4, 20, 0}, /* 26 MHz */ | 75 | {1250, 12, 4, 20, 0}, /* 26 MHz */ |
75 | {3125, 47, 4, 20, 92843}, /* 38.4 MHz */ | 76 | {3125, 47, 4, 20, 92843}, /* 38.4 MHz */ |
76 | {1000, 7, 4, 10, 0}, /* 20 MHz */ | ||
77 | 77 | ||
78 | }; | 78 | }; |
79 | 79 | ||
diff --git a/drivers/usb/phy/phy-samsung-usb2.c b/drivers/usb/phy/phy-samsung-usb2.c index 1011c16ade7e..758b86d0fcb3 100644 --- a/drivers/usb/phy/phy-samsung-usb2.c +++ b/drivers/usb/phy/phy-samsung-usb2.c | |||
@@ -388,7 +388,7 @@ static int samsung_usb2phy_probe(struct platform_device *pdev) | |||
388 | clk = devm_clk_get(dev, "otg"); | 388 | clk = devm_clk_get(dev, "otg"); |
389 | 389 | ||
390 | if (IS_ERR(clk)) { | 390 | if (IS_ERR(clk)) { |
391 | dev_err(dev, "Failed to get otg clock\n"); | 391 | dev_err(dev, "Failed to get usbhost/otg clock\n"); |
392 | return PTR_ERR(clk); | 392 | return PTR_ERR(clk); |
393 | } | 393 | } |
394 | 394 | ||
diff --git a/drivers/usb/renesas_usbhs/mod_gadget.c b/drivers/usb/renesas_usbhs/mod_gadget.c index ed4949faa70d..805940c37353 100644 --- a/drivers/usb/renesas_usbhs/mod_gadget.c +++ b/drivers/usb/renesas_usbhs/mod_gadget.c | |||
@@ -855,10 +855,6 @@ static int usbhsg_gadget_stop(struct usb_gadget *gadget, | |||
855 | struct usbhsg_gpriv *gpriv = usbhsg_gadget_to_gpriv(gadget); | 855 | struct usbhsg_gpriv *gpriv = usbhsg_gadget_to_gpriv(gadget); |
856 | struct usbhs_priv *priv = usbhsg_gpriv_to_priv(gpriv); | 856 | struct usbhs_priv *priv = usbhsg_gpriv_to_priv(gpriv); |
857 | 857 | ||
858 | if (!driver || | ||
859 | !driver->unbind) | ||
860 | return -EINVAL; | ||
861 | |||
862 | usbhsg_try_stop(priv, USBHSG_STATUS_REGISTERD); | 858 | usbhsg_try_stop(priv, USBHSG_STATUS_REGISTERD); |
863 | gpriv->driver = NULL; | 859 | gpriv->driver = NULL; |
864 | 860 | ||
diff --git a/drivers/usb/serial/cp210x.c b/drivers/usb/serial/cp210x.c index d6ef2f8da37d..0eae4ba3760e 100644 --- a/drivers/usb/serial/cp210x.c +++ b/drivers/usb/serial/cp210x.c | |||
@@ -53,6 +53,7 @@ static const struct usb_device_id id_table[] = { | |||
53 | { USB_DEVICE(0x0489, 0xE000) }, /* Pirelli Broadband S.p.A, DP-L10 SIP/GSM Mobile */ | 53 | { USB_DEVICE(0x0489, 0xE000) }, /* Pirelli Broadband S.p.A, DP-L10 SIP/GSM Mobile */ |
54 | { USB_DEVICE(0x0489, 0xE003) }, /* Pirelli Broadband S.p.A, DP-L10 SIP/GSM Mobile */ | 54 | { USB_DEVICE(0x0489, 0xE003) }, /* Pirelli Broadband S.p.A, DP-L10 SIP/GSM Mobile */ |
55 | { USB_DEVICE(0x0745, 0x1000) }, /* CipherLab USB CCD Barcode Scanner 1000 */ | 55 | { USB_DEVICE(0x0745, 0x1000) }, /* CipherLab USB CCD Barcode Scanner 1000 */ |
56 | { USB_DEVICE(0x0846, 0x1100) }, /* NetGear Managed Switch M4100 series, M5300 series, M7100 series */ | ||
56 | { USB_DEVICE(0x08e6, 0x5501) }, /* Gemalto Prox-PU/CU contactless smartcard reader */ | 57 | { USB_DEVICE(0x08e6, 0x5501) }, /* Gemalto Prox-PU/CU contactless smartcard reader */ |
57 | { USB_DEVICE(0x08FD, 0x000A) }, /* Digianswer A/S , ZigBee/802.15.4 MAC Device */ | 58 | { USB_DEVICE(0x08FD, 0x000A) }, /* Digianswer A/S , ZigBee/802.15.4 MAC Device */ |
58 | { USB_DEVICE(0x0BED, 0x1100) }, /* MEI (TM) Cashflow-SC Bill/Voucher Acceptor */ | 59 | { USB_DEVICE(0x0BED, 0x1100) }, /* MEI (TM) Cashflow-SC Bill/Voucher Acceptor */ |
@@ -118,6 +119,8 @@ static const struct usb_device_id id_table[] = { | |||
118 | { USB_DEVICE(0x10C4, 0x85F8) }, /* Virtenio Preon32 */ | 119 | { USB_DEVICE(0x10C4, 0x85F8) }, /* Virtenio Preon32 */ |
119 | { USB_DEVICE(0x10C4, 0x8664) }, /* AC-Services CAN-IF */ | 120 | { USB_DEVICE(0x10C4, 0x8664) }, /* AC-Services CAN-IF */ |
120 | { USB_DEVICE(0x10C4, 0x8665) }, /* AC-Services OBD-IF */ | 121 | { USB_DEVICE(0x10C4, 0x8665) }, /* AC-Services OBD-IF */ |
122 | { USB_DEVICE(0x10C4, 0x88A4) }, /* MMB Networks ZigBee USB Device */ | ||
123 | { USB_DEVICE(0x10C4, 0x88A5) }, /* Planet Innovation Ingeni ZigBee USB Device */ | ||
121 | { USB_DEVICE(0x10C4, 0xEA60) }, /* Silicon Labs factory default */ | 124 | { USB_DEVICE(0x10C4, 0xEA60) }, /* Silicon Labs factory default */ |
122 | { USB_DEVICE(0x10C4, 0xEA61) }, /* Silicon Labs factory default */ | 125 | { USB_DEVICE(0x10C4, 0xEA61) }, /* Silicon Labs factory default */ |
123 | { USB_DEVICE(0x10C4, 0xEA70) }, /* Silicon Labs factory default */ | 126 | { USB_DEVICE(0x10C4, 0xEA70) }, /* Silicon Labs factory default */ |
@@ -148,6 +151,7 @@ static const struct usb_device_id id_table[] = { | |||
148 | { USB_DEVICE(0x17F4, 0xAAAA) }, /* Wavesense Jazz blood glucose meter */ | 151 | { USB_DEVICE(0x17F4, 0xAAAA) }, /* Wavesense Jazz blood glucose meter */ |
149 | { USB_DEVICE(0x1843, 0x0200) }, /* Vaisala USB Instrument Cable */ | 152 | { USB_DEVICE(0x1843, 0x0200) }, /* Vaisala USB Instrument Cable */ |
150 | { USB_DEVICE(0x18EF, 0xE00F) }, /* ELV USB-I2C-Interface */ | 153 | { USB_DEVICE(0x18EF, 0xE00F) }, /* ELV USB-I2C-Interface */ |
154 | { USB_DEVICE(0x1ADB, 0x0001) }, /* Schweitzer Engineering C662 Cable */ | ||
151 | { USB_DEVICE(0x1BE3, 0x07A6) }, /* WAGO 750-923 USB Service Cable */ | 155 | { USB_DEVICE(0x1BE3, 0x07A6) }, /* WAGO 750-923 USB Service Cable */ |
152 | { USB_DEVICE(0x1E29, 0x0102) }, /* Festo CPX-USB */ | 156 | { USB_DEVICE(0x1E29, 0x0102) }, /* Festo CPX-USB */ |
153 | { USB_DEVICE(0x1E29, 0x0501) }, /* Festo CMSP */ | 157 | { USB_DEVICE(0x1E29, 0x0501) }, /* Festo CMSP */ |
diff --git a/drivers/usb/serial/mos7840.c b/drivers/usb/serial/mos7840.c index 0a818b238508..603fb70dde80 100644 --- a/drivers/usb/serial/mos7840.c +++ b/drivers/usb/serial/mos7840.c | |||
@@ -905,20 +905,20 @@ static int mos7840_open(struct tty_struct *tty, struct usb_serial_port *port) | |||
905 | status = mos7840_get_reg_sync(port, mos7840_port->SpRegOffset, &Data); | 905 | status = mos7840_get_reg_sync(port, mos7840_port->SpRegOffset, &Data); |
906 | if (status < 0) { | 906 | if (status < 0) { |
907 | dev_dbg(&port->dev, "Reading Spreg failed\n"); | 907 | dev_dbg(&port->dev, "Reading Spreg failed\n"); |
908 | return -1; | 908 | goto err; |
909 | } | 909 | } |
910 | Data |= 0x80; | 910 | Data |= 0x80; |
911 | status = mos7840_set_reg_sync(port, mos7840_port->SpRegOffset, Data); | 911 | status = mos7840_set_reg_sync(port, mos7840_port->SpRegOffset, Data); |
912 | if (status < 0) { | 912 | if (status < 0) { |
913 | dev_dbg(&port->dev, "writing Spreg failed\n"); | 913 | dev_dbg(&port->dev, "writing Spreg failed\n"); |
914 | return -1; | 914 | goto err; |
915 | } | 915 | } |
916 | 916 | ||
917 | Data &= ~0x80; | 917 | Data &= ~0x80; |
918 | status = mos7840_set_reg_sync(port, mos7840_port->SpRegOffset, Data); | 918 | status = mos7840_set_reg_sync(port, mos7840_port->SpRegOffset, Data); |
919 | if (status < 0) { | 919 | if (status < 0) { |
920 | dev_dbg(&port->dev, "writing Spreg failed\n"); | 920 | dev_dbg(&port->dev, "writing Spreg failed\n"); |
921 | return -1; | 921 | goto err; |
922 | } | 922 | } |
923 | /* End of block to be checked */ | 923 | /* End of block to be checked */ |
924 | 924 | ||
@@ -927,7 +927,7 @@ static int mos7840_open(struct tty_struct *tty, struct usb_serial_port *port) | |||
927 | &Data); | 927 | &Data); |
928 | if (status < 0) { | 928 | if (status < 0) { |
929 | dev_dbg(&port->dev, "Reading Controlreg failed\n"); | 929 | dev_dbg(&port->dev, "Reading Controlreg failed\n"); |
930 | return -1; | 930 | goto err; |
931 | } | 931 | } |
932 | Data |= 0x08; /* Driver done bit */ | 932 | Data |= 0x08; /* Driver done bit */ |
933 | Data |= 0x20; /* rx_disable */ | 933 | Data |= 0x20; /* rx_disable */ |
@@ -935,7 +935,7 @@ static int mos7840_open(struct tty_struct *tty, struct usb_serial_port *port) | |||
935 | mos7840_port->ControlRegOffset, Data); | 935 | mos7840_port->ControlRegOffset, Data); |
936 | if (status < 0) { | 936 | if (status < 0) { |
937 | dev_dbg(&port->dev, "writing Controlreg failed\n"); | 937 | dev_dbg(&port->dev, "writing Controlreg failed\n"); |
938 | return -1; | 938 | goto err; |
939 | } | 939 | } |
940 | /* do register settings here */ | 940 | /* do register settings here */ |
941 | /* Set all regs to the device default values. */ | 941 | /* Set all regs to the device default values. */ |
@@ -946,21 +946,21 @@ static int mos7840_open(struct tty_struct *tty, struct usb_serial_port *port) | |||
946 | status = mos7840_set_uart_reg(port, INTERRUPT_ENABLE_REGISTER, Data); | 946 | status = mos7840_set_uart_reg(port, INTERRUPT_ENABLE_REGISTER, Data); |
947 | if (status < 0) { | 947 | if (status < 0) { |
948 | dev_dbg(&port->dev, "disabling interrupts failed\n"); | 948 | dev_dbg(&port->dev, "disabling interrupts failed\n"); |
949 | return -1; | 949 | goto err; |
950 | } | 950 | } |
951 | /* Set FIFO_CONTROL_REGISTER to the default value */ | 951 | /* Set FIFO_CONTROL_REGISTER to the default value */ |
952 | Data = 0x00; | 952 | Data = 0x00; |
953 | status = mos7840_set_uart_reg(port, FIFO_CONTROL_REGISTER, Data); | 953 | status = mos7840_set_uart_reg(port, FIFO_CONTROL_REGISTER, Data); |
954 | if (status < 0) { | 954 | if (status < 0) { |
955 | dev_dbg(&port->dev, "Writing FIFO_CONTROL_REGISTER failed\n"); | 955 | dev_dbg(&port->dev, "Writing FIFO_CONTROL_REGISTER failed\n"); |
956 | return -1; | 956 | goto err; |
957 | } | 957 | } |
958 | 958 | ||
959 | Data = 0xcf; | 959 | Data = 0xcf; |
960 | status = mos7840_set_uart_reg(port, FIFO_CONTROL_REGISTER, Data); | 960 | status = mos7840_set_uart_reg(port, FIFO_CONTROL_REGISTER, Data); |
961 | if (status < 0) { | 961 | if (status < 0) { |
962 | dev_dbg(&port->dev, "Writing FIFO_CONTROL_REGISTER failed\n"); | 962 | dev_dbg(&port->dev, "Writing FIFO_CONTROL_REGISTER failed\n"); |
963 | return -1; | 963 | goto err; |
964 | } | 964 | } |
965 | 965 | ||
966 | Data = 0x03; | 966 | Data = 0x03; |
@@ -1103,6 +1103,15 @@ static int mos7840_open(struct tty_struct *tty, struct usb_serial_port *port) | |||
1103 | /* mos7840_change_port_settings(mos7840_port,old_termios); */ | 1103 | /* mos7840_change_port_settings(mos7840_port,old_termios); */ |
1104 | 1104 | ||
1105 | return 0; | 1105 | return 0; |
1106 | err: | ||
1107 | for (j = 0; j < NUM_URBS; ++j) { | ||
1108 | urb = mos7840_port->write_urb_pool[j]; | ||
1109 | if (!urb) | ||
1110 | continue; | ||
1111 | kfree(urb->transfer_buffer); | ||
1112 | usb_free_urb(urb); | ||
1113 | } | ||
1114 | return status; | ||
1106 | } | 1115 | } |
1107 | 1116 | ||
1108 | /***************************************************************************** | 1117 | /***************************************************************************** |
diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c index 5dd857de05b0..1cf6f125f5f0 100644 --- a/drivers/usb/serial/option.c +++ b/drivers/usb/serial/option.c | |||
@@ -341,17 +341,12 @@ static void option_instat_callback(struct urb *urb); | |||
341 | #define OLIVETTI_VENDOR_ID 0x0b3c | 341 | #define OLIVETTI_VENDOR_ID 0x0b3c |
342 | #define OLIVETTI_PRODUCT_OLICARD100 0xc000 | 342 | #define OLIVETTI_PRODUCT_OLICARD100 0xc000 |
343 | #define OLIVETTI_PRODUCT_OLICARD145 0xc003 | 343 | #define OLIVETTI_PRODUCT_OLICARD145 0xc003 |
344 | #define OLIVETTI_PRODUCT_OLICARD200 0xc005 | ||
344 | 345 | ||
345 | /* Celot products */ | 346 | /* Celot products */ |
346 | #define CELOT_VENDOR_ID 0x211f | 347 | #define CELOT_VENDOR_ID 0x211f |
347 | #define CELOT_PRODUCT_CT680M 0x6801 | 348 | #define CELOT_PRODUCT_CT680M 0x6801 |
348 | 349 | ||
349 | /* ONDA Communication vendor id */ | ||
350 | #define ONDA_VENDOR_ID 0x1ee8 | ||
351 | |||
352 | /* ONDA MT825UP HSDPA 14.2 modem */ | ||
353 | #define ONDA_MT825UP 0x000b | ||
354 | |||
355 | /* Samsung products */ | 350 | /* Samsung products */ |
356 | #define SAMSUNG_VENDOR_ID 0x04e8 | 351 | #define SAMSUNG_VENDOR_ID 0x04e8 |
357 | #define SAMSUNG_PRODUCT_GT_B3730 0x6889 | 352 | #define SAMSUNG_PRODUCT_GT_B3730 0x6889 |
@@ -444,7 +439,8 @@ static void option_instat_callback(struct urb *urb); | |||
444 | 439 | ||
445 | /* Hyundai Petatel Inc. products */ | 440 | /* Hyundai Petatel Inc. products */ |
446 | #define PETATEL_VENDOR_ID 0x1ff4 | 441 | #define PETATEL_VENDOR_ID 0x1ff4 |
447 | #define PETATEL_PRODUCT_NP10T 0x600e | 442 | #define PETATEL_PRODUCT_NP10T_600A 0x600a |
443 | #define PETATEL_PRODUCT_NP10T_600E 0x600e | ||
448 | 444 | ||
449 | /* TP-LINK Incorporated products */ | 445 | /* TP-LINK Incorporated products */ |
450 | #define TPLINK_VENDOR_ID 0x2357 | 446 | #define TPLINK_VENDOR_ID 0x2357 |
@@ -782,6 +778,7 @@ static const struct usb_device_id option_ids[] = { | |||
782 | { USB_DEVICE(KYOCERA_VENDOR_ID, KYOCERA_PRODUCT_KPC650) }, | 778 | { USB_DEVICE(KYOCERA_VENDOR_ID, KYOCERA_PRODUCT_KPC650) }, |
783 | { USB_DEVICE(KYOCERA_VENDOR_ID, KYOCERA_PRODUCT_KPC680) }, | 779 | { USB_DEVICE(KYOCERA_VENDOR_ID, KYOCERA_PRODUCT_KPC680) }, |
784 | { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x6613)}, /* Onda H600/ZTE MF330 */ | 780 | { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x6613)}, /* Onda H600/ZTE MF330 */ |
781 | { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x0023)}, /* ONYX 3G device */ | ||
785 | { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x9000)}, /* SIMCom SIM5218 */ | 782 | { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x9000)}, /* SIMCom SIM5218 */ |
786 | { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6280) }, /* BP3-USB & BP3-EXT HSDPA */ | 783 | { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6280) }, /* BP3-USB & BP3-EXT HSDPA */ |
787 | { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6008) }, | 784 | { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6008) }, |
@@ -817,7 +814,8 @@ static const struct usb_device_id option_ids[] = { | |||
817 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0017, 0xff, 0xff, 0xff), | 814 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0017, 0xff, 0xff, 0xff), |
818 | .driver_info = (kernel_ulong_t)&net_intf3_blacklist }, | 815 | .driver_info = (kernel_ulong_t)&net_intf3_blacklist }, |
819 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0018, 0xff, 0xff, 0xff) }, | 816 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0018, 0xff, 0xff, 0xff) }, |
820 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0019, 0xff, 0xff, 0xff) }, | 817 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0019, 0xff, 0xff, 0xff), |
818 | .driver_info = (kernel_ulong_t)&net_intf3_blacklist }, | ||
821 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0020, 0xff, 0xff, 0xff) }, | 819 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0020, 0xff, 0xff, 0xff) }, |
822 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0021, 0xff, 0xff, 0xff), | 820 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0021, 0xff, 0xff, 0xff), |
823 | .driver_info = (kernel_ulong_t)&net_intf4_blacklist }, | 821 | .driver_info = (kernel_ulong_t)&net_intf4_blacklist }, |
@@ -1256,8 +1254,8 @@ static const struct usb_device_id option_ids[] = { | |||
1256 | 1254 | ||
1257 | { USB_DEVICE(OLIVETTI_VENDOR_ID, OLIVETTI_PRODUCT_OLICARD100) }, | 1255 | { USB_DEVICE(OLIVETTI_VENDOR_ID, OLIVETTI_PRODUCT_OLICARD100) }, |
1258 | { USB_DEVICE(OLIVETTI_VENDOR_ID, OLIVETTI_PRODUCT_OLICARD145) }, | 1256 | { USB_DEVICE(OLIVETTI_VENDOR_ID, OLIVETTI_PRODUCT_OLICARD145) }, |
1257 | { USB_DEVICE(OLIVETTI_VENDOR_ID, OLIVETTI_PRODUCT_OLICARD200) }, | ||
1259 | { USB_DEVICE(CELOT_VENDOR_ID, CELOT_PRODUCT_CT680M) }, /* CT-650 CDMA 450 1xEVDO modem */ | 1258 | { USB_DEVICE(CELOT_VENDOR_ID, CELOT_PRODUCT_CT680M) }, /* CT-650 CDMA 450 1xEVDO modem */ |
1260 | { USB_DEVICE(ONDA_VENDOR_ID, ONDA_MT825UP) }, /* ONDA MT825UP modem */ | ||
1261 | { USB_DEVICE_AND_INTERFACE_INFO(SAMSUNG_VENDOR_ID, SAMSUNG_PRODUCT_GT_B3730, USB_CLASS_CDC_DATA, 0x00, 0x00) }, /* Samsung GT-B3730 LTE USB modem.*/ | 1259 | { USB_DEVICE_AND_INTERFACE_INFO(SAMSUNG_VENDOR_ID, SAMSUNG_PRODUCT_GT_B3730, USB_CLASS_CDC_DATA, 0x00, 0x00) }, /* Samsung GT-B3730 LTE USB modem.*/ |
1262 | { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CEM600) }, | 1260 | { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CEM600) }, |
1263 | { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CEM610) }, | 1261 | { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CEM610) }, |
@@ -1329,9 +1327,12 @@ static const struct usb_device_id option_ids[] = { | |||
1329 | { USB_DEVICE_AND_INTERFACE_INFO(MEDIATEK_VENDOR_ID, MEDIATEK_PRODUCT_DC_4COM2, 0xff, 0x02, 0x01) }, | 1327 | { USB_DEVICE_AND_INTERFACE_INFO(MEDIATEK_VENDOR_ID, MEDIATEK_PRODUCT_DC_4COM2, 0xff, 0x02, 0x01) }, |
1330 | { USB_DEVICE_AND_INTERFACE_INFO(MEDIATEK_VENDOR_ID, MEDIATEK_PRODUCT_DC_4COM2, 0xff, 0x00, 0x00) }, | 1328 | { USB_DEVICE_AND_INTERFACE_INFO(MEDIATEK_VENDOR_ID, MEDIATEK_PRODUCT_DC_4COM2, 0xff, 0x00, 0x00) }, |
1331 | { USB_DEVICE(CELLIENT_VENDOR_ID, CELLIENT_PRODUCT_MEN200) }, | 1329 | { USB_DEVICE(CELLIENT_VENDOR_ID, CELLIENT_PRODUCT_MEN200) }, |
1332 | { USB_DEVICE(PETATEL_VENDOR_ID, PETATEL_PRODUCT_NP10T) }, | 1330 | { USB_DEVICE(PETATEL_VENDOR_ID, PETATEL_PRODUCT_NP10T_600A) }, |
1331 | { USB_DEVICE(PETATEL_VENDOR_ID, PETATEL_PRODUCT_NP10T_600E) }, | ||
1333 | { USB_DEVICE(TPLINK_VENDOR_ID, TPLINK_PRODUCT_MA180), | 1332 | { USB_DEVICE(TPLINK_VENDOR_ID, TPLINK_PRODUCT_MA180), |
1334 | .driver_info = (kernel_ulong_t)&net_intf4_blacklist }, | 1333 | .driver_info = (kernel_ulong_t)&net_intf4_blacklist }, |
1334 | { USB_DEVICE(TPLINK_VENDOR_ID, 0x9000), /* TP-Link MA260 */ | ||
1335 | .driver_info = (kernel_ulong_t)&net_intf4_blacklist }, | ||
1335 | { USB_DEVICE(CHANGHONG_VENDOR_ID, CHANGHONG_PRODUCT_CH690) }, | 1336 | { USB_DEVICE(CHANGHONG_VENDOR_ID, CHANGHONG_PRODUCT_CH690) }, |
1336 | { USB_DEVICE_AND_INTERFACE_INFO(0x2001, 0x7d01, 0xff, 0x02, 0x01) }, /* D-Link DWM-156 (variant) */ | 1337 | { USB_DEVICE_AND_INTERFACE_INFO(0x2001, 0x7d01, 0xff, 0x02, 0x01) }, /* D-Link DWM-156 (variant) */ |
1337 | { USB_DEVICE_AND_INTERFACE_INFO(0x2001, 0x7d01, 0xff, 0x00, 0x00) }, /* D-Link DWM-156 (variant) */ | 1338 | { USB_DEVICE_AND_INTERFACE_INFO(0x2001, 0x7d01, 0xff, 0x00, 0x00) }, /* D-Link DWM-156 (variant) */ |
@@ -1339,6 +1340,8 @@ static const struct usb_device_id option_ids[] = { | |||
1339 | { USB_DEVICE_AND_INTERFACE_INFO(0x2001, 0x7d02, 0xff, 0x00, 0x00) }, | 1340 | { USB_DEVICE_AND_INTERFACE_INFO(0x2001, 0x7d02, 0xff, 0x00, 0x00) }, |
1340 | { USB_DEVICE_AND_INTERFACE_INFO(0x2001, 0x7d03, 0xff, 0x02, 0x01) }, | 1341 | { USB_DEVICE_AND_INTERFACE_INFO(0x2001, 0x7d03, 0xff, 0x02, 0x01) }, |
1341 | { USB_DEVICE_AND_INTERFACE_INFO(0x2001, 0x7d03, 0xff, 0x00, 0x00) }, | 1342 | { USB_DEVICE_AND_INTERFACE_INFO(0x2001, 0x7d03, 0xff, 0x00, 0x00) }, |
1343 | { USB_DEVICE_AND_INTERFACE_INFO(0x07d1, 0x3e01, 0xff, 0xff, 0xff) }, /* D-Link DWM-152/C1 */ | ||
1344 | { USB_DEVICE_AND_INTERFACE_INFO(0x07d1, 0x3e02, 0xff, 0xff, 0xff) }, /* D-Link DWM-156/C1 */ | ||
1342 | { } /* Terminating entry */ | 1345 | { } /* Terminating entry */ |
1343 | }; | 1346 | }; |
1344 | MODULE_DEVICE_TABLE(usb, option_ids); | 1347 | MODULE_DEVICE_TABLE(usb, option_ids); |
diff --git a/drivers/usb/serial/ti_usb_3410_5052.c b/drivers/usb/serial/ti_usb_3410_5052.c index 7182bb774b79..375b5a400b6f 100644 --- a/drivers/usb/serial/ti_usb_3410_5052.c +++ b/drivers/usb/serial/ti_usb_3410_5052.c | |||
@@ -371,7 +371,7 @@ static int ti_startup(struct usb_serial *serial) | |||
371 | usb_set_serial_data(serial, tdev); | 371 | usb_set_serial_data(serial, tdev); |
372 | 372 | ||
373 | /* determine device type */ | 373 | /* determine device type */ |
374 | if (usb_match_id(serial->interface, ti_id_table_3410)) | 374 | if (serial->type == &ti_1port_device) |
375 | tdev->td_is_3410 = 1; | 375 | tdev->td_is_3410 = 1; |
376 | dev_dbg(&dev->dev, "%s - device type is %s\n", __func__, | 376 | dev_dbg(&dev->dev, "%s - device type is %s\n", __func__, |
377 | tdev->td_is_3410 ? "3410" : "5052"); | 377 | tdev->td_is_3410 ? "3410" : "5052"); |
diff --git a/drivers/usb/storage/unusual_devs.h b/drivers/usb/storage/unusual_devs.h index 1799335288bd..c015f2c16729 100644 --- a/drivers/usb/storage/unusual_devs.h +++ b/drivers/usb/storage/unusual_devs.h | |||
@@ -665,6 +665,13 @@ UNUSUAL_DEV( 0x054c, 0x016a, 0x0000, 0x9999, | |||
665 | USB_SC_DEVICE, USB_PR_DEVICE, NULL, | 665 | USB_SC_DEVICE, USB_PR_DEVICE, NULL, |
666 | US_FL_FIX_INQUIRY ), | 666 | US_FL_FIX_INQUIRY ), |
667 | 667 | ||
668 | /* Submitted by Ren Bigcren <bigcren.ren@sonymobile.com> */ | ||
669 | UNUSUAL_DEV( 0x054c, 0x02a5, 0x0100, 0x0100, | ||
670 | "Sony Corp.", | ||
671 | "MicroVault Flash Drive", | ||
672 | USB_SC_DEVICE, USB_PR_DEVICE, NULL, | ||
673 | US_FL_NO_READ_CAPACITY_16 ), | ||
674 | |||
668 | /* floppy reports multiple luns */ | 675 | /* floppy reports multiple luns */ |
669 | UNUSUAL_DEV( 0x055d, 0x2020, 0x0000, 0x0210, | 676 | UNUSUAL_DEV( 0x055d, 0x2020, 0x0000, 0x0210, |
670 | "SAMSUNG", | 677 | "SAMSUNG", |
diff --git a/include/linux/usb.h b/include/linux/usb.h index a232b7ece1f6..0eec2689b955 100644 --- a/include/linux/usb.h +++ b/include/linux/usb.h | |||
@@ -367,17 +367,6 @@ struct usb_bus { | |||
367 | 367 | ||
368 | /* ----------------------------------------------------------------------- */ | 368 | /* ----------------------------------------------------------------------- */ |
369 | 369 | ||
370 | /* This is arbitrary. | ||
371 | * From USB 2.0 spec Table 11-13, offset 7, a hub can | ||
372 | * have up to 255 ports. The most yet reported is 10. | ||
373 | * | ||
374 | * Current Wireless USB host hardware (Intel i1480 for example) allows | ||
375 | * up to 22 devices to connect. Upcoming hardware might raise that | ||
376 | * limit. Because the arrays need to add a bit for hub status data, we | ||
377 | * do 31, so plus one evens out to four bytes. | ||
378 | */ | ||
379 | #define USB_MAXCHILDREN (31) | ||
380 | |||
381 | struct usb_tt; | 370 | struct usb_tt; |
382 | 371 | ||
383 | enum usb_device_removable { | 372 | enum usb_device_removable { |
diff --git a/include/uapi/linux/usb/ch11.h b/include/uapi/linux/usb/ch11.h index 7692dc69ccf7..331499d597fa 100644 --- a/include/uapi/linux/usb/ch11.h +++ b/include/uapi/linux/usb/ch11.h | |||
@@ -11,6 +11,17 @@ | |||
11 | 11 | ||
12 | #include <linux/types.h> /* __u8 etc */ | 12 | #include <linux/types.h> /* __u8 etc */ |
13 | 13 | ||
14 | /* This is arbitrary. | ||
15 | * From USB 2.0 spec Table 11-13, offset 7, a hub can | ||
16 | * have up to 255 ports. The most yet reported is 10. | ||
17 | * | ||
18 | * Current Wireless USB host hardware (Intel i1480 for example) allows | ||
19 | * up to 22 devices to connect. Upcoming hardware might raise that | ||
20 | * limit. Because the arrays need to add a bit for hub status data, we | ||
21 | * use 31, so plus one evens out to four bytes. | ||
22 | */ | ||
23 | #define USB_MAXCHILDREN 31 | ||
24 | |||
14 | /* | 25 | /* |
15 | * Hub request types | 26 | * Hub request types |
16 | */ | 27 | */ |