mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-28 09:31:14 +00:00
USB fixes for 3.11-rc3
Here are a number of USB fixes for 3.11-rc3. Lots of little things, nothing major. A number of new device ids, build fixes for DMA, and a bunch of other minor things. All of these have been in the linux-next tree. Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.19 (GNU/Linux) iEYEABECAAYFAlHyp6cACgkQMUfUDdst+ynfQACfb+akG9GYjNpdjkiun0dh2DG2 hDYAoKuhkL1L63vDcIjfFOdZpVKetjPi =71aA -----END PGP SIGNATURE----- Merge tag 'usb-3.11-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb Pull USB fixes from Greg KH: "Here are a number of USB fixes for 3.11-rc3. Lots of little things, nothing major. A number of new device ids, build fixes for DMA, and a bunch of other minor things. All of these have been in the linux-next tree" * tag 'usb-3.11-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb: (40 commits) usb: Clear both buffers when clearing a control transfer TT buffer. usb/gadget: free opts struct on error recovery USB: mos7840: fix memory leak in open usb: serial: option.c: remove ONDA MT825UP product ID fromdriver usb: serial: option: add Olivetti Olicard 200 usb: serial: option: blacklist ONDA MT689DC QMI interface xhci: fix null pointer dereference on ring_doorbell_for_active_rings usb: host: xhci: Enable XHCI_SPURIOUS_SUCCESS for all controllers with xhci 1.0 usb: fix build warning in pci-quirks.h when CONFIG_PCI is not enabled usb: xhci: Mark two functions __maybe_unused xhci: Avoid NULL pointer deref when host dies. usb: serial: option: Add ONYX 3G device support USB: ti_usb_3410_5052: fix dynamic-id matching usb: option: add TP-LINK MA260 USB: option: add D-Link DWM-152/C1 and DWM-156/C1 USB: EHCI: Fix resume signalling on remote wakeup USB: cp210x: add MMB and PI ZigBee USB Device Support usb: cp210x support SEL C662 Vendor/Device USB: option: append Petatel NP10T device to GSM modems list USB: misc: Add Manhattan Hi-Speed USB DVI Converter to sisusbvga ...
This commit is contained in:
commit
db8cbfadcf
33 changed files with 172 additions and 79 deletions
|
@ -668,6 +668,15 @@ resubmit:
|
||||||
static inline int
|
static inline int
|
||||||
hub_clear_tt_buffer (struct usb_device *hdev, u16 devinfo, u16 tt)
|
hub_clear_tt_buffer (struct usb_device *hdev, u16 devinfo, u16 tt)
|
||||||
{
|
{
|
||||||
|
/* Need to clear both directions for control ep */
|
||||||
|
if (((devinfo >> 11) & USB_ENDPOINT_XFERTYPE_MASK) ==
|
||||||
|
USB_ENDPOINT_XFER_CONTROL) {
|
||||||
|
int status = usb_control_msg(hdev, usb_sndctrlpipe(hdev, 0),
|
||||||
|
HUB_CLEAR_TT_BUFFER, USB_RT_PORT,
|
||||||
|
devinfo ^ 0x8000, tt, NULL, 0, 1000);
|
||||||
|
if (status)
|
||||||
|
return status;
|
||||||
|
}
|
||||||
return usb_control_msg(hdev, usb_sndctrlpipe(hdev, 0),
|
return usb_control_msg(hdev, usb_sndctrlpipe(hdev, 0),
|
||||||
HUB_CLEAR_TT_BUFFER, USB_RT_PORT, devinfo,
|
HUB_CLEAR_TT_BUFFER, USB_RT_PORT, devinfo,
|
||||||
tt, NULL, 0, 1000);
|
tt, NULL, 0, 1000);
|
||||||
|
@ -2848,6 +2857,15 @@ static int usb_disable_function_remotewakeup(struct usb_device *udev)
|
||||||
USB_CTRL_SET_TIMEOUT);
|
USB_CTRL_SET_TIMEOUT);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Count of wakeup-enabled devices at or below udev */
|
||||||
|
static unsigned wakeup_enabled_descendants(struct usb_device *udev)
|
||||||
|
{
|
||||||
|
struct usb_hub *hub = usb_hub_to_struct_hub(udev);
|
||||||
|
|
||||||
|
return udev->do_remote_wakeup +
|
||||||
|
(hub ? hub->wakeup_enabled_descendants : 0);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* usb_port_suspend - suspend a usb device's upstream port
|
* usb_port_suspend - suspend a usb device's upstream port
|
||||||
* @udev: device that's no longer in active use, not a root hub
|
* @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)
|
||||||
* Linux (2.6) currently has NO mechanisms to initiate that: no khubd
|
* Linux (2.6) currently has NO mechanisms to initiate that: no khubd
|
||||||
* timer, no SRP, no requests through sysfs.
|
* timer, no SRP, no requests through sysfs.
|
||||||
*
|
*
|
||||||
* If Runtime PM isn't enabled or used, non-SuperSpeed devices really get
|
* If Runtime PM isn't enabled or used, non-SuperSpeed devices may not get
|
||||||
* suspended only when their bus goes into global suspend (i.e., the root
|
* suspended until their bus goes into global suspend (i.e., the root
|
||||||
* hub is suspended). Nevertheless, we change @udev->state to
|
* hub is suspended). Nevertheless, we change @udev->state to
|
||||||
* USB_STATE_SUSPENDED as this is the device's "logical" state. The actual
|
* USB_STATE_SUSPENDED as this is the device's "logical" state. The actual
|
||||||
* upstream port setting is stored in @udev->port_is_suspended.
|
* 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)
|
||||||
/* see 7.1.7.6 */
|
/* see 7.1.7.6 */
|
||||||
if (hub_is_superspeed(hub->hdev))
|
if (hub_is_superspeed(hub->hdev))
|
||||||
status = hub_set_port_link_state(hub, port1, USB_SS_PORT_LS_U3);
|
status = hub_set_port_link_state(hub, port1, USB_SS_PORT_LS_U3);
|
||||||
else if (PMSG_IS_AUTO(msg))
|
|
||||||
status = set_port_feature(hub->hdev, port1,
|
|
||||||
USB_PORT_FEAT_SUSPEND);
|
|
||||||
/*
|
/*
|
||||||
* For system suspend, we do not need to enable the suspend feature
|
* For system suspend, we do not need to enable the suspend feature
|
||||||
* on individual USB-2 ports. The devices will automatically go
|
* on individual USB-2 ports. The devices will automatically go
|
||||||
* into suspend a few ms after the root hub stops sending packets.
|
* into suspend a few ms after the root hub stops sending packets.
|
||||||
* The USB 2.0 spec calls this "global suspend".
|
* The USB 2.0 spec calls this "global suspend".
|
||||||
|
*
|
||||||
|
* However, many USB hubs have a bug: They don't relay wakeup requests
|
||||||
|
* from a downstream port if the port's suspend feature isn't on.
|
||||||
|
* Therefore we will turn on the suspend feature if udev or any of its
|
||||||
|
* descendants is enabled for remote wakeup.
|
||||||
*/
|
*/
|
||||||
|
else if (PMSG_IS_AUTO(msg) || wakeup_enabled_descendants(udev) > 0)
|
||||||
|
status = set_port_feature(hub->hdev, port1,
|
||||||
|
USB_PORT_FEAT_SUSPEND);
|
||||||
else {
|
else {
|
||||||
really_suspend = false;
|
really_suspend = false;
|
||||||
status = 0;
|
status = 0;
|
||||||
|
@ -3003,15 +3027,16 @@ int usb_port_suspend(struct usb_device *udev, pm_message_t msg)
|
||||||
if (!PMSG_IS_AUTO(msg))
|
if (!PMSG_IS_AUTO(msg))
|
||||||
status = 0;
|
status = 0;
|
||||||
} else {
|
} else {
|
||||||
/* device has up to 10 msec to fully suspend */
|
|
||||||
dev_dbg(&udev->dev, "usb %ssuspend, wakeup %d\n",
|
dev_dbg(&udev->dev, "usb %ssuspend, wakeup %d\n",
|
||||||
(PMSG_IS_AUTO(msg) ? "auto-" : ""),
|
(PMSG_IS_AUTO(msg) ? "auto-" : ""),
|
||||||
udev->do_remote_wakeup);
|
udev->do_remote_wakeup);
|
||||||
usb_set_device_state(udev, USB_STATE_SUSPENDED);
|
|
||||||
if (really_suspend) {
|
if (really_suspend) {
|
||||||
udev->port_is_suspended = 1;
|
udev->port_is_suspended = 1;
|
||||||
|
|
||||||
|
/* device has up to 10 msec to fully suspend */
|
||||||
msleep(10);
|
msleep(10);
|
||||||
}
|
}
|
||||||
|
usb_set_device_state(udev, USB_STATE_SUSPENDED);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -3293,7 +3318,11 @@ static int hub_suspend(struct usb_interface *intf, pm_message_t msg)
|
||||||
unsigned port1;
|
unsigned port1;
|
||||||
int status;
|
int status;
|
||||||
|
|
||||||
/* Warn if children aren't already suspended */
|
/*
|
||||||
|
* Warn if children aren't already suspended.
|
||||||
|
* Also, add up the number of wakeup-enabled descendants.
|
||||||
|
*/
|
||||||
|
hub->wakeup_enabled_descendants = 0;
|
||||||
for (port1 = 1; port1 <= hdev->maxchild; port1++) {
|
for (port1 = 1; port1 <= hdev->maxchild; port1++) {
|
||||||
struct usb_device *udev;
|
struct usb_device *udev;
|
||||||
|
|
||||||
|
@ -3303,6 +3332,9 @@ static int hub_suspend(struct usb_interface *intf, pm_message_t msg)
|
||||||
if (PMSG_IS_AUTO(msg))
|
if (PMSG_IS_AUTO(msg))
|
||||||
return -EBUSY;
|
return -EBUSY;
|
||||||
}
|
}
|
||||||
|
if (udev)
|
||||||
|
hub->wakeup_enabled_descendants +=
|
||||||
|
wakeup_enabled_descendants(udev);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (hdev->do_remote_wakeup && hub->quirk_check_port_auto_suspend) {
|
if (hdev->do_remote_wakeup && hub->quirk_check_port_auto_suspend) {
|
||||||
|
|
|
@ -59,6 +59,9 @@ struct usb_hub {
|
||||||
struct usb_tt tt; /* Transaction Translator */
|
struct usb_tt tt; /* Transaction Translator */
|
||||||
|
|
||||||
unsigned mA_per_port; /* current for each child */
|
unsigned mA_per_port; /* current for each child */
|
||||||
|
#ifdef CONFIG_PM
|
||||||
|
unsigned wakeup_enabled_descendants;
|
||||||
|
#endif
|
||||||
|
|
||||||
unsigned limited_power:1;
|
unsigned limited_power:1;
|
||||||
unsigned quiescing:1;
|
unsigned quiescing:1;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
config USB_DWC3
|
config USB_DWC3
|
||||||
tristate "DesignWare USB3 DRD Core Support"
|
tristate "DesignWare USB3 DRD Core Support"
|
||||||
depends on (USB || USB_GADGET) && GENERIC_HARDIRQS
|
depends on (USB || USB_GADGET) && GENERIC_HARDIRQS && HAS_DMA
|
||||||
select USB_XHCI_PLATFORM if USB_SUPPORT && USB_XHCI_HCD
|
select USB_XHCI_PLATFORM if USB_SUPPORT && USB_XHCI_HCD
|
||||||
help
|
help
|
||||||
Say Y or M here if your system has a Dual Role SuperSpeed
|
Say Y or M here if your system has a Dual Role SuperSpeed
|
||||||
|
|
|
@ -450,7 +450,7 @@ static int dwc3_probe(struct platform_device *pdev)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (IS_ERR(dwc->usb3_phy)) {
|
if (IS_ERR(dwc->usb3_phy)) {
|
||||||
ret = PTR_ERR(dwc->usb2_phy);
|
ret = PTR_ERR(dwc->usb3_phy);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* if -ENXIO is returned, it means PHY layer wasn't
|
* if -ENXIO is returned, it means PHY layer wasn't
|
||||||
|
|
|
@ -759,8 +759,8 @@ struct dwc3 {
|
||||||
|
|
||||||
struct dwc3_event_type {
|
struct dwc3_event_type {
|
||||||
u32 is_devspec:1;
|
u32 is_devspec:1;
|
||||||
u32 type:6;
|
u32 type:7;
|
||||||
u32 reserved8_31:25;
|
u32 reserved8_31:24;
|
||||||
} __packed;
|
} __packed;
|
||||||
|
|
||||||
#define DWC3_DEPEVT_XFERCOMPLETE 0x01
|
#define DWC3_DEPEVT_XFERCOMPLETE 0x01
|
||||||
|
|
|
@ -1584,6 +1584,7 @@ err1:
|
||||||
__dwc3_gadget_ep_disable(dwc->eps[0]);
|
__dwc3_gadget_ep_disable(dwc->eps[0]);
|
||||||
|
|
||||||
err0:
|
err0:
|
||||||
|
dwc->gadget_driver = NULL;
|
||||||
spin_unlock_irqrestore(&dwc->lock, flags);
|
spin_unlock_irqrestore(&dwc->lock, flags);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
|
|
@ -193,6 +193,7 @@ config USB_FUSB300
|
||||||
Faraday usb device controller FUSB300 driver
|
Faraday usb device controller FUSB300 driver
|
||||||
|
|
||||||
config USB_FOTG210_UDC
|
config USB_FOTG210_UDC
|
||||||
|
depends on HAS_DMA
|
||||||
tristate "Faraday FOTG210 USB Peripheral Controller"
|
tristate "Faraday FOTG210 USB Peripheral Controller"
|
||||||
help
|
help
|
||||||
Faraday USB2.0 OTG controller which can be configured as
|
Faraday USB2.0 OTG controller which can be configured as
|
||||||
|
@ -328,13 +329,14 @@ config USB_S3C_HSUDC
|
||||||
|
|
||||||
config USB_MV_UDC
|
config USB_MV_UDC
|
||||||
tristate "Marvell USB2.0 Device Controller"
|
tristate "Marvell USB2.0 Device Controller"
|
||||||
depends on GENERIC_HARDIRQS
|
depends on GENERIC_HARDIRQS && HAS_DMA
|
||||||
help
|
help
|
||||||
Marvell Socs (including PXA and MMP series) include a high speed
|
Marvell Socs (including PXA and MMP series) include a high speed
|
||||||
USB2.0 OTG controller, which can be configured as high speed or
|
USB2.0 OTG controller, which can be configured as high speed or
|
||||||
full speed USB peripheral.
|
full speed USB peripheral.
|
||||||
|
|
||||||
config USB_MV_U3D
|
config USB_MV_U3D
|
||||||
|
depends on HAS_DMA
|
||||||
tristate "MARVELL PXA2128 USB 3.0 controller"
|
tristate "MARVELL PXA2128 USB 3.0 controller"
|
||||||
help
|
help
|
||||||
MARVELL PXA2128 Processor series include a super speed USB3.0 device
|
MARVELL PXA2128 Processor series include a super speed USB3.0 device
|
||||||
|
@ -639,6 +641,7 @@ config USB_CONFIGFS_RNDIS
|
||||||
depends on USB_CONFIGFS
|
depends on USB_CONFIGFS
|
||||||
depends on NET
|
depends on NET
|
||||||
select USB_U_ETHER
|
select USB_U_ETHER
|
||||||
|
select USB_U_RNDIS
|
||||||
select USB_F_RNDIS
|
select USB_F_RNDIS
|
||||||
help
|
help
|
||||||
Microsoft Windows XP bundles the "Remote NDIS" (RNDIS) protocol,
|
Microsoft Windows XP bundles the "Remote NDIS" (RNDIS) protocol,
|
||||||
|
|
|
@ -870,8 +870,8 @@ static void clk_on(struct at91_udc *udc)
|
||||||
if (udc->clocked)
|
if (udc->clocked)
|
||||||
return;
|
return;
|
||||||
udc->clocked = 1;
|
udc->clocked = 1;
|
||||||
clk_enable(udc->iclk);
|
clk_prepare_enable(udc->iclk);
|
||||||
clk_enable(udc->fclk);
|
clk_prepare_enable(udc->fclk);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void clk_off(struct at91_udc *udc)
|
static void clk_off(struct at91_udc *udc)
|
||||||
|
@ -880,8 +880,8 @@ static void clk_off(struct at91_udc *udc)
|
||||||
return;
|
return;
|
||||||
udc->clocked = 0;
|
udc->clocked = 0;
|
||||||
udc->gadget.speed = USB_SPEED_UNKNOWN;
|
udc->gadget.speed = USB_SPEED_UNKNOWN;
|
||||||
clk_disable(udc->fclk);
|
clk_disable_unprepare(udc->fclk);
|
||||||
clk_disable(udc->iclk);
|
clk_disable_unprepare(udc->iclk);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1725,7 +1725,7 @@ static int at91udc_probe(struct platform_device *pdev)
|
||||||
/* init software state */
|
/* init software state */
|
||||||
udc = &controller;
|
udc = &controller;
|
||||||
udc->gadget.dev.parent = dev;
|
udc->gadget.dev.parent = dev;
|
||||||
if (pdev->dev.of_node)
|
if (IS_ENABLED(CONFIG_OF) && pdev->dev.of_node)
|
||||||
at91udc_of_init(udc, pdev->dev.of_node);
|
at91udc_of_init(udc, pdev->dev.of_node);
|
||||||
else
|
else
|
||||||
memcpy(&udc->board, dev->platform_data,
|
memcpy(&udc->board, dev->platform_data,
|
||||||
|
@ -1782,12 +1782,14 @@ static int at91udc_probe(struct platform_device *pdev)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* don't do anything until we have both gadget driver and VBUS */
|
/* don't do anything until we have both gadget driver and VBUS */
|
||||||
clk_enable(udc->iclk);
|
retval = clk_prepare_enable(udc->iclk);
|
||||||
|
if (retval)
|
||||||
|
goto fail1;
|
||||||
at91_udp_write(udc, AT91_UDP_TXVC, AT91_UDP_TXVC_TXVDIS);
|
at91_udp_write(udc, AT91_UDP_TXVC, AT91_UDP_TXVC_TXVDIS);
|
||||||
at91_udp_write(udc, AT91_UDP_IDR, 0xffffffff);
|
at91_udp_write(udc, AT91_UDP_IDR, 0xffffffff);
|
||||||
/* Clear all pending interrupts - UDP may be used by bootloader. */
|
/* Clear all pending interrupts - UDP may be used by bootloader. */
|
||||||
at91_udp_write(udc, AT91_UDP_ICR, 0xffffffff);
|
at91_udp_write(udc, AT91_UDP_ICR, 0xffffffff);
|
||||||
clk_disable(udc->iclk);
|
clk_disable_unprepare(udc->iclk);
|
||||||
|
|
||||||
/* request UDC and maybe VBUS irqs */
|
/* request UDC and maybe VBUS irqs */
|
||||||
udc->udp_irq = platform_get_irq(pdev, 0);
|
udc->udp_irq = platform_get_irq(pdev, 0);
|
||||||
|
|
|
@ -959,8 +959,11 @@ static struct usb_function_instance *ecm_alloc_inst(void)
|
||||||
mutex_init(&opts->lock);
|
mutex_init(&opts->lock);
|
||||||
opts->func_inst.free_func_inst = ecm_free_inst;
|
opts->func_inst.free_func_inst = ecm_free_inst;
|
||||||
opts->net = gether_setup_default();
|
opts->net = gether_setup_default();
|
||||||
if (IS_ERR(opts->net))
|
if (IS_ERR(opts->net)) {
|
||||||
return ERR_PTR(PTR_ERR(opts->net));
|
struct net_device *net = opts->net;
|
||||||
|
kfree(opts);
|
||||||
|
return ERR_CAST(net);
|
||||||
|
}
|
||||||
|
|
||||||
config_group_init_type_name(&opts->func_inst.group, "", &ecm_func_type);
|
config_group_init_type_name(&opts->func_inst.group, "", &ecm_func_type);
|
||||||
|
|
||||||
|
|
|
@ -593,8 +593,11 @@ static struct usb_function_instance *eem_alloc_inst(void)
|
||||||
mutex_init(&opts->lock);
|
mutex_init(&opts->lock);
|
||||||
opts->func_inst.free_func_inst = eem_free_inst;
|
opts->func_inst.free_func_inst = eem_free_inst;
|
||||||
opts->net = gether_setup_default();
|
opts->net = gether_setup_default();
|
||||||
if (IS_ERR(opts->net))
|
if (IS_ERR(opts->net)) {
|
||||||
return ERR_CAST(opts->net);
|
struct net_device *net = opts->net;
|
||||||
|
kfree(opts);
|
||||||
|
return ERR_CAST(net);
|
||||||
|
}
|
||||||
|
|
||||||
config_group_init_type_name(&opts->func_inst.group, "", &eem_func_type);
|
config_group_init_type_name(&opts->func_inst.group, "", &eem_func_type);
|
||||||
|
|
||||||
|
|
|
@ -1350,8 +1350,11 @@ static struct usb_function_instance *ncm_alloc_inst(void)
|
||||||
mutex_init(&opts->lock);
|
mutex_init(&opts->lock);
|
||||||
opts->func_inst.free_func_inst = ncm_free_inst;
|
opts->func_inst.free_func_inst = ncm_free_inst;
|
||||||
opts->net = gether_setup_default();
|
opts->net = gether_setup_default();
|
||||||
if (IS_ERR(opts->net))
|
if (IS_ERR(opts->net)) {
|
||||||
return ERR_PTR(PTR_ERR(opts->net));
|
struct net_device *net = opts->net;
|
||||||
|
kfree(opts);
|
||||||
|
return ERR_CAST(net);
|
||||||
|
}
|
||||||
|
|
||||||
config_group_init_type_name(&opts->func_inst.group, "", &ncm_func_type);
|
config_group_init_type_name(&opts->func_inst.group, "", &ncm_func_type);
|
||||||
|
|
||||||
|
|
|
@ -656,8 +656,11 @@ static struct usb_function_instance *phonet_alloc_inst(void)
|
||||||
|
|
||||||
opts->func_inst.free_func_inst = phonet_free_inst;
|
opts->func_inst.free_func_inst = phonet_free_inst;
|
||||||
opts->net = gphonet_setup_default();
|
opts->net = gphonet_setup_default();
|
||||||
if (IS_ERR(opts->net))
|
if (IS_ERR(opts->net)) {
|
||||||
return ERR_PTR(PTR_ERR(opts->net));
|
struct net_device *net = opts->net;
|
||||||
|
kfree(opts);
|
||||||
|
return ERR_CAST(net);
|
||||||
|
}
|
||||||
|
|
||||||
config_group_init_type_name(&opts->func_inst.group, "",
|
config_group_init_type_name(&opts->func_inst.group, "",
|
||||||
&phonet_func_type);
|
&phonet_func_type);
|
||||||
|
|
|
@ -963,8 +963,11 @@ static struct usb_function_instance *rndis_alloc_inst(void)
|
||||||
mutex_init(&opts->lock);
|
mutex_init(&opts->lock);
|
||||||
opts->func_inst.free_func_inst = rndis_free_inst;
|
opts->func_inst.free_func_inst = rndis_free_inst;
|
||||||
opts->net = gether_setup_default();
|
opts->net = gether_setup_default();
|
||||||
if (IS_ERR(opts->net))
|
if (IS_ERR(opts->net)) {
|
||||||
return ERR_CAST(opts->net);
|
struct net_device *net = opts->net;
|
||||||
|
kfree(opts);
|
||||||
|
return ERR_CAST(net);
|
||||||
|
}
|
||||||
|
|
||||||
config_group_init_type_name(&opts->func_inst.group, "",
|
config_group_init_type_name(&opts->func_inst.group, "",
|
||||||
&rndis_func_type);
|
&rndis_func_type);
|
||||||
|
|
|
@ -505,8 +505,11 @@ static struct usb_function_instance *geth_alloc_inst(void)
|
||||||
mutex_init(&opts->lock);
|
mutex_init(&opts->lock);
|
||||||
opts->func_inst.free_func_inst = geth_free_inst;
|
opts->func_inst.free_func_inst = geth_free_inst;
|
||||||
opts->net = gether_setup_default();
|
opts->net = gether_setup_default();
|
||||||
if (IS_ERR(opts->net))
|
if (IS_ERR(opts->net)) {
|
||||||
return ERR_CAST(opts->net);
|
struct net_device *net = opts->net;
|
||||||
|
kfree(opts);
|
||||||
|
return ERR_CAST(net);
|
||||||
|
}
|
||||||
|
|
||||||
config_group_init_type_name(&opts->func_inst.group, "",
|
config_group_init_type_name(&opts->func_inst.group, "",
|
||||||
&gether_func_type);
|
&gether_func_type);
|
||||||
|
|
|
@ -1074,7 +1074,7 @@ static struct usb_gadget_ops fotg210_gadget_ops = {
|
||||||
.udc_stop = fotg210_udc_stop,
|
.udc_stop = fotg210_udc_stop,
|
||||||
};
|
};
|
||||||
|
|
||||||
static int __exit fotg210_udc_remove(struct platform_device *pdev)
|
static int fotg210_udc_remove(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
struct fotg210_udc *fotg210 = dev_get_drvdata(&pdev->dev);
|
struct fotg210_udc *fotg210 = dev_get_drvdata(&pdev->dev);
|
||||||
|
|
||||||
|
@ -1088,7 +1088,7 @@ static int __exit fotg210_udc_remove(struct platform_device *pdev)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __init fotg210_udc_probe(struct platform_device *pdev)
|
static int fotg210_udc_probe(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
struct resource *res, *ires;
|
struct resource *res, *ires;
|
||||||
struct fotg210_udc *fotg210 = NULL;
|
struct fotg210_udc *fotg210 = NULL;
|
||||||
|
|
|
@ -1776,7 +1776,7 @@ static int mv_u3d_remove(struct platform_device *dev)
|
||||||
kfree(u3d->eps);
|
kfree(u3d->eps);
|
||||||
|
|
||||||
if (u3d->irq)
|
if (u3d->irq)
|
||||||
free_irq(u3d->irq, &dev->dev);
|
free_irq(u3d->irq, u3d);
|
||||||
|
|
||||||
if (u3d->cap_regs)
|
if (u3d->cap_regs)
|
||||||
iounmap(u3d->cap_regs);
|
iounmap(u3d->cap_regs);
|
||||||
|
@ -1974,7 +1974,7 @@ static int mv_u3d_probe(struct platform_device *dev)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
err_unregister:
|
err_unregister:
|
||||||
free_irq(u3d->irq, &dev->dev);
|
free_irq(u3d->irq, u3d);
|
||||||
err_request_irq:
|
err_request_irq:
|
||||||
err_get_irq:
|
err_get_irq:
|
||||||
kfree(u3d->status_req);
|
kfree(u3d->status_req);
|
||||||
|
|
|
@ -50,6 +50,8 @@ static DEFINE_MUTEX(udc_lock);
|
||||||
|
|
||||||
/* ------------------------------------------------------------------------- */
|
/* ------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
#ifdef CONFIG_HAS_DMA
|
||||||
|
|
||||||
int usb_gadget_map_request(struct usb_gadget *gadget,
|
int usb_gadget_map_request(struct usb_gadget *gadget,
|
||||||
struct usb_request *req, int is_in)
|
struct usb_request *req, int is_in)
|
||||||
{
|
{
|
||||||
|
@ -99,6 +101,8 @@ void usb_gadget_unmap_request(struct usb_gadget *gadget,
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(usb_gadget_unmap_request);
|
EXPORT_SYMBOL_GPL(usb_gadget_unmap_request);
|
||||||
|
|
||||||
|
#endif /* CONFIG_HAS_DMA */
|
||||||
|
|
||||||
/* ------------------------------------------------------------------------- */
|
/* ------------------------------------------------------------------------- */
|
||||||
|
|
||||||
void usb_gadget_set_state(struct usb_gadget *gadget,
|
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,
|
||||||
dev_set_name(&gadget->dev, "gadget");
|
dev_set_name(&gadget->dev, "gadget");
|
||||||
gadget->dev.parent = parent;
|
gadget->dev.parent = parent;
|
||||||
|
|
||||||
|
#ifdef CONFIG_HAS_DMA
|
||||||
dma_set_coherent_mask(&gadget->dev, parent->coherent_dma_mask);
|
dma_set_coherent_mask(&gadget->dev, parent->coherent_dma_mask);
|
||||||
gadget->dev.dma_parms = parent->dma_parms;
|
gadget->dev.dma_parms = parent->dma_parms;
|
||||||
gadget->dev.dma_mask = parent->dma_mask;
|
gadget->dev.dma_mask = parent->dma_mask;
|
||||||
|
#endif
|
||||||
|
|
||||||
if (release)
|
if (release)
|
||||||
gadget->dev.release = release;
|
gadget->dev.release = release;
|
||||||
|
|
|
@ -874,6 +874,7 @@ static int ehci_hub_control (
|
||||||
ehci->reset_done[wIndex] = jiffies
|
ehci->reset_done[wIndex] = jiffies
|
||||||
+ msecs_to_jiffies(20);
|
+ msecs_to_jiffies(20);
|
||||||
usb_hcd_start_port_resume(&hcd->self, wIndex);
|
usb_hcd_start_port_resume(&hcd->self, wIndex);
|
||||||
|
set_bit(wIndex, &ehci->resuming_ports);
|
||||||
/* check the port again */
|
/* check the port again */
|
||||||
mod_timer(&ehci_to_hcd(ehci)->rh_timer,
|
mod_timer(&ehci_to_hcd(ehci)->rh_timer,
|
||||||
ehci->reset_done[wIndex]);
|
ehci->reset_done[wIndex]);
|
||||||
|
|
|
@ -13,6 +13,7 @@ void usb_enable_xhci_ports(struct pci_dev *xhci_pdev);
|
||||||
void usb_disable_xhci_ports(struct pci_dev *xhci_pdev);
|
void usb_disable_xhci_ports(struct pci_dev *xhci_pdev);
|
||||||
void sb800_prefetch(struct device *dev, int on);
|
void sb800_prefetch(struct device *dev, int on);
|
||||||
#else
|
#else
|
||||||
|
struct pci_dev;
|
||||||
static inline void usb_amd_quirk_pll_disable(void) {}
|
static inline void usb_amd_quirk_pll_disable(void) {}
|
||||||
static inline void usb_amd_quirk_pll_enable(void) {}
|
static inline void usb_amd_quirk_pll_enable(void) {}
|
||||||
static inline void usb_amd_dev_put(void) {}
|
static inline void usb_amd_dev_put(void) {}
|
||||||
|
|
|
@ -93,7 +93,6 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci)
|
||||||
}
|
}
|
||||||
if (pdev->vendor == PCI_VENDOR_ID_INTEL &&
|
if (pdev->vendor == PCI_VENDOR_ID_INTEL &&
|
||||||
pdev->device == PCI_DEVICE_ID_INTEL_PANTHERPOINT_XHCI) {
|
pdev->device == PCI_DEVICE_ID_INTEL_PANTHERPOINT_XHCI) {
|
||||||
xhci->quirks |= XHCI_SPURIOUS_SUCCESS;
|
|
||||||
xhci->quirks |= XHCI_EP_LIMIT_QUIRK;
|
xhci->quirks |= XHCI_EP_LIMIT_QUIRK;
|
||||||
xhci->limit_active_eps = 64;
|
xhci->limit_active_eps = 64;
|
||||||
xhci->quirks |= XHCI_SW_BW_CHECKING;
|
xhci->quirks |= XHCI_SW_BW_CHECKING;
|
||||||
|
|
|
@ -434,7 +434,7 @@ static void ring_doorbell_for_active_rings(struct xhci_hcd *xhci,
|
||||||
|
|
||||||
/* A ring has pending URBs if its TD list is not empty */
|
/* A ring has pending URBs if its TD list is not empty */
|
||||||
if (!(ep->ep_state & EP_HAS_STREAMS)) {
|
if (!(ep->ep_state & EP_HAS_STREAMS)) {
|
||||||
if (!(list_empty(&ep->ring->td_list)))
|
if (ep->ring && !(list_empty(&ep->ring->td_list)))
|
||||||
xhci_ring_ep_doorbell(xhci, slot_id, ep_index, 0);
|
xhci_ring_ep_doorbell(xhci, slot_id, ep_index, 0);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -329,7 +329,7 @@ static void xhci_cleanup_msix(struct xhci_hcd *xhci)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void xhci_msix_sync_irqs(struct xhci_hcd *xhci)
|
static void __maybe_unused xhci_msix_sync_irqs(struct xhci_hcd *xhci)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
@ -1181,9 +1181,6 @@ static int xhci_check_args(struct usb_hcd *hcd, struct usb_device *udev,
|
||||||
}
|
}
|
||||||
|
|
||||||
xhci = hcd_to_xhci(hcd);
|
xhci = hcd_to_xhci(hcd);
|
||||||
if (xhci->xhc_state & XHCI_STATE_HALTED)
|
|
||||||
return -ENODEV;
|
|
||||||
|
|
||||||
if (check_virt_dev) {
|
if (check_virt_dev) {
|
||||||
if (!udev->slot_id || !xhci->devs[udev->slot_id]) {
|
if (!udev->slot_id || !xhci->devs[udev->slot_id]) {
|
||||||
printk(KERN_DEBUG "xHCI %s called with unaddressed "
|
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,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (xhci->xhc_state & XHCI_STATE_HALTED)
|
||||||
|
return -ENODEV;
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3898,7 +3898,7 @@ int xhci_find_raw_port_number(struct usb_hcd *hcd, int port1)
|
||||||
* Issue an Evaluate Context command to change the Maximum Exit Latency in the
|
* Issue an Evaluate Context command to change the Maximum Exit Latency in the
|
||||||
* slot context. If that succeeds, store the new MEL in the xhci_virt_device.
|
* slot context. If that succeeds, store the new MEL in the xhci_virt_device.
|
||||||
*/
|
*/
|
||||||
static int xhci_change_max_exit_latency(struct xhci_hcd *xhci,
|
static int __maybe_unused xhci_change_max_exit_latency(struct xhci_hcd *xhci,
|
||||||
struct usb_device *udev, u16 max_exit_latency)
|
struct usb_device *udev, u16 max_exit_latency)
|
||||||
{
|
{
|
||||||
struct xhci_virt_device *virt_dev;
|
struct xhci_virt_device *virt_dev;
|
||||||
|
@ -4892,6 +4892,13 @@ int xhci_gen_setup(struct usb_hcd *hcd, xhci_get_quirks_t get_quirks)
|
||||||
|
|
||||||
get_quirks(dev, xhci);
|
get_quirks(dev, xhci);
|
||||||
|
|
||||||
|
/* In xhci controllers which follow xhci 1.0 spec gives a spurious
|
||||||
|
* success event after a short transfer. This quirk will ignore such
|
||||||
|
* spurious event.
|
||||||
|
*/
|
||||||
|
if (xhci->hci_version > 0x96)
|
||||||
|
xhci->quirks |= XHCI_SPURIOUS_SUCCESS;
|
||||||
|
|
||||||
/* Make sure the HC is halted. */
|
/* Make sure the HC is halted. */
|
||||||
retval = xhci_halt(xhci);
|
retval = xhci_halt(xhci);
|
||||||
if (retval)
|
if (retval)
|
||||||
|
|
|
@ -3247,6 +3247,7 @@ static const struct usb_device_id sisusb_table[] = {
|
||||||
{ USB_DEVICE(0x0711, 0x0903) },
|
{ USB_DEVICE(0x0711, 0x0903) },
|
||||||
{ USB_DEVICE(0x0711, 0x0918) },
|
{ USB_DEVICE(0x0711, 0x0918) },
|
||||||
{ USB_DEVICE(0x0711, 0x0920) },
|
{ USB_DEVICE(0x0711, 0x0920) },
|
||||||
|
{ USB_DEVICE(0x0711, 0x0950) },
|
||||||
{ USB_DEVICE(0x182d, 0x021c) },
|
{ USB_DEVICE(0x182d, 0x021c) },
|
||||||
{ USB_DEVICE(0x182d, 0x0269) },
|
{ USB_DEVICE(0x182d, 0x0269) },
|
||||||
{ }
|
{ }
|
||||||
|
|
|
@ -71,9 +71,9 @@ static struct usb_dpll_params omap_usb3_dpll_params[NUM_SYS_CLKS] = {
|
||||||
{1250, 5, 4, 20, 0}, /* 12 MHz */
|
{1250, 5, 4, 20, 0}, /* 12 MHz */
|
||||||
{3125, 20, 4, 20, 0}, /* 16.8 MHz */
|
{3125, 20, 4, 20, 0}, /* 16.8 MHz */
|
||||||
{1172, 8, 4, 20, 65537}, /* 19.2 MHz */
|
{1172, 8, 4, 20, 65537}, /* 19.2 MHz */
|
||||||
|
{1000, 7, 4, 10, 0}, /* 20 MHz */
|
||||||
{1250, 12, 4, 20, 0}, /* 26 MHz */
|
{1250, 12, 4, 20, 0}, /* 26 MHz */
|
||||||
{3125, 47, 4, 20, 92843}, /* 38.4 MHz */
|
{3125, 47, 4, 20, 92843}, /* 38.4 MHz */
|
||||||
{1000, 7, 4, 10, 0}, /* 20 MHz */
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -388,7 +388,7 @@ static int samsung_usb2phy_probe(struct platform_device *pdev)
|
||||||
clk = devm_clk_get(dev, "otg");
|
clk = devm_clk_get(dev, "otg");
|
||||||
|
|
||||||
if (IS_ERR(clk)) {
|
if (IS_ERR(clk)) {
|
||||||
dev_err(dev, "Failed to get otg clock\n");
|
dev_err(dev, "Failed to get usbhost/otg clock\n");
|
||||||
return PTR_ERR(clk);
|
return PTR_ERR(clk);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -855,10 +855,6 @@ static int usbhsg_gadget_stop(struct usb_gadget *gadget,
|
||||||
struct usbhsg_gpriv *gpriv = usbhsg_gadget_to_gpriv(gadget);
|
struct usbhsg_gpriv *gpriv = usbhsg_gadget_to_gpriv(gadget);
|
||||||
struct usbhs_priv *priv = usbhsg_gpriv_to_priv(gpriv);
|
struct usbhs_priv *priv = usbhsg_gpriv_to_priv(gpriv);
|
||||||
|
|
||||||
if (!driver ||
|
|
||||||
!driver->unbind)
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
usbhsg_try_stop(priv, USBHSG_STATUS_REGISTERD);
|
usbhsg_try_stop(priv, USBHSG_STATUS_REGISTERD);
|
||||||
gpriv->driver = NULL;
|
gpriv->driver = NULL;
|
||||||
|
|
||||||
|
|
|
@ -53,6 +53,7 @@ static const struct usb_device_id id_table[] = {
|
||||||
{ USB_DEVICE(0x0489, 0xE000) }, /* Pirelli Broadband S.p.A, DP-L10 SIP/GSM Mobile */
|
{ USB_DEVICE(0x0489, 0xE000) }, /* Pirelli Broadband S.p.A, DP-L10 SIP/GSM Mobile */
|
||||||
{ USB_DEVICE(0x0489, 0xE003) }, /* Pirelli Broadband S.p.A, DP-L10 SIP/GSM Mobile */
|
{ USB_DEVICE(0x0489, 0xE003) }, /* Pirelli Broadband S.p.A, DP-L10 SIP/GSM Mobile */
|
||||||
{ USB_DEVICE(0x0745, 0x1000) }, /* CipherLab USB CCD Barcode Scanner 1000 */
|
{ USB_DEVICE(0x0745, 0x1000) }, /* CipherLab USB CCD Barcode Scanner 1000 */
|
||||||
|
{ USB_DEVICE(0x0846, 0x1100) }, /* NetGear Managed Switch M4100 series, M5300 series, M7100 series */
|
||||||
{ USB_DEVICE(0x08e6, 0x5501) }, /* Gemalto Prox-PU/CU contactless smartcard reader */
|
{ USB_DEVICE(0x08e6, 0x5501) }, /* Gemalto Prox-PU/CU contactless smartcard reader */
|
||||||
{ USB_DEVICE(0x08FD, 0x000A) }, /* Digianswer A/S , ZigBee/802.15.4 MAC Device */
|
{ USB_DEVICE(0x08FD, 0x000A) }, /* Digianswer A/S , ZigBee/802.15.4 MAC Device */
|
||||||
{ USB_DEVICE(0x0BED, 0x1100) }, /* MEI (TM) Cashflow-SC Bill/Voucher Acceptor */
|
{ USB_DEVICE(0x0BED, 0x1100) }, /* MEI (TM) Cashflow-SC Bill/Voucher Acceptor */
|
||||||
|
@ -118,6 +119,8 @@ static const struct usb_device_id id_table[] = {
|
||||||
{ USB_DEVICE(0x10C4, 0x85F8) }, /* Virtenio Preon32 */
|
{ USB_DEVICE(0x10C4, 0x85F8) }, /* Virtenio Preon32 */
|
||||||
{ USB_DEVICE(0x10C4, 0x8664) }, /* AC-Services CAN-IF */
|
{ USB_DEVICE(0x10C4, 0x8664) }, /* AC-Services CAN-IF */
|
||||||
{ USB_DEVICE(0x10C4, 0x8665) }, /* AC-Services OBD-IF */
|
{ USB_DEVICE(0x10C4, 0x8665) }, /* AC-Services OBD-IF */
|
||||||
|
{ USB_DEVICE(0x10C4, 0x88A4) }, /* MMB Networks ZigBee USB Device */
|
||||||
|
{ USB_DEVICE(0x10C4, 0x88A5) }, /* Planet Innovation Ingeni ZigBee USB Device */
|
||||||
{ USB_DEVICE(0x10C4, 0xEA60) }, /* Silicon Labs factory default */
|
{ USB_DEVICE(0x10C4, 0xEA60) }, /* Silicon Labs factory default */
|
||||||
{ USB_DEVICE(0x10C4, 0xEA61) }, /* Silicon Labs factory default */
|
{ USB_DEVICE(0x10C4, 0xEA61) }, /* Silicon Labs factory default */
|
||||||
{ USB_DEVICE(0x10C4, 0xEA70) }, /* Silicon Labs factory default */
|
{ USB_DEVICE(0x10C4, 0xEA70) }, /* Silicon Labs factory default */
|
||||||
|
@ -148,6 +151,7 @@ static const struct usb_device_id id_table[] = {
|
||||||
{ USB_DEVICE(0x17F4, 0xAAAA) }, /* Wavesense Jazz blood glucose meter */
|
{ USB_DEVICE(0x17F4, 0xAAAA) }, /* Wavesense Jazz blood glucose meter */
|
||||||
{ USB_DEVICE(0x1843, 0x0200) }, /* Vaisala USB Instrument Cable */
|
{ USB_DEVICE(0x1843, 0x0200) }, /* Vaisala USB Instrument Cable */
|
||||||
{ USB_DEVICE(0x18EF, 0xE00F) }, /* ELV USB-I2C-Interface */
|
{ USB_DEVICE(0x18EF, 0xE00F) }, /* ELV USB-I2C-Interface */
|
||||||
|
{ USB_DEVICE(0x1ADB, 0x0001) }, /* Schweitzer Engineering C662 Cable */
|
||||||
{ USB_DEVICE(0x1BE3, 0x07A6) }, /* WAGO 750-923 USB Service Cable */
|
{ USB_DEVICE(0x1BE3, 0x07A6) }, /* WAGO 750-923 USB Service Cable */
|
||||||
{ USB_DEVICE(0x1E29, 0x0102) }, /* Festo CPX-USB */
|
{ USB_DEVICE(0x1E29, 0x0102) }, /* Festo CPX-USB */
|
||||||
{ USB_DEVICE(0x1E29, 0x0501) }, /* Festo CMSP */
|
{ USB_DEVICE(0x1E29, 0x0501) }, /* Festo CMSP */
|
||||||
|
|
|
@ -905,20 +905,20 @@ static int mos7840_open(struct tty_struct *tty, struct usb_serial_port *port)
|
||||||
status = mos7840_get_reg_sync(port, mos7840_port->SpRegOffset, &Data);
|
status = mos7840_get_reg_sync(port, mos7840_port->SpRegOffset, &Data);
|
||||||
if (status < 0) {
|
if (status < 0) {
|
||||||
dev_dbg(&port->dev, "Reading Spreg failed\n");
|
dev_dbg(&port->dev, "Reading Spreg failed\n");
|
||||||
return -1;
|
goto err;
|
||||||
}
|
}
|
||||||
Data |= 0x80;
|
Data |= 0x80;
|
||||||
status = mos7840_set_reg_sync(port, mos7840_port->SpRegOffset, Data);
|
status = mos7840_set_reg_sync(port, mos7840_port->SpRegOffset, Data);
|
||||||
if (status < 0) {
|
if (status < 0) {
|
||||||
dev_dbg(&port->dev, "writing Spreg failed\n");
|
dev_dbg(&port->dev, "writing Spreg failed\n");
|
||||||
return -1;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
Data &= ~0x80;
|
Data &= ~0x80;
|
||||||
status = mos7840_set_reg_sync(port, mos7840_port->SpRegOffset, Data);
|
status = mos7840_set_reg_sync(port, mos7840_port->SpRegOffset, Data);
|
||||||
if (status < 0) {
|
if (status < 0) {
|
||||||
dev_dbg(&port->dev, "writing Spreg failed\n");
|
dev_dbg(&port->dev, "writing Spreg failed\n");
|
||||||
return -1;
|
goto err;
|
||||||
}
|
}
|
||||||
/* End of block to be checked */
|
/* End of block to be checked */
|
||||||
|
|
||||||
|
@ -927,7 +927,7 @@ static int mos7840_open(struct tty_struct *tty, struct usb_serial_port *port)
|
||||||
&Data);
|
&Data);
|
||||||
if (status < 0) {
|
if (status < 0) {
|
||||||
dev_dbg(&port->dev, "Reading Controlreg failed\n");
|
dev_dbg(&port->dev, "Reading Controlreg failed\n");
|
||||||
return -1;
|
goto err;
|
||||||
}
|
}
|
||||||
Data |= 0x08; /* Driver done bit */
|
Data |= 0x08; /* Driver done bit */
|
||||||
Data |= 0x20; /* rx_disable */
|
Data |= 0x20; /* rx_disable */
|
||||||
|
@ -935,7 +935,7 @@ static int mos7840_open(struct tty_struct *tty, struct usb_serial_port *port)
|
||||||
mos7840_port->ControlRegOffset, Data);
|
mos7840_port->ControlRegOffset, Data);
|
||||||
if (status < 0) {
|
if (status < 0) {
|
||||||
dev_dbg(&port->dev, "writing Controlreg failed\n");
|
dev_dbg(&port->dev, "writing Controlreg failed\n");
|
||||||
return -1;
|
goto err;
|
||||||
}
|
}
|
||||||
/* do register settings here */
|
/* do register settings here */
|
||||||
/* Set all regs to the device default values. */
|
/* 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)
|
||||||
status = mos7840_set_uart_reg(port, INTERRUPT_ENABLE_REGISTER, Data);
|
status = mos7840_set_uart_reg(port, INTERRUPT_ENABLE_REGISTER, Data);
|
||||||
if (status < 0) {
|
if (status < 0) {
|
||||||
dev_dbg(&port->dev, "disabling interrupts failed\n");
|
dev_dbg(&port->dev, "disabling interrupts failed\n");
|
||||||
return -1;
|
goto err;
|
||||||
}
|
}
|
||||||
/* Set FIFO_CONTROL_REGISTER to the default value */
|
/* Set FIFO_CONTROL_REGISTER to the default value */
|
||||||
Data = 0x00;
|
Data = 0x00;
|
||||||
status = mos7840_set_uart_reg(port, FIFO_CONTROL_REGISTER, Data);
|
status = mos7840_set_uart_reg(port, FIFO_CONTROL_REGISTER, Data);
|
||||||
if (status < 0) {
|
if (status < 0) {
|
||||||
dev_dbg(&port->dev, "Writing FIFO_CONTROL_REGISTER failed\n");
|
dev_dbg(&port->dev, "Writing FIFO_CONTROL_REGISTER failed\n");
|
||||||
return -1;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
Data = 0xcf;
|
Data = 0xcf;
|
||||||
status = mos7840_set_uart_reg(port, FIFO_CONTROL_REGISTER, Data);
|
status = mos7840_set_uart_reg(port, FIFO_CONTROL_REGISTER, Data);
|
||||||
if (status < 0) {
|
if (status < 0) {
|
||||||
dev_dbg(&port->dev, "Writing FIFO_CONTROL_REGISTER failed\n");
|
dev_dbg(&port->dev, "Writing FIFO_CONTROL_REGISTER failed\n");
|
||||||
return -1;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
Data = 0x03;
|
Data = 0x03;
|
||||||
|
@ -1103,6 +1103,15 @@ static int mos7840_open(struct tty_struct *tty, struct usb_serial_port *port)
|
||||||
/* mos7840_change_port_settings(mos7840_port,old_termios); */
|
/* mos7840_change_port_settings(mos7840_port,old_termios); */
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
err:
|
||||||
|
for (j = 0; j < NUM_URBS; ++j) {
|
||||||
|
urb = mos7840_port->write_urb_pool[j];
|
||||||
|
if (!urb)
|
||||||
|
continue;
|
||||||
|
kfree(urb->transfer_buffer);
|
||||||
|
usb_free_urb(urb);
|
||||||
|
}
|
||||||
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
|
|
|
@ -341,17 +341,12 @@ static void option_instat_callback(struct urb *urb);
|
||||||
#define OLIVETTI_VENDOR_ID 0x0b3c
|
#define OLIVETTI_VENDOR_ID 0x0b3c
|
||||||
#define OLIVETTI_PRODUCT_OLICARD100 0xc000
|
#define OLIVETTI_PRODUCT_OLICARD100 0xc000
|
||||||
#define OLIVETTI_PRODUCT_OLICARD145 0xc003
|
#define OLIVETTI_PRODUCT_OLICARD145 0xc003
|
||||||
|
#define OLIVETTI_PRODUCT_OLICARD200 0xc005
|
||||||
|
|
||||||
/* Celot products */
|
/* Celot products */
|
||||||
#define CELOT_VENDOR_ID 0x211f
|
#define CELOT_VENDOR_ID 0x211f
|
||||||
#define CELOT_PRODUCT_CT680M 0x6801
|
#define CELOT_PRODUCT_CT680M 0x6801
|
||||||
|
|
||||||
/* ONDA Communication vendor id */
|
|
||||||
#define ONDA_VENDOR_ID 0x1ee8
|
|
||||||
|
|
||||||
/* ONDA MT825UP HSDPA 14.2 modem */
|
|
||||||
#define ONDA_MT825UP 0x000b
|
|
||||||
|
|
||||||
/* Samsung products */
|
/* Samsung products */
|
||||||
#define SAMSUNG_VENDOR_ID 0x04e8
|
#define SAMSUNG_VENDOR_ID 0x04e8
|
||||||
#define SAMSUNG_PRODUCT_GT_B3730 0x6889
|
#define SAMSUNG_PRODUCT_GT_B3730 0x6889
|
||||||
|
@ -444,7 +439,8 @@ static void option_instat_callback(struct urb *urb);
|
||||||
|
|
||||||
/* Hyundai Petatel Inc. products */
|
/* Hyundai Petatel Inc. products */
|
||||||
#define PETATEL_VENDOR_ID 0x1ff4
|
#define PETATEL_VENDOR_ID 0x1ff4
|
||||||
#define PETATEL_PRODUCT_NP10T 0x600e
|
#define PETATEL_PRODUCT_NP10T_600A 0x600a
|
||||||
|
#define PETATEL_PRODUCT_NP10T_600E 0x600e
|
||||||
|
|
||||||
/* TP-LINK Incorporated products */
|
/* TP-LINK Incorporated products */
|
||||||
#define TPLINK_VENDOR_ID 0x2357
|
#define TPLINK_VENDOR_ID 0x2357
|
||||||
|
@ -782,6 +778,7 @@ static const struct usb_device_id option_ids[] = {
|
||||||
{ USB_DEVICE(KYOCERA_VENDOR_ID, KYOCERA_PRODUCT_KPC650) },
|
{ USB_DEVICE(KYOCERA_VENDOR_ID, KYOCERA_PRODUCT_KPC650) },
|
||||||
{ USB_DEVICE(KYOCERA_VENDOR_ID, KYOCERA_PRODUCT_KPC680) },
|
{ USB_DEVICE(KYOCERA_VENDOR_ID, KYOCERA_PRODUCT_KPC680) },
|
||||||
{ USB_DEVICE(QUALCOMM_VENDOR_ID, 0x6613)}, /* Onda H600/ZTE MF330 */
|
{ USB_DEVICE(QUALCOMM_VENDOR_ID, 0x6613)}, /* Onda H600/ZTE MF330 */
|
||||||
|
{ USB_DEVICE(QUALCOMM_VENDOR_ID, 0x0023)}, /* ONYX 3G device */
|
||||||
{ USB_DEVICE(QUALCOMM_VENDOR_ID, 0x9000)}, /* SIMCom SIM5218 */
|
{ USB_DEVICE(QUALCOMM_VENDOR_ID, 0x9000)}, /* SIMCom SIM5218 */
|
||||||
{ USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6280) }, /* BP3-USB & BP3-EXT HSDPA */
|
{ USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6280) }, /* BP3-USB & BP3-EXT HSDPA */
|
||||||
{ USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6008) },
|
{ USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6008) },
|
||||||
|
@ -817,7 +814,8 @@ static const struct usb_device_id option_ids[] = {
|
||||||
{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0017, 0xff, 0xff, 0xff),
|
{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0017, 0xff, 0xff, 0xff),
|
||||||
.driver_info = (kernel_ulong_t)&net_intf3_blacklist },
|
.driver_info = (kernel_ulong_t)&net_intf3_blacklist },
|
||||||
{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0018, 0xff, 0xff, 0xff) },
|
{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0018, 0xff, 0xff, 0xff) },
|
||||||
{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0019, 0xff, 0xff, 0xff) },
|
{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0019, 0xff, 0xff, 0xff),
|
||||||
|
.driver_info = (kernel_ulong_t)&net_intf3_blacklist },
|
||||||
{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0020, 0xff, 0xff, 0xff) },
|
{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0020, 0xff, 0xff, 0xff) },
|
||||||
{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0021, 0xff, 0xff, 0xff),
|
{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0021, 0xff, 0xff, 0xff),
|
||||||
.driver_info = (kernel_ulong_t)&net_intf4_blacklist },
|
.driver_info = (kernel_ulong_t)&net_intf4_blacklist },
|
||||||
|
@ -1256,8 +1254,8 @@ static const struct usb_device_id option_ids[] = {
|
||||||
|
|
||||||
{ USB_DEVICE(OLIVETTI_VENDOR_ID, OLIVETTI_PRODUCT_OLICARD100) },
|
{ USB_DEVICE(OLIVETTI_VENDOR_ID, OLIVETTI_PRODUCT_OLICARD100) },
|
||||||
{ USB_DEVICE(OLIVETTI_VENDOR_ID, OLIVETTI_PRODUCT_OLICARD145) },
|
{ USB_DEVICE(OLIVETTI_VENDOR_ID, OLIVETTI_PRODUCT_OLICARD145) },
|
||||||
|
{ USB_DEVICE(OLIVETTI_VENDOR_ID, OLIVETTI_PRODUCT_OLICARD200) },
|
||||||
{ USB_DEVICE(CELOT_VENDOR_ID, CELOT_PRODUCT_CT680M) }, /* CT-650 CDMA 450 1xEVDO modem */
|
{ USB_DEVICE(CELOT_VENDOR_ID, CELOT_PRODUCT_CT680M) }, /* CT-650 CDMA 450 1xEVDO modem */
|
||||||
{ USB_DEVICE(ONDA_VENDOR_ID, ONDA_MT825UP) }, /* ONDA MT825UP modem */
|
|
||||||
{ USB_DEVICE_AND_INTERFACE_INFO(SAMSUNG_VENDOR_ID, SAMSUNG_PRODUCT_GT_B3730, USB_CLASS_CDC_DATA, 0x00, 0x00) }, /* Samsung GT-B3730 LTE USB modem.*/
|
{ USB_DEVICE_AND_INTERFACE_INFO(SAMSUNG_VENDOR_ID, SAMSUNG_PRODUCT_GT_B3730, USB_CLASS_CDC_DATA, 0x00, 0x00) }, /* Samsung GT-B3730 LTE USB modem.*/
|
||||||
{ USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CEM600) },
|
{ USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CEM600) },
|
||||||
{ USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CEM610) },
|
{ USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CEM610) },
|
||||||
|
@ -1329,9 +1327,12 @@ static const struct usb_device_id option_ids[] = {
|
||||||
{ USB_DEVICE_AND_INTERFACE_INFO(MEDIATEK_VENDOR_ID, MEDIATEK_PRODUCT_DC_4COM2, 0xff, 0x02, 0x01) },
|
{ USB_DEVICE_AND_INTERFACE_INFO(MEDIATEK_VENDOR_ID, MEDIATEK_PRODUCT_DC_4COM2, 0xff, 0x02, 0x01) },
|
||||||
{ USB_DEVICE_AND_INTERFACE_INFO(MEDIATEK_VENDOR_ID, MEDIATEK_PRODUCT_DC_4COM2, 0xff, 0x00, 0x00) },
|
{ USB_DEVICE_AND_INTERFACE_INFO(MEDIATEK_VENDOR_ID, MEDIATEK_PRODUCT_DC_4COM2, 0xff, 0x00, 0x00) },
|
||||||
{ USB_DEVICE(CELLIENT_VENDOR_ID, CELLIENT_PRODUCT_MEN200) },
|
{ USB_DEVICE(CELLIENT_VENDOR_ID, CELLIENT_PRODUCT_MEN200) },
|
||||||
{ USB_DEVICE(PETATEL_VENDOR_ID, PETATEL_PRODUCT_NP10T) },
|
{ USB_DEVICE(PETATEL_VENDOR_ID, PETATEL_PRODUCT_NP10T_600A) },
|
||||||
|
{ USB_DEVICE(PETATEL_VENDOR_ID, PETATEL_PRODUCT_NP10T_600E) },
|
||||||
{ USB_DEVICE(TPLINK_VENDOR_ID, TPLINK_PRODUCT_MA180),
|
{ USB_DEVICE(TPLINK_VENDOR_ID, TPLINK_PRODUCT_MA180),
|
||||||
.driver_info = (kernel_ulong_t)&net_intf4_blacklist },
|
.driver_info = (kernel_ulong_t)&net_intf4_blacklist },
|
||||||
|
{ USB_DEVICE(TPLINK_VENDOR_ID, 0x9000), /* TP-Link MA260 */
|
||||||
|
.driver_info = (kernel_ulong_t)&net_intf4_blacklist },
|
||||||
{ USB_DEVICE(CHANGHONG_VENDOR_ID, CHANGHONG_PRODUCT_CH690) },
|
{ USB_DEVICE(CHANGHONG_VENDOR_ID, CHANGHONG_PRODUCT_CH690) },
|
||||||
{ USB_DEVICE_AND_INTERFACE_INFO(0x2001, 0x7d01, 0xff, 0x02, 0x01) }, /* D-Link DWM-156 (variant) */
|
{ USB_DEVICE_AND_INTERFACE_INFO(0x2001, 0x7d01, 0xff, 0x02, 0x01) }, /* D-Link DWM-156 (variant) */
|
||||||
{ USB_DEVICE_AND_INTERFACE_INFO(0x2001, 0x7d01, 0xff, 0x00, 0x00) }, /* D-Link DWM-156 (variant) */
|
{ 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[] = {
|
||||||
{ USB_DEVICE_AND_INTERFACE_INFO(0x2001, 0x7d02, 0xff, 0x00, 0x00) },
|
{ USB_DEVICE_AND_INTERFACE_INFO(0x2001, 0x7d02, 0xff, 0x00, 0x00) },
|
||||||
{ USB_DEVICE_AND_INTERFACE_INFO(0x2001, 0x7d03, 0xff, 0x02, 0x01) },
|
{ USB_DEVICE_AND_INTERFACE_INFO(0x2001, 0x7d03, 0xff, 0x02, 0x01) },
|
||||||
{ USB_DEVICE_AND_INTERFACE_INFO(0x2001, 0x7d03, 0xff, 0x00, 0x00) },
|
{ USB_DEVICE_AND_INTERFACE_INFO(0x2001, 0x7d03, 0xff, 0x00, 0x00) },
|
||||||
|
{ USB_DEVICE_AND_INTERFACE_INFO(0x07d1, 0x3e01, 0xff, 0xff, 0xff) }, /* D-Link DWM-152/C1 */
|
||||||
|
{ USB_DEVICE_AND_INTERFACE_INFO(0x07d1, 0x3e02, 0xff, 0xff, 0xff) }, /* D-Link DWM-156/C1 */
|
||||||
{ } /* Terminating entry */
|
{ } /* Terminating entry */
|
||||||
};
|
};
|
||||||
MODULE_DEVICE_TABLE(usb, option_ids);
|
MODULE_DEVICE_TABLE(usb, option_ids);
|
||||||
|
|
|
@ -371,7 +371,7 @@ static int ti_startup(struct usb_serial *serial)
|
||||||
usb_set_serial_data(serial, tdev);
|
usb_set_serial_data(serial, tdev);
|
||||||
|
|
||||||
/* determine device type */
|
/* determine device type */
|
||||||
if (usb_match_id(serial->interface, ti_id_table_3410))
|
if (serial->type == &ti_1port_device)
|
||||||
tdev->td_is_3410 = 1;
|
tdev->td_is_3410 = 1;
|
||||||
dev_dbg(&dev->dev, "%s - device type is %s\n", __func__,
|
dev_dbg(&dev->dev, "%s - device type is %s\n", __func__,
|
||||||
tdev->td_is_3410 ? "3410" : "5052");
|
tdev->td_is_3410 ? "3410" : "5052");
|
||||||
|
|
|
@ -665,6 +665,13 @@ UNUSUAL_DEV( 0x054c, 0x016a, 0x0000, 0x9999,
|
||||||
USB_SC_DEVICE, USB_PR_DEVICE, NULL,
|
USB_SC_DEVICE, USB_PR_DEVICE, NULL,
|
||||||
US_FL_FIX_INQUIRY ),
|
US_FL_FIX_INQUIRY ),
|
||||||
|
|
||||||
|
/* Submitted by Ren Bigcren <bigcren.ren@sonymobile.com> */
|
||||||
|
UNUSUAL_DEV( 0x054c, 0x02a5, 0x0100, 0x0100,
|
||||||
|
"Sony Corp.",
|
||||||
|
"MicroVault Flash Drive",
|
||||||
|
USB_SC_DEVICE, USB_PR_DEVICE, NULL,
|
||||||
|
US_FL_NO_READ_CAPACITY_16 ),
|
||||||
|
|
||||||
/* floppy reports multiple luns */
|
/* floppy reports multiple luns */
|
||||||
UNUSUAL_DEV( 0x055d, 0x2020, 0x0000, 0x0210,
|
UNUSUAL_DEV( 0x055d, 0x2020, 0x0000, 0x0210,
|
||||||
"SAMSUNG",
|
"SAMSUNG",
|
||||||
|
|
|
@ -367,17 +367,6 @@ struct usb_bus {
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------- */
|
/* ----------------------------------------------------------------------- */
|
||||||
|
|
||||||
/* This is arbitrary.
|
|
||||||
* From USB 2.0 spec Table 11-13, offset 7, a hub can
|
|
||||||
* have up to 255 ports. The most yet reported is 10.
|
|
||||||
*
|
|
||||||
* Current Wireless USB host hardware (Intel i1480 for example) allows
|
|
||||||
* up to 22 devices to connect. Upcoming hardware might raise that
|
|
||||||
* limit. Because the arrays need to add a bit for hub status data, we
|
|
||||||
* do 31, so plus one evens out to four bytes.
|
|
||||||
*/
|
|
||||||
#define USB_MAXCHILDREN (31)
|
|
||||||
|
|
||||||
struct usb_tt;
|
struct usb_tt;
|
||||||
|
|
||||||
enum usb_device_removable {
|
enum usb_device_removable {
|
||||||
|
|
|
@ -11,6 +11,17 @@
|
||||||
|
|
||||||
#include <linux/types.h> /* __u8 etc */
|
#include <linux/types.h> /* __u8 etc */
|
||||||
|
|
||||||
|
/* This is arbitrary.
|
||||||
|
* From USB 2.0 spec Table 11-13, offset 7, a hub can
|
||||||
|
* have up to 255 ports. The most yet reported is 10.
|
||||||
|
*
|
||||||
|
* Current Wireless USB host hardware (Intel i1480 for example) allows
|
||||||
|
* up to 22 devices to connect. Upcoming hardware might raise that
|
||||||
|
* limit. Because the arrays need to add a bit for hub status data, we
|
||||||
|
* use 31, so plus one evens out to four bytes.
|
||||||
|
*/
|
||||||
|
#define USB_MAXCHILDREN 31
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Hub request types
|
* Hub request types
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue