提交 3d7e59ad 编写于 作者: M Matthew Garrett 提交者: Greg Kroah-Hartman

USB: qcserial: Use generic USB wwan code

Make qcserial use the generic USB wwan code. This should result in a
performance improvement.
Signed-off-by: NMatthew Garrett <mjg@redhat.com>
Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
上级 8b4c6a3a
...@@ -485,6 +485,7 @@ config USB_SERIAL_QCAUX ...@@ -485,6 +485,7 @@ config USB_SERIAL_QCAUX
config USB_SERIAL_QUALCOMM config USB_SERIAL_QUALCOMM
tristate "USB Qualcomm Serial modem" tristate "USB Qualcomm Serial modem"
select USB_SERIAL_WWAN
help help
Say Y here if you have a Qualcomm USB modem device. These are Say Y here if you have a Qualcomm USB modem device. These are
usually wireless cellular modems. usually wireless cellular modems.
......
...@@ -15,6 +15,8 @@ ...@@ -15,6 +15,8 @@
#include <linux/tty_flip.h> #include <linux/tty_flip.h>
#include <linux/usb.h> #include <linux/usb.h>
#include <linux/usb/serial.h> #include <linux/usb/serial.h>
#include <linux/slab.h>
#include "usb-wwan.h"
#define DRIVER_AUTHOR "Qualcomm Inc" #define DRIVER_AUTHOR "Qualcomm Inc"
#define DRIVER_DESC "Qualcomm USB Serial driver" #define DRIVER_DESC "Qualcomm USB Serial driver"
...@@ -92,6 +94,7 @@ static struct usb_driver qcdriver = { ...@@ -92,6 +94,7 @@ static struct usb_driver qcdriver = {
static int qcprobe(struct usb_serial *serial, const struct usb_device_id *id) static int qcprobe(struct usb_serial *serial, const struct usb_device_id *id)
{ {
struct usb_wwan_intf_private *data;
int retval = -ENODEV; int retval = -ENODEV;
__u8 nintf; __u8 nintf;
__u8 ifnum; __u8 ifnum;
...@@ -103,6 +106,13 @@ static int qcprobe(struct usb_serial *serial, const struct usb_device_id *id) ...@@ -103,6 +106,13 @@ static int qcprobe(struct usb_serial *serial, const struct usb_device_id *id)
ifnum = serial->interface->cur_altsetting->desc.bInterfaceNumber; ifnum = serial->interface->cur_altsetting->desc.bInterfaceNumber;
dbg("This Interface = %d", ifnum); dbg("This Interface = %d", ifnum);
data = serial->private = kzalloc(sizeof(struct usb_wwan_intf_private),
GFP_KERNEL);
if (!data)
return -ENOMEM;
spin_lock_init(&data->susp_lock);
switch (nintf) { switch (nintf) {
case 1: case 1:
/* QDL mode */ /* QDL mode */
...@@ -161,6 +171,18 @@ static struct usb_serial_driver qcdevice = { ...@@ -161,6 +171,18 @@ static struct usb_serial_driver qcdevice = {
.usb_driver = &qcdriver, .usb_driver = &qcdriver,
.num_ports = 1, .num_ports = 1,
.probe = qcprobe, .probe = qcprobe,
.open = usb_wwan_open,
.close = usb_wwan_close,
.write = usb_wwan_write,
.write_room = usb_wwan_write_room,
.chars_in_buffer = usb_wwan_chars_in_buffer,
.attach = usb_wwan_startup,
.disconnect = usb_wwan_disconnect,
.release = usb_wwan_release,
#ifdef CONFIG_PM
.suspend = usb_wwan_suspend,
.resume = usb_wwan_resume,
#endif
}; };
static int __init qcinit(void) static int __init qcinit(void)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册