USB-serial updates for v3.19-rc1
These changes add a new "simple" driver for Google USB-serial devices and add support for Huawei Gobi modems to qcserial. Included are also some removals of unnecessary atomic allocations and a few spelling fixes. Signed-off-by: Johan Hovold <johan@kernel.org> -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iQIcBAABAgAGBQJUdgpuAAoJEEEN5E/e4bSVaJQQALOUxnD2buLDycTzKDhaPfxd iRAHkPWWFOnMGiSQ2gzxgYVVg+qqFMPZkRSHo+/eBpOjKZsVITavyD3W0h5JHJ9S yOCH3/tSU1w6P5zTN22qwrOvQ0R1+h+KSc7r8c2tXw2G8DXDog4qKDWRAh0IJiro E6qR9yvTcwgXWXN4eMsmUNotiC7lMeMpk1pW8BJlALQ66CNkCJNQ6j5J0d9L8pTA JaTBgMFWOniSVLGvWz6ylBEN3Xd8OWcHKpDsJoLIm/urWLazhjMtQpr//YsyyIvl uFVB7ejt2fi18ae+2Tv3VojGYuY5Hk4oRgtZjoTceSks65HBSdNnqcUXrWkJOMLy So59wUzZMD2KVjtVW1vzLtwcZwbyrVntW+8Nm7skFDVVBY041r5fgsIJ1weWz7c4 sGUmF0Gkr/rK8yn6BPoUvRun5hdxySr1dl+sTZdD+ATwZpAV6YsThwd38csFxeG5 MLKFbksm2dFCyczyINkp/39bHlWr8LQmZbuxHa09sklaM97z08duuDJlTdcUK089 ZDRI1kviGYeib4OXljHXrWV1E9FVE85kkKBL9BHYfX85nf8RVv++ZB1vqYjQfhUJ Pj7vXsae++e4AeAZNTE8060QLgpSZMAVqOwAuous+mb0piPp5uHYhBmrQhPqhcXP 5zPUrKOL63AsTnKNgHyX =m/eD -----END PGP SIGNATURE----- Merge tag 'usb-serial-3.19-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/johan/usb-serial into usb-next Johan writes: USB-serial updates for v3.19-rc1 These changes add a new "simple" driver for Google USB-serial devices and add support for Huawei Gobi modems to qcserial. Included are also some removals of unnecessary atomic allocations and a few spelling fixes. Signed-off-by: Johan Hovold <johan@kernel.org>
This commit is contained in:
commit
9f10adc544
@ -145,7 +145,7 @@ Keyspan PDA Serial Adapter
|
||||
Single port DB-9 serial adapter, pushed as a PDA adapter for iMacs (mostly
|
||||
sold in Macintosh catalogs, comes in a translucent white/green dongle).
|
||||
Fairly simple device. Firmware is homebrew.
|
||||
This driver also works for the Xircom/Entrgra single port serial adapter.
|
||||
This driver also works for the Xircom/Entrega single port serial adapter.
|
||||
|
||||
Current status:
|
||||
Things that work:
|
||||
|
@ -60,6 +60,7 @@ config USB_SERIAL_SIMPLE
|
||||
- Suunto ANT+ USB device.
|
||||
- Medtronic CareLink USB device
|
||||
- Fundamental Software dongle.
|
||||
- Google USB serial devices
|
||||
- HP4x calculators
|
||||
- a number of Motorola phones
|
||||
- Novatel Wireless GPS receivers
|
||||
@ -606,10 +607,10 @@ config USB_SERIAL_CYBERJACK
|
||||
If unsure, say N.
|
||||
|
||||
config USB_SERIAL_XIRCOM
|
||||
tristate "USB Xircom / Entregra Single Port Serial Driver"
|
||||
tristate "USB Xircom / Entrega Single Port Serial Driver"
|
||||
select USB_EZUSB_FX2
|
||||
help
|
||||
Say Y here if you want to use a Xircom or Entregra single port USB to
|
||||
Say Y here if you want to use a Xircom or Entrega single port USB to
|
||||
serial converter device. This driver makes use of firmware
|
||||
developed from scratch by Brian Warner.
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* USB Keyspan PDA / Xircom / Entregra Converter driver
|
||||
* USB Keyspan PDA / Xircom / Entrega Converter driver
|
||||
*
|
||||
* Copyright (C) 1999 - 2001 Greg Kroah-Hartman <greg@kroah.com>
|
||||
* Copyright (C) 1999, 2000 Brian Warner <warner@lothar.com>
|
||||
@ -58,11 +58,11 @@ struct keyspan_pda_private {
|
||||
#define KEYSPAN_PDA_FAKE_ID 0x0103
|
||||
#define KEYSPAN_PDA_ID 0x0104 /* no clue */
|
||||
|
||||
/* For Xircom PGSDB9 and older Entregra version of the same device */
|
||||
/* For Xircom PGSDB9 and older Entrega version of the same device */
|
||||
#define XIRCOM_VENDOR_ID 0x085a
|
||||
#define XIRCOM_FAKE_ID 0x8027
|
||||
#define ENTREGRA_VENDOR_ID 0x1645
|
||||
#define ENTREGRA_FAKE_ID 0x8093
|
||||
#define ENTREGA_VENDOR_ID 0x1645
|
||||
#define ENTREGA_FAKE_ID 0x8093
|
||||
|
||||
static const struct usb_device_id id_table_combined[] = {
|
||||
#ifdef KEYSPAN
|
||||
@ -70,7 +70,7 @@ static const struct usb_device_id id_table_combined[] = {
|
||||
#endif
|
||||
#ifdef XIRCOM
|
||||
{ USB_DEVICE(XIRCOM_VENDOR_ID, XIRCOM_FAKE_ID) },
|
||||
{ USB_DEVICE(ENTREGRA_VENDOR_ID, ENTREGRA_FAKE_ID) },
|
||||
{ USB_DEVICE(ENTREGA_VENDOR_ID, ENTREGA_FAKE_ID) },
|
||||
#endif
|
||||
{ USB_DEVICE(KEYSPAN_VENDOR_ID, KEYSPAN_PDA_ID) },
|
||||
{ } /* Terminating entry */
|
||||
@ -93,7 +93,7 @@ static const struct usb_device_id id_table_fake[] = {
|
||||
#ifdef XIRCOM
|
||||
static const struct usb_device_id id_table_fake_xircom[] = {
|
||||
{ USB_DEVICE(XIRCOM_VENDOR_ID, XIRCOM_FAKE_ID) },
|
||||
{ USB_DEVICE(ENTREGRA_VENDOR_ID, ENTREGRA_FAKE_ID) },
|
||||
{ USB_DEVICE(ENTREGA_VENDOR_ID, ENTREGA_FAKE_ID) },
|
||||
{ }
|
||||
};
|
||||
#endif
|
||||
@ -667,7 +667,7 @@ static int keyspan_pda_fake_startup(struct usb_serial *serial)
|
||||
#endif
|
||||
#ifdef XIRCOM
|
||||
else if ((le16_to_cpu(serial->dev->descriptor.idVendor) == XIRCOM_VENDOR_ID) ||
|
||||
(le16_to_cpu(serial->dev->descriptor.idVendor) == ENTREGRA_VENDOR_ID))
|
||||
(le16_to_cpu(serial->dev->descriptor.idVendor) == ENTREGA_VENDOR_ID))
|
||||
fw_name = "keyspan_pda/xircom_pgs.fw";
|
||||
#endif
|
||||
else {
|
||||
@ -744,7 +744,7 @@ static struct usb_serial_driver xircom_pgs_fake_device = {
|
||||
.owner = THIS_MODULE,
|
||||
.name = "xircom_no_firm",
|
||||
},
|
||||
.description = "Xircom / Entregra PGS - (prerenumeration)",
|
||||
.description = "Xircom / Entrega PGS - (prerenumeration)",
|
||||
.id_table = id_table_fake_xircom,
|
||||
.num_ports = 1,
|
||||
.attach = keyspan_pda_fake_startup,
|
||||
|
@ -244,7 +244,7 @@ static int kobil_open(struct tty_struct *tty, struct usb_serial_port *port)
|
||||
priv->device_type == KOBIL_ADAPTER_B_PRODUCT_ID ||
|
||||
priv->device_type == KOBIL_KAAN_SIM_PRODUCT_ID) {
|
||||
/* start reading (Adapter B 'cause PNP string) */
|
||||
result = usb_submit_urb(port->interrupt_in_urb, GFP_ATOMIC);
|
||||
result = usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL);
|
||||
dev_dbg(dev, "%s - Send read URB returns: %i\n", __func__, result);
|
||||
}
|
||||
|
||||
|
@ -1657,7 +1657,7 @@ static void change_port_settings(struct tty_struct *tty,
|
||||
write_mos_reg(serial, port_number, IER, 0x0c);
|
||||
|
||||
if (port->read_urb->status != -EINPROGRESS) {
|
||||
status = usb_submit_urb(port->read_urb, GFP_ATOMIC);
|
||||
status = usb_submit_urb(port->read_urb, GFP_KERNEL);
|
||||
if (status)
|
||||
dev_dbg(&port->dev, "usb_submit_urb(read bulk) failed, status = %d\n", status);
|
||||
}
|
||||
@ -1702,7 +1702,7 @@ static void mos7720_set_termios(struct tty_struct *tty,
|
||||
change_port_settings(tty, mos7720_port, old_termios);
|
||||
|
||||
if (port->read_urb->status != -EINPROGRESS) {
|
||||
status = usb_submit_urb(port->read_urb, GFP_ATOMIC);
|
||||
status = usb_submit_urb(port->read_urb, GFP_KERNEL);
|
||||
if (status)
|
||||
dev_dbg(&port->dev, "usb_submit_urb(read bulk) failed, status = %d\n", status);
|
||||
}
|
||||
|
@ -1904,7 +1904,7 @@ static void mos7840_change_port_settings(struct tty_struct *tty,
|
||||
|
||||
if (mos7840_port->read_urb_busy == false) {
|
||||
mos7840_port->read_urb_busy = true;
|
||||
status = usb_submit_urb(mos7840_port->read_urb, GFP_ATOMIC);
|
||||
status = usb_submit_urb(mos7840_port->read_urb, GFP_KERNEL);
|
||||
if (status) {
|
||||
dev_dbg(&port->dev, "usb_submit_urb(read bulk) failed, status = %d\n",
|
||||
status);
|
||||
@ -1968,7 +1968,7 @@ static void mos7840_set_termios(struct tty_struct *tty,
|
||||
|
||||
if (mos7840_port->read_urb_busy == false) {
|
||||
mos7840_port->read_urb_busy = true;
|
||||
status = usb_submit_urb(mos7840_port->read_urb, GFP_ATOMIC);
|
||||
status = usb_submit_urb(mos7840_port->read_urb, GFP_KERNEL);
|
||||
if (status) {
|
||||
dev_dbg(&port->dev, "usb_submit_urb(read bulk) failed, status = %d\n",
|
||||
status);
|
||||
|
@ -27,12 +27,15 @@ enum qcserial_layouts {
|
||||
QCSERIAL_G2K = 0, /* Gobi 2000 */
|
||||
QCSERIAL_G1K = 1, /* Gobi 1000 */
|
||||
QCSERIAL_SWI = 2, /* Sierra Wireless */
|
||||
QCSERIAL_HWI = 3, /* Huawei */
|
||||
};
|
||||
|
||||
#define DEVICE_G1K(v, p) \
|
||||
USB_DEVICE(v, p), .driver_info = QCSERIAL_G1K
|
||||
#define DEVICE_SWI(v, p) \
|
||||
USB_DEVICE(v, p), .driver_info = QCSERIAL_SWI
|
||||
#define DEVICE_HWI(v, p) \
|
||||
USB_DEVICE(v, p), .driver_info = QCSERIAL_HWI
|
||||
|
||||
static const struct usb_device_id id_table[] = {
|
||||
/* Gobi 1000 devices */
|
||||
@ -157,6 +160,9 @@ static const struct usb_device_id id_table[] = {
|
||||
{DEVICE_SWI(0x413c, 0x81a8)}, /* Dell Wireless 5808 Gobi(TM) 4G LTE Mobile Broadband Card */
|
||||
{DEVICE_SWI(0x413c, 0x81a9)}, /* Dell Wireless 5808e Gobi(TM) 4G LTE Mobile Broadband Card */
|
||||
|
||||
/* Huawei devices */
|
||||
{DEVICE_HWI(0x03f0, 0x581d)}, /* HP lt4112 LTE/HSPA+ Gobi 4G Modem (Huawei me906e) */
|
||||
|
||||
{ } /* Terminating entry */
|
||||
};
|
||||
MODULE_DEVICE_TABLE(usb, id_table);
|
||||
@ -287,6 +293,33 @@ static int qcprobe(struct usb_serial *serial, const struct usb_device_id *id)
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case QCSERIAL_HWI:
|
||||
/*
|
||||
* Huawei layout:
|
||||
* 0: AT-capable modem port
|
||||
* 1: DM/DIAG
|
||||
* 2: AT-capable modem port
|
||||
* 3: CCID-compatible PCSC interface
|
||||
* 4: QMI/net
|
||||
* 5: NMEA
|
||||
*/
|
||||
switch (ifnum) {
|
||||
case 0:
|
||||
case 2:
|
||||
dev_dbg(dev, "Modem port found\n");
|
||||
break;
|
||||
case 1:
|
||||
dev_dbg(dev, "DM/DIAG interface found\n");
|
||||
break;
|
||||
case 5:
|
||||
dev_dbg(dev, "NMEA GPS interface found\n");
|
||||
break;
|
||||
default:
|
||||
/* don't claim any unsupported interface */
|
||||
altsetting = -1;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
dev_err(dev, "unsupported device layout type: %lu\n",
|
||||
id->driver_info);
|
||||
|
@ -56,6 +56,14 @@ DEVICE(funsoft, FUNSOFT_IDS);
|
||||
{ USB_DEVICE(0x8087, 0x0716) }
|
||||
DEVICE(flashloader, FLASHLOADER_IDS);
|
||||
|
||||
/* Google Serial USB SubClass */
|
||||
#define GOOGLE_IDS() \
|
||||
{ USB_VENDOR_AND_INTERFACE_INFO(0x18d1, \
|
||||
USB_CLASS_VENDOR_SPEC, \
|
||||
0x50, \
|
||||
0x01) }
|
||||
DEVICE(google, GOOGLE_IDS);
|
||||
|
||||
/* ViVOpay USB Serial Driver */
|
||||
#define VIVOPAY_IDS() \
|
||||
{ USB_DEVICE(0x1d5f, 0x1004) } /* ViVOpay 8800 */
|
||||
@ -97,6 +105,7 @@ static struct usb_serial_driver * const serial_drivers[] = {
|
||||
&zio_device,
|
||||
&funsoft_device,
|
||||
&flashloader_device,
|
||||
&google_device,
|
||||
&vivopay_device,
|
||||
&moto_modem_device,
|
||||
&novatel_gps_device,
|
||||
@ -111,6 +120,7 @@ static const struct usb_device_id id_table[] = {
|
||||
ZIO_IDS(),
|
||||
FUNSOFT_IDS(),
|
||||
FLASHLOADER_IDS(),
|
||||
GOOGLE_IDS(),
|
||||
VIVOPAY_IDS(),
|
||||
MOTO_IDS(),
|
||||
NOVATEL_IDS(),
|
||||
|
Loading…
Reference in New Issue
Block a user