Commit fb478da5 authored by Linus Torvalds's avatar Linus Torvalds

Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb-2.6

* git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb-2.6: (23 commits)
  USB: revert recovery from transient errors
  usb: unusual devs patch for Nokia 5310 Music Xpress
  usb: ftdi_sio: add support for Domintell devices
  USB: drivers/usb/musb/: disable it on SuperH
  USB Serial: Sierra: Add MC8785 VID/PID
  USB: serial: add ZTE CDMA Tech id to option driver
  USB: ftdi_sio: Add 0x5050/0x0900 USB IDs (Papouch Quido USB 4/4)
  usb serial: ti_usb_3410_5052 obviously broken by firmware changes
  USB: fsl_usb2_udc: fix VDBG() format string
  USB: unusual_devs addition for RockChip MP3 player
  USB: SERIAL CP2101 add device IDs
  usb-serial: Add Siemens EF81 to PL-2303 hack triggers
  USB: fix EHCI periodic transfers
  usb: musb: fix include path
  USB: Fixing Nokia 3310c in storage mode
  usb gadget: fix omap_udc DMA regression
  USB: update of Documentation/usb/anchors.txt
  USB: fix hcd interrupt disabling
  USB: Correct Sierra Wireless USB EVDO Modem Device ID
  USB: Fix the Nokia 6300 storage-mode.
  ...
