86 lines
2.6 KiB
Diff
86 lines
2.6 KiB
Diff
From: Matthew Garrett <mjg@redhat.com>
|
|
Date: Thu, 1 Apr 2010 12:31:09 -0400
|
|
Subject: [PATCH] USB: qcserial: Use generic USB wwan code
|
|
|
|
commit 3d7e59ad88fdb6bc50ae9b7e822d4bb5f68b68f9 upstream.
|
|
|
|
Make qcserial use the generic USB wwan code. This should result in a
|
|
performance improvement.
|
|
|
|
Signed-off-by: Matthew Garrett <mjg@redhat.com>
|
|
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
|
|
---
|
|
drivers/usb/serial/Kconfig | 1 +
|
|
drivers/usb/serial/qcserial.c | 22 ++++++++++++++++++++++
|
|
2 files changed, 23 insertions(+), 0 deletions(-)
|
|
|
|
diff --git a/drivers/usb/serial/Kconfig b/drivers/usb/serial/Kconfig
|
|
index fdc889d..efb6dc7 100644
|
|
--- a/drivers/usb/serial/Kconfig
|
|
+++ b/drivers/usb/serial/Kconfig
|
|
@@ -485,6 +485,7 @@ config USB_SERIAL_QCAUX
|
|
|
|
config USB_SERIAL_QUALCOMM
|
|
tristate "USB Qualcomm Serial modem"
|
|
+ select USB_SERIAL_WWAN
|
|
help
|
|
Say Y here if you have a Qualcomm USB modem device. These are
|
|
usually wireless cellular modems.
|
|
diff --git a/drivers/usb/serial/qcserial.c b/drivers/usb/serial/qcserial.c
|
|
index 53a2d5a..9215f6c 100644
|
|
--- a/drivers/usb/serial/qcserial.c
|
|
+++ b/drivers/usb/serial/qcserial.c
|
|
@@ -15,6 +15,8 @@
|
|
#include <linux/tty_flip.h>
|
|
#include <linux/usb.h>
|
|
#include <linux/usb/serial.h>
|
|
+#include <linux/slab.h>
|
|
+#include "usb-wwan.h"
|
|
|
|
#define DRIVER_AUTHOR "Qualcomm Inc"
|
|
#define DRIVER_DESC "Qualcomm USB Serial driver"
|
|
@@ -92,6 +94,7 @@ static struct usb_driver qcdriver = {
|
|
|
|
static int qcprobe(struct usb_serial *serial, const struct usb_device_id *id)
|
|
{
|
|
+ struct usb_wwan_intf_private *data;
|
|
int retval = -ENODEV;
|
|
__u8 nintf;
|
|
__u8 ifnum;
|
|
@@ -103,6 +106,13 @@ static int qcprobe(struct usb_serial *serial, const struct usb_device_id *id)
|
|
ifnum = serial->interface->cur_altsetting->desc.bInterfaceNumber;
|
|
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) {
|
|
case 1:
|
|
/* QDL mode */
|
|
@@ -161,6 +171,18 @@ static struct usb_serial_driver qcdevice = {
|
|
.usb_driver = &qcdriver,
|
|
.num_ports = 1,
|
|
.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)
|
|
--
|
|
1.7.1
|
|
|