parents 8553f321 5257d97a
...@@ -42,9 +42,21 @@ This function kills all URBs associated with an anchor. The URBs ...@@ -42,9 +42,21 @@ This function kills all URBs associated with an anchor. The URBs
are called in the reverse temporal order they were submitted. are called in the reverse temporal order they were submitted.
This way no data can be reordered. This way no data can be reordered.
usb_unlink_anchored_urbs()
--------------------------
This function unlinks all URBs associated with an anchor. The URBs
are processed in the reverse temporal order they were submitted.
This is similar to usb_kill_anchored_urbs(), but it will not sleep.
Therefore no guarantee is made that the URBs have been unlinked when
the call returns. They may be unlinked later but will be unlinked in
finite time.
usb_wait_anchor_empty_timeout() usb_wait_anchor_empty_timeout()
------------------------------- -------------------------------
This function waits for all URBs associated with an anchor to finish This function waits for all URBs associated with an anchor to finish
or a timeout, whichever comes first. Its return value will tell you or a timeout, whichever comes first. Its return value will tell you
whether the timeout was reached. whether the timeout was reached.
...@@ -1876,7 +1876,8 @@ int usb_add_hcd(struct usb_hcd *hcd, ...@@ -1876,7 +1876,8 @@ int usb_add_hcd(struct usb_hcd *hcd,
* with IRQF_SHARED. As usb_hcd_irq() will always disable * with IRQF_SHARED. As usb_hcd_irq() will always disable
* interrupts we can remove it here. * interrupts we can remove it here.
*/ */
irqflags &= ~IRQF_DISABLED; if (irqflags & IRQF_SHARED)
irqflags &= ~IRQF_DISABLED;
snprintf(hcd->irq_descr, sizeof(hcd->irq_descr), "%s:usb%d", snprintf(hcd->irq_descr, sizeof(hcd->irq_descr), "%s:usb%d",
hcd->driver->description, hcd->self.busnum); hcd->driver->description, hcd->self.busnum);
......
...@@ -2683,35 +2683,17 @@ static void hub_port_connect_change(struct usb_hub *hub, int port1, ...@@ -2683,35 +2683,17 @@ static void hub_port_connect_change(struct usb_hub *hub, int port1,
USB_PORT_STAT_C_ENABLE); USB_PORT_STAT_C_ENABLE);
#endif #endif
/* Try to use the debounce delay for protection against
* port-enable changes caused, for example, by EMI.
*/
if (portchange & (USB_PORT_STAT_C_CONNECTION |
USB_PORT_STAT_C_ENABLE)) {
status = hub_port_debounce(hub, port1);
if (status < 0) {
if (printk_ratelimit())
dev_err (hub_dev, "connect-debounce failed, "
"port %d disabled\n", port1);
portstatus &= ~USB_PORT_STAT_CONNECTION;
} else {
portstatus = status;
}
}
/* Try to resuscitate an existing device */ /* Try to resuscitate an existing device */
udev = hdev->children[port1-1]; udev = hdev->children[port1-1];
if ((portstatus & USB_PORT_STAT_CONNECTION) && udev && if ((portstatus & USB_PORT_STAT_CONNECTION) && udev &&
udev->state != USB_STATE_NOTATTACHED) { udev->state != USB_STATE_NOTATTACHED) {
usb_lock_device(udev); usb_lock_device(udev);
if (portstatus & USB_PORT_STAT_ENABLE) { if (portstatus & USB_PORT_STAT_ENABLE) {
status = 0; /* Nothing to do */ status = 0; /* Nothing to do */
} else if (!udev->persist_enabled) {
status = -ENODEV; /* Mustn't resuscitate */
#ifdef CONFIG_USB_SUSPEND #ifdef CONFIG_USB_SUSPEND
} else if (udev->state == USB_STATE_SUSPENDED) { } else if (udev->state == USB_STATE_SUSPENDED &&
udev->persist_enabled) {
/* For a suspended device, treat this as a /* For a suspended device, treat this as a
* remote wakeup event. * remote wakeup event.
*/ */
...@@ -2726,7 +2708,7 @@ static void hub_port_connect_change(struct usb_hub *hub, int port1, ...@@ -2726,7 +2708,7 @@ static void hub_port_connect_change(struct usb_hub *hub, int port1,
#endif #endif
} else { } else {
status = usb_reset_device(udev); status = -ENODEV; /* Don't resuscitate */
} }
usb_unlock_device(udev); usb_unlock_device(udev);
...@@ -2741,6 +2723,19 @@ static void hub_port_connect_change(struct usb_hub *hub, int port1, ...@@ -2741,6 +2723,19 @@ static void hub_port_connect_change(struct usb_hub *hub, int port1,
usb_disconnect(&hdev->children[port1-1]); usb_disconnect(&hdev->children[port1-1]);
clear_bit(port1, hub->change_bits); clear_bit(port1, hub->change_bits);
if (portchange & (USB_PORT_STAT_C_CONNECTION |
USB_PORT_STAT_C_ENABLE)) {
status = hub_port_debounce(hub, port1);
if (status < 0) {
if (printk_ratelimit())
dev_err(hub_dev, "connect-debounce failed, "
"port %d disabled\n", port1);
portstatus &= ~USB_PORT_STAT_CONNECTION;
} else {
portstatus = status;
}
}
/* Return now if debouncing failed or nothing is connected */ /* Return now if debouncing failed or nothing is connected */
if (!(portstatus & USB_PORT_STAT_CONNECTION)) { if (!(portstatus & USB_PORT_STAT_CONNECTION)) {
...@@ -2748,7 +2743,7 @@ static void hub_port_connect_change(struct usb_hub *hub, int port1, ...@@ -2748,7 +2743,7 @@ static void hub_port_connect_change(struct usb_hub *hub, int port1,
if ((wHubCharacteristics & HUB_CHAR_LPSM) < 2 if ((wHubCharacteristics & HUB_CHAR_LPSM) < 2
&& !(portstatus & (1 << USB_PORT_FEAT_POWER))) && !(portstatus & (1 << USB_PORT_FEAT_POWER)))
set_port_feature(hdev, port1, USB_PORT_FEAT_POWER); set_port_feature(hdev, port1, USB_PORT_FEAT_POWER);
if (portstatus & USB_PORT_STAT_ENABLE) if (portstatus & USB_PORT_STAT_ENABLE)
goto done; goto done;
return; return;
......
...@@ -223,7 +223,7 @@ static int dr_controller_setup(struct fsl_udc *udc) ...@@ -223,7 +223,7 @@ static int dr_controller_setup(struct fsl_udc *udc)
fsl_writel(tmp, &dr_regs->endpointlistaddr); fsl_writel(tmp, &dr_regs->endpointlistaddr);
VDBG("vir[qh_base] is %p phy[qh_base] is 0x%8x reg is 0x%8x", VDBG("vir[qh_base] is %p phy[qh_base] is 0x%8x reg is 0x%8x",
(int)udc->ep_qh, (int)tmp, udc->ep_qh, (int)tmp,
fsl_readl(&dr_regs->endpointlistaddr)); fsl_readl(&dr_regs->endpointlistaddr));
/* Config PHY interface */ /* Config PHY interface */
......
...@@ -787,7 +787,7 @@ static void dma_channel_claim(struct omap_ep *ep, unsigned channel) ...@@ -787,7 +787,7 @@ static void dma_channel_claim(struct omap_ep *ep, unsigned channel)
omap_set_dma_dest_params(ep->lch, omap_set_dma_dest_params(ep->lch,
OMAP_DMA_PORT_TIPB, OMAP_DMA_PORT_TIPB,
OMAP_DMA_AMODE_CONSTANT, OMAP_DMA_AMODE_CONSTANT,
(unsigned long) io_v2p(UDC_DATA_DMA), UDC_DATA_DMA,
0, 0); 0, 0);
} }
} else { } else {
...@@ -804,7 +804,7 @@ static void dma_channel_claim(struct omap_ep *ep, unsigned channel) ...@@ -804,7 +804,7 @@ static void dma_channel_claim(struct omap_ep *ep, unsigned channel)
omap_set_dma_src_params(ep->lch, omap_set_dma_src_params(ep->lch,
OMAP_DMA_PORT_TIPB, OMAP_DMA_PORT_TIPB,
OMAP_DMA_AMODE_CONSTANT, OMAP_DMA_AMODE_CONSTANT,
(unsigned long) io_v2p(UDC_DATA_DMA), UDC_DATA_DMA,
0, 0); 0, 0);
/* EMIFF or SDRC */ /* EMIFF or SDRC */
omap_set_dma_dest_burst_mode(ep->lch, omap_set_dma_dest_burst_mode(ep->lch,
......
...@@ -145,16 +145,6 @@ static int handshake (struct ehci_hcd *ehci, void __iomem *ptr, ...@@ -145,16 +145,6 @@ static int handshake (struct ehci_hcd *ehci, void __iomem *ptr,
return -ETIMEDOUT; return -ETIMEDOUT;
} }
static int handshake_on_error_set_halt(struct ehci_hcd *ehci, void __iomem *ptr,
u32 mask, u32 done, int usec)
{
int error = handshake(ehci, ptr, mask, done, usec);
if (error)
ehci_to_hcd(ehci)->state = HC_STATE_HALT;
return error;
}
/* force HC to halt state from unknown (EHCI spec section 2.3) */ /* force HC to halt state from unknown (EHCI spec section 2.3) */
static int ehci_halt (struct ehci_hcd *ehci) static int ehci_halt (struct ehci_hcd *ehci)
{ {
...@@ -173,6 +163,22 @@ static int ehci_halt (struct ehci_hcd *ehci) ...@@ -173,6 +163,22 @@ static int ehci_halt (struct ehci_hcd *ehci)
STS_HALT, STS_HALT, 16 * 125); STS_HALT, STS_HALT, 16 * 125);
} }
static int handshake_on_error_set_halt(struct ehci_hcd *ehci, void __iomem *ptr,
u32 mask, u32 done, int usec)
{
int error;
error = handshake(ehci, ptr, mask, done, usec);
if (error) {
ehci_halt(ehci);
ehci_to_hcd(ehci)->state = HC_STATE_HALT;
ehci_err(ehci, "force halt; handhake %p %08x %08x -> %d\n",
ptr, mask, done, error);
}
return error;
}
/* put TDI/ARC silicon into EHCI mode */ /* put TDI/ARC silicon into EHCI mode */
static void tdi_reset (struct ehci_hcd *ehci) static void tdi_reset (struct ehci_hcd *ehci)
{ {
......
...@@ -437,6 +437,9 @@ static int enable_periodic (struct ehci_hcd *ehci) ...@@ -437,6 +437,9 @@ static int enable_periodic (struct ehci_hcd *ehci)
u32 cmd; u32 cmd;
int status; int status;
if (ehci->periodic_sched++)
return 0;
/* did clearing PSE did take effect yet? /* did clearing PSE did take effect yet?
* takes effect only at frame boundaries... * takes effect only at frame boundaries...
*/ */
...@@ -461,6 +464,9 @@ static int disable_periodic (struct ehci_hcd *ehci) ...@@ -461,6 +464,9 @@ static int disable_periodic (struct ehci_hcd *ehci)
u32 cmd; u32 cmd;
int status; int status;
if (--ehci->periodic_sched)
return 0;
/* did setting PSE not take effect yet? /* did setting PSE not take effect yet?
* takes effect only at frame boundaries... * takes effect only at frame boundaries...
*/ */
...@@ -544,13 +550,10 @@ static int qh_link_periodic (struct ehci_hcd *ehci, struct ehci_qh *qh) ...@@ -544,13 +550,10 @@ static int qh_link_periodic (struct ehci_hcd *ehci, struct ehci_qh *qh)
: (qh->usecs * 8); : (qh->usecs * 8);
/* maybe enable periodic schedule processing */ /* maybe enable periodic schedule processing */
if (!ehci->periodic_sched++) return enable_periodic(ehci);
return enable_periodic (ehci);
return 0;
} }
static void qh_unlink_periodic (struct ehci_hcd *ehci, struct ehci_qh *qh) static int qh_unlink_periodic(struct ehci_hcd *ehci, struct ehci_qh *qh)
{ {
unsigned i; unsigned i;
unsigned period; unsigned period;
...@@ -586,9 +589,7 @@ static void qh_unlink_periodic (struct ehci_hcd *ehci, struct ehci_qh *qh) ...@@ -586,9 +589,7 @@ static void qh_unlink_periodic (struct ehci_hcd *ehci, struct ehci_qh *qh)
qh_put (qh); qh_put (qh);
/* maybe turn off periodic schedule */ /* maybe turn off periodic schedule */
ehci->periodic_sched--; return disable_periodic(ehci);
if (!ehci->periodic_sched)
(void) disable_periodic (ehci);
} }
static void intr_deschedule (struct ehci_hcd *ehci, struct ehci_qh *qh) static void intr_deschedule (struct ehci_hcd *ehci, struct ehci_qh *qh)
...@@ -1562,9 +1563,7 @@ itd_link_urb ( ...@@ -1562,9 +1563,7 @@ itd_link_urb (
urb->hcpriv = NULL; urb->hcpriv = NULL;
timer_action (ehci, TIMER_IO_WATCHDOG); timer_action (ehci, TIMER_IO_WATCHDOG);
if (unlikely (!ehci->periodic_sched++)) return enable_periodic(ehci);
return enable_periodic (ehci);
return 0;
} }
#define ISO_ERRS (EHCI_ISOC_BUF_ERR | EHCI_ISOC_BABBLE | EHCI_ISOC_XACTERR) #define ISO_ERRS (EHCI_ISOC_BUF_ERR | EHCI_ISOC_BABBLE | EHCI_ISOC_XACTERR)
...@@ -1642,7 +1641,7 @@ itd_complete ( ...@@ -1642,7 +1641,7 @@ itd_complete (
ehci_urb_done(ehci, urb, 0); ehci_urb_done(ehci, urb, 0);
retval = true; retval = true;
urb = NULL; urb = NULL;
ehci->periodic_sched--; (void) disable_periodic(ehci);
ehci_to_hcd(ehci)->self.bandwidth_isoc_reqs--; ehci_to_hcd(ehci)->self.bandwidth_isoc_reqs--;
if (unlikely (list_empty (&stream->td_list))) { if (unlikely (list_empty (&stream->td_list))) {
...@@ -1951,9 +1950,7 @@ sitd_link_urb ( ...@@ -1951,9 +1950,7 @@ sitd_link_urb (
urb->hcpriv = NULL; urb->hcpriv = NULL;
timer_action (ehci, TIMER_IO_WATCHDOG); timer_action (ehci, TIMER_IO_WATCHDOG);
if (!ehci->periodic_sched++) return enable_periodic(ehci);
return enable_periodic (ehci);
return 0;
} }
/*-------------------------------------------------------------------------*/ /*-------------------------------------------------------------------------*/
...@@ -2019,7 +2016,7 @@ sitd_complete ( ...@@ -2019,7 +2016,7 @@ sitd_complete (
ehci_urb_done(ehci, urb, 0); ehci_urb_done(ehci, urb, 0);
retval = true; retval = true;
urb = NULL; urb = NULL;
ehci->periodic_sched--; (void) disable_periodic(ehci);
ehci_to_hcd(ehci)->self.bandwidth_isoc_reqs--; ehci_to_hcd(ehci)->self.bandwidth_isoc_reqs--;
if (list_empty (&stream->td_list)) { if (list_empty (&stream->td_list)) {
...@@ -2243,8 +2240,7 @@ scan_periodic (struct ehci_hcd *ehci) ...@@ -2243,8 +2240,7 @@ scan_periodic (struct ehci_hcd *ehci)
if (unlikely (modified)) { if (unlikely (modified)) {
if (likely(ehci->periodic_sched > 0)) if (likely(ehci->periodic_sched > 0))
goto restart; goto restart;
/* maybe we can short-circuit this scan! */ /* short-circuit this scan */
disable_periodic(ehci);
now_uframe = clock; now_uframe = clock;
break; break;
} }
......
...@@ -9,6 +9,7 @@ comment "Enable Host or Gadget support to see Inventra options" ...@@ -9,6 +9,7 @@ comment "Enable Host or Gadget support to see Inventra options"
# (M)HDRC = (Multipoint) Highspeed Dual-Role Controller # (M)HDRC = (Multipoint) Highspeed Dual-Role Controller
config USB_MUSB_HDRC config USB_MUSB_HDRC
depends on (USB || USB_GADGET) && HAVE_CLK depends on (USB || USB_GADGET) && HAVE_CLK
depends on !SUPERH
select TWL4030_USB if MACH_OMAP_3430SDP select TWL4030_USB if MACH_OMAP_3430SDP
tristate 'Inventra Highspeed Dual Role Controller (TI, ...)' tristate 'Inventra Highspeed Dual Role Controller (TI, ...)'
help help
......
...@@ -100,8 +100,8 @@ ...@@ -100,8 +100,8 @@
#include <linux/io.h> #include <linux/io.h>
#ifdef CONFIG_ARM #ifdef CONFIG_ARM
#include <asm/arch/hardware.h> #include <mach/hardware.h>
#include <asm/arch/memory.h> #include <mach/memory.h>
#include <asm/mach-types.h> #include <asm/mach-types.h>
#endif #endif
......
...@@ -35,8 +35,8 @@ ...@@ -35,8 +35,8 @@
#include <linux/io.h> #include <linux/io.h>
#include <asm/mach-types.h> #include <asm/mach-types.h>
#include <asm/arch/hardware.h> #include <mach/hardware.h>
#include <asm/arch/mux.h> #include <mach/mux.h>
#include "musb_core.h" #include "musb_core.h"
#include "omap2430.h" #include "omap2430.h"
......
...@@ -11,8 +11,8 @@ ...@@ -11,8 +11,8 @@
#define __MUSB_OMAP243X_H__ #define __MUSB_OMAP243X_H__
#if defined(CONFIG_ARCH_OMAP2430) || defined(CONFIG_ARCH_OMAP3430) #if defined(CONFIG_ARCH_OMAP2430) || defined(CONFIG_ARCH_OMAP3430)
#include <asm/arch/hardware.h> #include <mach/hardware.h>
#include <asm/arch/usb.h> #include <mach/usb.h>
/* /*
* OMAP2430-specific definitions * OMAP2430-specific definitions
......
...@@ -72,6 +72,7 @@ static struct usb_device_id id_table [] = { ...@@ -72,6 +72,7 @@ static struct usb_device_id id_table [] = {
{ USB_DEVICE(0x10C4, 0x80CA) }, /* Degree Controls Inc */ { USB_DEVICE(0x10C4, 0x80CA) }, /* Degree Controls Inc */
{ USB_DEVICE(0x10C4, 0x80DD) }, /* Tracient RFID */ { USB_DEVICE(0x10C4, 0x80DD) }, /* Tracient RFID */
{ USB_DEVICE(0x10C4, 0x80F6) }, /* Suunto sports instrument */ { USB_DEVICE(0x10C4, 0x80F6) }, /* Suunto sports instrument */
{ USB_DEVICE(0x10C4, 0x8115) }, /* Arygon NFC/Mifare Reader */
{ USB_DEVICE(0x10C4, 0x813D) }, /* Burnside Telecom Deskmobile */ { USB_DEVICE(0x10C4, 0x813D) }, /* Burnside Telecom Deskmobile */
{ USB_DEVICE(0x10C4, 0x814A) }, /* West Mountain Radio RIGblaster P&P */ { USB_DEVICE(0x10C4, 0x814A) }, /* West Mountain Radio RIGblaster P&P */
{ USB_DEVICE(0x10C4, 0x814B) }, /* West Mountain Radio RIGtalk */ { USB_DEVICE(0x10C4, 0x814B) }, /* West Mountain Radio RIGtalk */
...@@ -83,6 +84,7 @@ static struct usb_device_id id_table [] = { ...@@ -83,6 +84,7 @@ static struct usb_device_id id_table [] = {
{ USB_DEVICE(0x10C4, 0x81E7) }, /* Aerocomm Radio */ { USB_DEVICE(0x10C4, 0x81E7) }, /* Aerocomm Radio */
{ USB_DEVICE(0x10C4, 0x8218) }, /* Lipowsky Industrie Elektronik GmbH, HARP-1 */ { USB_DEVICE(0x10C4, 0x8218) }, /* Lipowsky Industrie Elektronik GmbH, HARP-1 */
{ USB_DEVICE(0x10c4, 0x8293) }, /* Telegesys ETRX2USB */ { USB_DEVICE(0x10c4, 0x8293) }, /* Telegesys ETRX2USB */
{ USB_DEVICE(0x10C4, 0x8341) }, /* Siemens MC35PU GPRS Modem */
{ 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, 0xF001) }, /* Elan Digital Systems USBscope50 */ { USB_DEVICE(0x10C4, 0xF001) }, /* Elan Digital Systems USBscope50 */
...@@ -93,6 +95,7 @@ static struct usb_device_id id_table [] = { ...@@ -93,6 +95,7 @@ static struct usb_device_id id_table [] = {
{ USB_DEVICE(0x13AD, 0x9999) }, /* Baltech card reader */ { USB_DEVICE(0x13AD, 0x9999) }, /* Baltech card reader */
{ USB_DEVICE(0x166A, 0x0303) }, /* Clipsal 5500PCU C-Bus USB interface */ { USB_DEVICE(0x166A, 0x0303) }, /* Clipsal 5500PCU C-Bus USB interface */
{ USB_DEVICE(0x16D6, 0x0001) }, /* Jablotron serial interface */ { USB_DEVICE(0x16D6, 0x0001) }, /* Jablotron serial interface */
{ USB_DEVICE(0x18EF, 0xE00F) }, /* ELV USB-I2C-Interface */
{ } /* Terminating Entry */ { } /* Terminating Entry */
}; };
......
...@@ -654,6 +654,9 @@ static struct usb_device_id id_table_combined [] = { ...@@ -654,6 +654,9 @@ static struct usb_device_id id_table_combined [] = {
.driver_info = (kernel_ulong_t)&ftdi_jtag_quirk }, .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
{ USB_DEVICE(RATOC_VENDOR_ID, RATOC_PRODUCT_ID_USB60F) }, { USB_DEVICE(RATOC_VENDOR_ID, RATOC_PRODUCT_ID_USB60F) },
{ USB_DEVICE(FTDI_VID, FTDI_REU_TINY_PID) }, { USB_DEVICE(FTDI_VID, FTDI_REU_TINY_PID) },
{ USB_DEVICE(PAPOUCH_VID, PAPOUCH_QUIDO4x4_PID) },
{ USB_DEVICE(FTDI_VID, FTDI_DOMINTELL_DGQG_PID) },
{ USB_DEVICE(FTDI_VID, FTDI_DOMINTELL_DUSB_PID) },
{ }, /* Optional parameter entry */ { }, /* Optional parameter entry */
{ } /* Terminating entry */ { } /* Terminating entry */
}; };
......
...@@ -750,6 +750,7 @@ ...@@ -750,6 +750,7 @@
#define PAPOUCH_VID 0x5050 /* Vendor ID */ #define PAPOUCH_VID 0x5050 /* Vendor ID */
#define PAPOUCH_TMU_PID 0x0400 /* TMU USB Thermometer */ #define PAPOUCH_TMU_PID 0x0400 /* TMU USB Thermometer */
#define PAPOUCH_QUIDO4x4_PID 0x0900 /* Quido 4/4 Module */
/* /*
* ACG Identification Technologies GmbH products (http://www.acg.de/). * ACG Identification Technologies GmbH products (http://www.acg.de/).
...@@ -838,6 +839,10 @@ ...@@ -838,6 +839,10 @@
/* Rig Expert Ukraine devices */ /* Rig Expert Ukraine devices */
#define FTDI_REU_TINY_PID 0xED22 /* RigExpert Tiny */ #define FTDI_REU_TINY_PID 0xED22 /* RigExpert Tiny */
/* Domintell products http://www.domintell.com */
#define FTDI_DOMINTELL_DGQG_PID 0xEF50 /* Master */
#define FTDI_DOMINTELL_DUSB_PID 0xEF51 /* DUSB01 module */
/* Commands */ /* Commands */
#define FTDI_SIO_RESET 0 /* Reset the port */ #define FTDI_SIO_RESET 0 /* Reset the port */
#define FTDI_SIO_MODEM_CTRL 1 /* Set the modem control register */ #define FTDI_SIO_MODEM_CTRL 1 /* Set the modem control register */
......
...@@ -218,6 +218,7 @@ static int option_send_setup(struct tty_struct *tty, struct usb_serial_port *po ...@@ -218,6 +218,7 @@ static int option_send_setup(struct tty_struct *tty, struct usb_serial_port *po
/* ZTE PRODUCTS */ /* ZTE PRODUCTS */
#define ZTE_VENDOR_ID 0x19d2 #define ZTE_VENDOR_ID 0x19d2
#define ZTE_PRODUCT_MF628 0x0015 #define ZTE_PRODUCT_MF628 0x0015
#define ZTE_PRODUCT_CDMA_TECH 0xfffe
static struct usb_device_id option_ids[] = { static struct usb_device_id option_ids[] = {
{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_COLT) }, { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_COLT) },
...@@ -347,6 +348,7 @@ static struct usb_device_id option_ids[] = { ...@@ -347,6 +348,7 @@ static struct usb_device_id option_ids[] = {
{ USB_DEVICE(MAXON_VENDOR_ID, 0x6280) }, /* BP3-USB & BP3-EXT HSDPA */ { USB_DEVICE(MAXON_VENDOR_ID, 0x6280) }, /* BP3-USB & BP3-EXT HSDPA */
{ USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_UC864E) }, { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_UC864E) },
{ USB_DEVICE(ZTE_VENDOR_ID, ZTE_PRODUCT_MF628) }, { USB_DEVICE(ZTE_VENDOR_ID, ZTE_PRODUCT_MF628) },
{ USB_DEVICE(ZTE_VENDOR_ID, ZTE_PRODUCT_CDMA_TECH) },
{ } /* Terminating entry */ { } /* Terminating entry */
}; };
MODULE_DEVICE_TABLE(usb, option_ids); MODULE_DEVICE_TABLE(usb, option_ids);
......
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
Whom based his on the Keyspan driver by Hugh Blemings <hugh@blemings.org> Whom based his on the Keyspan driver by Hugh Blemings <hugh@blemings.org>
*/ */
#define DRIVER_VERSION "v.1.2.13a" #define DRIVER_VERSION "v.1.3.2"
#define DRIVER_AUTHOR "Kevin Lloyd <klloyd@sierrawireless.com>" #define DRIVER_AUTHOR "Kevin Lloyd <klloyd@sierrawireless.com>"
#define DRIVER_DESC "USB Driver for Sierra Wireless USB modems" #define DRIVER_DESC "USB Driver for Sierra Wireless USB modems"
...@@ -30,9 +30,6 @@ ...@@ -30,9 +30,6 @@
#define SWIMS_USB_REQUEST_SetPower 0x00 #define SWIMS_USB_REQUEST_SetPower 0x00
#define SWIMS_USB_REQUEST_SetNmea 0x07 #define SWIMS_USB_REQUEST_SetNmea 0x07
#define SWIMS_USB_REQUEST_SetMode 0x0B
#define SWIMS_USB_REQUEST_GetSwocInfo 0x0A
#define SWIMS_SET_MODE_Modem 0x0001
/* per port private data */ /* per port private data */
#define N_IN_URB 4 #define N_IN_URB 4
...@@ -163,7 +160,7 @@ static struct usb_device_id id_table [] = { ...@@ -163,7 +160,7 @@ static struct usb_device_id id_table [] = {
{ USB_DEVICE(0x1199, 0x0017) }, /* Sierra Wireless EM5625 */ { USB_DEVICE(0x1199, 0x0017) }, /* Sierra Wireless EM5625 */
{ USB_DEVICE(0x1199, 0x0018) }, /* Sierra Wireless MC5720 */ { USB_DEVICE(0x1199, 0x0018) }, /* Sierra Wireless MC5720 */
{ USB_DEVICE(0x1199, 0x0218) }, /* Sierra Wireless MC5720 */ { USB_DEVICE(0x1199, 0x0218) }, /* Sierra Wireless MC5720 */
{ USB_DEVICE(0x0f30, 0x1b1d) }, /* Sierra Wireless MC5720 */ { USB_DEVICE(0x03f0, 0x1b1d) }, /* HP ev2200 a.k.a MC5720 */
{ USB_DEVICE(0x1199, 0x0020) }, /* Sierra Wireless MC5725 */ { USB_DEVICE(0x1199, 0x0020) }, /* Sierra Wireless MC5725 */
{ USB_DEVICE(0x1199, 0x0024) }, /* Sierra Wireless MC5727 */ { USB_DEVICE(0x1199, 0x0024) }, /* Sierra Wireless MC5727 */
{ USB_DEVICE(0x1199, 0x0220) }, /* Sierra Wireless MC5725 */ { USB_DEVICE(0x1199, 0x0220) }, /* Sierra Wireless MC5725 */
...@@ -175,6 +172,8 @@ static struct usb_device_id id_table [] = { ...@@ -175,6 +172,8 @@ static struct usb_device_id id_table [] = {
/* Sierra Wireless Device */ /* Sierra Wireless Device */
{ USB_DEVICE_AND_INTERFACE_INFO(0x1199, 0x0025, 0xFF, 0xFF, 0xFF) }, { USB_DEVICE_AND_INTERFACE_INFO(0x1199, 0x0025, 0xFF, 0xFF, 0xFF) },
{ USB_DEVICE(0x1199, 0x0026) }, /* Sierra Wireless Device */ { USB_DEVICE(0x1199, 0x0026) }, /* Sierra Wireless Device */
{ USB_DEVICE(0x1199, 0x0027) }, /* Sierra Wireless Device */
{ USB_DEVICE(0x1199, 0x0028) }, /* Sierra Wireless Device */
{ USB_DEVICE(0x1199, 0x6802) }, /* Sierra Wireless MC8755 */ { USB_DEVICE(0x1199, 0x6802) }, /* Sierra Wireless MC8755 */
{ USB_DEVICE(0x1199, 0x6804) }, /* Sierra Wireless MC8755 */ { USB_DEVICE(0x1199, 0x6804) }, /* Sierra Wireless MC8755 */
...@@ -187,6 +186,7 @@ static struct usb_device_id id_table [] = { ...@@ -187,6 +186,7 @@ static struct usb_device_id id_table [] = {
{ USB_DEVICE(0x1199, 0x6821) }, /* Sierra Wireless AirCard 875U */ { USB_DEVICE(0x1199, 0x6821) }, /* Sierra Wireless AirCard 875U */
{ USB_DEVICE(0x1199, 0x6832) }, /* Sierra Wireless MC8780 */ { USB_DEVICE(0x1199, 0x6832) }, /* Sierra Wireless MC8780 */
{ USB_DEVICE(0x1199, 0x6833) }, /* Sierra Wireless MC8781 */ { USB_DEVICE(0x1199, 0x6833) }, /* Sierra Wireless MC8781 */
{ USB_DEVICE(0x1199, 0x683A) }, /* Sierra Wireless MC8785 */
{ USB_DEVICE(0x1199, 0x683B) }, /* Sierra Wireless MC8785 Composite */ { USB_DEVICE(0x1199, 0x683B) }, /* Sierra Wireless MC8785 Composite */
{ USB_DEVICE(0x1199, 0x683C) }, /* Sierra Wireless MC8790 */ { USB_DEVICE(0x1199, 0x683C) }, /* Sierra Wireless MC8790 */
{ USB_DEVICE(0x1199, 0x683D) }, /* Sierra Wireless MC8790 */ { USB_DEVICE(0x1199, 0x683D) }, /* Sierra Wireless MC8790 */
...@@ -204,6 +204,8 @@ static struct usb_device_id id_table [] = { ...@@ -204,6 +204,8 @@ static struct usb_device_id id_table [] = {
/* Sierra Wireless Device */ /* Sierra Wireless Device */
{ USB_DEVICE_AND_INTERFACE_INFO(0x1199, 0x6890, 0xFF, 0xFF, 0xFF)}, { USB_DEVICE_AND_INTERFACE_INFO(0x1199, 0x6890, 0xFF, 0xFF, 0xFF)},
/* Sierra Wireless Device */ /* Sierra Wireless Device */
{ USB_DEVICE_AND_INTERFACE_INFO(0x1199, 0x6891, 0xFF, 0xFF, 0xFF)},
/* Sierra Wireless Device */
{ USB_DEVICE_AND_INTERFACE_INFO(0x1199, 0x6892, 0xFF, 0xFF, 0xFF)}, { USB_DEVICE_AND_INTERFACE_INFO(0x1199, 0x6892, 0xFF, 0xFF, 0xFF)},
{ USB_DEVICE(0x1199, 0x0112) }, /* Sierra Wireless AirCard 580 */ { USB_DEVICE(0x1199, 0x0112) }, /* Sierra Wireless AirCard 580 */
......
...@@ -1744,7 +1744,7 @@ static int ti_download_firmware(struct ti_device *tdev, int type) ...@@ -1744,7 +1744,7 @@ static int ti_download_firmware(struct ti_device *tdev, int type)
if (buffer) { if (buffer) {
memcpy(buffer, fw_p->data, fw_p->size); memcpy(buffer, fw_p->data, fw_p->size);
memset(buffer + fw_p->size, 0xff, buffer_size - fw_p->size); memset(buffer + fw_p->size, 0xff, buffer_size - fw_p->size);
ti_do_download(dev, pipe, buffer, fw_p->size); status = ti_do_download(dev, pipe, buffer, fw_p->size);
kfree(buffer); kfree(buffer);
} }
release_firmware(fw_p); release_firmware(fw_p);
......
...@@ -733,7 +733,9 @@ int usb_serial_probe(struct usb_interface *interface, ...@@ -733,7 +733,9 @@ int usb_serial_probe(struct usb_interface *interface,
((le16_to_cpu(dev->descriptor.idVendor) == ATEN_VENDOR_ID) && ((le16_to_cpu(dev->descriptor.idVendor) == ATEN_VENDOR_ID) &&
(le16_to_cpu(dev->descriptor.idProduct) == ATEN_PRODUCT_ID)) || (le16_to_cpu(dev->descriptor.idProduct) == ATEN_PRODUCT_ID)) ||
((le16_to_cpu(dev->descriptor.idVendor) == ALCOR_VENDOR_ID) && ((le16_to_cpu(dev->descriptor.idVendor) == ALCOR_VENDOR_ID) &&
(le16_to_cpu(dev->descriptor.idProduct) == ALCOR_PRODUCT_ID))) { (le16_to_cpu(dev->descriptor.idProduct) == ALCOR_PRODUCT_ID)) ||
((le16_to_cpu(dev->descriptor.idVendor) == SIEMENS_VENDOR_ID) &&
(le16_to_cpu(dev->descriptor.idProduct) == SIEMENS_PRODUCT_ID_EF81))) {
if (interface != dev->actconfig->interface[0]) { if (interface != dev->actconfig->interface[0]) {
/* check out the endpoints of the other interface*/ /* check out the endpoints of the other interface*/
iface_desc = dev->actconfig->interface[0]->cur_altsetting; iface_desc = dev->actconfig->interface[0]->cur_altsetting;
......
...@@ -146,18 +146,6 @@ config USB_STORAGE_KARMA ...@@ -146,18 +146,6 @@ config USB_STORAGE_KARMA
on the resulting scsi device node returns the Karma to normal on the resulting scsi device node returns the Karma to normal
operation. operation.
config USB_STORAGE_SIERRA
bool "Sierra Wireless TRU-Install Feature Support"
depends on USB_STORAGE
help
Say Y here to include additional code to support Sierra Wireless
products with the TRU-Install feature (e.g., AC597E, AC881U).
This code switches the Sierra Wireless device from being in
Mass Storage mode to Modem mode. It also has the ability to
support host software upgrades should full Linux support be added
to TRU-Install.
config USB_STORAGE_CYPRESS_ATACB config USB_STORAGE_CYPRESS_ATACB
bool "SAT emulation on Cypress USB/ATA Bridge with ATACB" bool "SAT emulation on Cypress USB/ATA Bridge with ATACB"
depends on USB_STORAGE depends on USB_STORAGE
......
...@@ -21,11 +21,10 @@ usb-storage-obj-$(CONFIG_USB_STORAGE_JUMPSHOT) += jumpshot.o ...@@ -21,11 +21,10 @@ usb-storage-obj-$(CONFIG_USB_STORAGE_JUMPSHOT) += jumpshot.o
usb-storage-obj-$(CONFIG_USB_STORAGE_ALAUDA) += alauda.o usb-storage-obj-$(CONFIG_USB_STORAGE_ALAUDA) += alauda.o
usb-storage-obj-$(CONFIG_USB_STORAGE_ONETOUCH) += onetouch.o usb-storage-obj-$(CONFIG_USB_STORAGE_ONETOUCH) += onetouch.o
usb-storage-obj-$(CONFIG_USB_STORAGE_KARMA) += karma.o usb-storage-obj-$(CONFIG_USB_STORAGE_KARMA) += karma.o
usb-storage-obj-$(CONFIG_USB_STORAGE_SIERRA) += sierra_ms.o
usb-storage-obj-$(CONFIG_USB_STORAGE_CYPRESS_ATACB) += cypress_atacb.o usb-storage-obj-$(CONFIG_USB_STORAGE_CYPRESS_ATACB) += cypress_atacb.o
usb-storage-objs := scsiglue.o protocol.o transport.o usb.o \ usb-storage-objs := scsiglue.o protocol.o transport.o usb.o \
initializers.o $(usb-storage-obj-y) initializers.o sierra_ms.o $(usb-storage-obj-y)
ifneq ($(CONFIG_USB_LIBUSUAL),) ifneq ($(CONFIG_USB_LIBUSUAL),)
obj-$(CONFIG_USB) += libusual.o obj-$(CONFIG_USB) += libusual.o
......
...@@ -160,6 +160,13 @@ UNUSUAL_DEV( 0x0421, 0x0019, 0x0592, 0x0592, ...@@ -160,6 +160,13 @@ UNUSUAL_DEV( 0x0421, 0x0019, 0x0592, 0x0592,
US_SC_DEVICE, US_PR_DEVICE, NULL, US_SC_DEVICE, US_PR_DEVICE, NULL,
US_FL_MAX_SECTORS_64 ), US_FL_MAX_SECTORS_64 ),
/* Reported by Filip Joelsson <filip@blueturtle.nu> */
UNUSUAL_DEV( 0x0421, 0x005d, 0x0001, 0x0600,
"Nokia",
"Nokia 3110c",
US_SC_DEVICE, US_PR_DEVICE, NULL,
US_FL_FIX_CAPACITY ),
/* Reported by Mario Rettig <mariorettig@web.de> */ /* Reported by Mario Rettig <mariorettig@web.de> */
UNUSUAL_DEV( 0x0421, 0x042e, 0x0100, 0x0100, UNUSUAL_DEV( 0x0421, 0x042e, 0x0100, 0x0100,
"Nokia", "Nokia",
...@@ -232,6 +239,20 @@ UNUSUAL_DEV( 0x0421, 0x04b9, 0x0551, 0x0551, ...@@ -232,6 +239,20 @@ UNUSUAL_DEV( 0x0421, 0x04b9, 0x0551, 0x0551,
US_SC_DEVICE, US_PR_DEVICE, NULL, US_SC_DEVICE, US_PR_DEVICE, NULL,
US_FL_FIX_CAPACITY ), US_FL_FIX_CAPACITY ),
/* Reported by Richard Nauber <RichardNauber@web.de> */
UNUSUAL_DEV( 0x0421, 0x04fa, 0x0601, 0x0601,
"Nokia",
"6300",
US_SC_DEVICE, US_PR_DEVICE, NULL,
US_FL_FIX_CAPACITY ),
/* Patch for Nokia 5310 capacity */
UNUSUAL_DEV( 0x0421, 0x006a, 0x0000, 0x0591,
"Nokia",
"5310",
US_SC_DEVICE, US_PR_DEVICE, NULL,
US_FL_FIX_CAPACITY ),
/* Reported by Olaf Hering <olh@suse.de> from novell bug #105878 */ /* Reported by Olaf Hering <olh@suse.de> from novell bug #105878 */
UNUSUAL_DEV( 0x0424, 0x0fdc, 0x0210, 0x0210, UNUSUAL_DEV( 0x0424, 0x0fdc, 0x0210, 0x0210,
"SMSC", "SMSC",
...@@ -987,6 +1008,13 @@ UNUSUAL_DEV( 0x069b, 0x3004, 0x0001, 0x0001, ...@@ -987,6 +1008,13 @@ UNUSUAL_DEV( 0x069b, 0x3004, 0x0001, 0x0001,
US_SC_DEVICE, US_PR_DEVICE, NULL, US_SC_DEVICE, US_PR_DEVICE, NULL,
US_FL_FIX_CAPACITY ), US_FL_FIX_CAPACITY ),
/* Reported by Adrian Pilchowiec <adi1981@epf.pl> */
UNUSUAL_DEV( 0x071b, 0x3203, 0x0000, 0x0000,
"RockChip",
"MP3",
US_SC_DEVICE, US_PR_DEVICE, NULL,
US_FL_NO_WP_DETECT | US_FL_MAX_SECTORS_64),
/* Reported by Massimiliano Ghilardi <massimiliano.ghilardi@gmail.com> /* Reported by Massimiliano Ghilardi <massimiliano.ghilardi@gmail.com>
* This USB MP3/AVI player device fails and disconnects if more than 128 * This USB MP3/AVI player device fails and disconnects if more than 128
* sectors (64kB) are read/written in a single command, and may be present * sectors (64kB) are read/written in a single command, and may be present
...@@ -1576,7 +1604,6 @@ UNUSUAL_DEV( 0x10d6, 0x2200, 0x0100, 0x0100, ...@@ -1576,7 +1604,6 @@ UNUSUAL_DEV( 0x10d6, 0x2200, 0x0100, 0x0100,
US_SC_DEVICE, US_PR_DEVICE, NULL, US_SC_DEVICE, US_PR_DEVICE, NULL,
0), 0),
#ifdef CONFIG_USB_STORAGE_SIERRA
/* Reported by Kevin Lloyd <linux@sierrawireless.com> /* Reported by Kevin Lloyd <linux@sierrawireless.com>
* Entry is needed for the initializer function override, * Entry is needed for the initializer function override,
* which instructs the device to load as a modem * which instructs the device to load as a modem
...@@ -1587,7 +1614,6 @@ UNUSUAL_DEV( 0x1199, 0x0fff, 0x0000, 0x9999, ...@@ -1587,7 +1614,6 @@ UNUSUAL_DEV( 0x1199, 0x0fff, 0x0000, 0x9999,
"USB MMC Storage", "USB MMC Storage",
US_SC_DEVICE, US_PR_DEVICE, sierra_ms_init, US_SC_DEVICE, US_PR_DEVICE, sierra_ms_init,
0), 0),
#endif
/* Reported by Jaco Kroon <jaco@kroon.co.za> /* Reported by Jaco Kroon <jaco@kroon.co.za>
* The usb-storage module found on the Digitech GNX4 (and supposedly other * The usb-storage module found on the Digitech GNX4 (and supposedly other
......
...@@ -102,9 +102,7 @@ ...@@ -102,9 +102,7 @@
#ifdef CONFIG_USB_STORAGE_CYPRESS_ATACB #ifdef CONFIG_USB_STORAGE_CYPRESS_ATACB
#include "cypress_atacb.h" #include "cypress_atacb.h"
#endif #endif
#ifdef CONFIG_USB_STORAGE_SIERRA
#include "sierra_ms.h" #include "sierra_ms.h"
#endif
/* Some informational data */ /* Some informational data */
MODULE_AUTHOR("Matthew Dharm <mdharm-usb@one-eyed-alien.net>"); MODULE_AUTHOR("Matthew Dharm <mdharm-usb@one-eyed-alien.net>");
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment