Commit 53e77df2 authored by Oliver Neukum's avatar Oliver Neukum Committed by Greg Kroah-Hartman

USB: ipw: convert to usb-wwan framework

From 2d487c10136f76cf3705881d34868e8592839cfe Mon Sep 17 00:00:00 2001
From: Oliver Neukum <oliver@neukum.org>
Date: Tue, 12 Jul 2011 15:36:51 +0200
Subject: [PATCH] USB: ipw: convert to usb-wwan framework

This patch allows the ipw driver to use the multibuffer
infrastructure of usb-wwan. This improves speed.

Signed-off-by: Oliver Neukum<oneukum@suse.de>
Tested-by: default avatarMichal Hybner <dta081@gmail.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent f02fe890
...@@ -47,6 +47,7 @@ ...@@ -47,6 +47,7 @@
#include <linux/usb.h> #include <linux/usb.h>
#include <linux/usb/serial.h> #include <linux/usb/serial.h>
#include <linux/uaccess.h> #include <linux/uaccess.h>
#include "usb-wwan.h"
/* /*
* Version Information * Version Information
...@@ -185,7 +186,7 @@ static int ipw_open(struct tty_struct *tty, struct usb_serial_port *port) ...@@ -185,7 +186,7 @@ static int ipw_open(struct tty_struct *tty, struct usb_serial_port *port)
/*--2: Start reading from the device */ /*--2: Start reading from the device */
dbg("%s: setting up bulk read callback", __func__); dbg("%s: setting up bulk read callback", __func__);
usb_serial_generic_open(tty, port); usb_wwan_open(tty, port);
/*--3: Tell the modem to open the floodgates on the rx bulk channel */ /*--3: Tell the modem to open the floodgates on the rx bulk channel */
dbg("%s:asking modem for RxRead (RXBULK_ON)", __func__); dbg("%s:asking modem for RxRead (RXBULK_ON)", __func__);
...@@ -219,6 +220,29 @@ static int ipw_open(struct tty_struct *tty, struct usb_serial_port *port) ...@@ -219,6 +220,29 @@ static int ipw_open(struct tty_struct *tty, struct usb_serial_port *port)
return 0; return 0;
} }
/* fake probe - only to allocate data structures */
static int ipw_probe(struct usb_serial *serial, const struct usb_device_id *id)
{
struct usb_wwan_intf_private *data;
data = kzalloc(sizeof(struct usb_wwan_intf_private), GFP_KERNEL);
if (!data)
return -ENOMEM;
spin_lock_init(&data->susp_lock);
usb_set_serial_data(serial, data);
return 0;
}
static void ipw_release(struct usb_serial *serial)
{
struct usb_wwan_intf_private *data = usb_get_serial_data(serial);
usb_wwan_release(serial);
usb_set_serial_data(serial, NULL);
kfree(data);
}
static void ipw_dtr_rts(struct usb_serial_port *port, int on) static void ipw_dtr_rts(struct usb_serial_port *port, int on)
{ {
struct usb_device *dev = port->serial->dev; struct usb_device *dev = port->serial->dev;
...@@ -285,7 +309,7 @@ static void ipw_close(struct usb_serial_port *port) ...@@ -285,7 +309,7 @@ static void ipw_close(struct usb_serial_port *port)
dev_err(&port->dev, dev_err(&port->dev,
"Disabling bulk RxRead failed (error = %d)\n", result); "Disabling bulk RxRead failed (error = %d)\n", result);
usb_serial_generic_close(port); usb_wwan_close(port);
} }
static struct usb_serial_driver ipw_device = { static struct usb_serial_driver ipw_device = {
...@@ -297,9 +321,14 @@ static struct usb_serial_driver ipw_device = { ...@@ -297,9 +321,14 @@ static struct usb_serial_driver ipw_device = {
.usb_driver = &usb_ipw_driver, .usb_driver = &usb_ipw_driver,
.id_table = usb_ipw_ids, .id_table = usb_ipw_ids,
.num_ports = 1, .num_ports = 1,
.disconnect = usb_wwan_disconnect,
.open = ipw_open, .open = ipw_open,
.close = ipw_close, .close = ipw_close,
.probe = ipw_probe,
.attach = usb_wwan_startup,
.release = ipw_release,
.dtr_rts = ipw_dtr_rts, .dtr_rts = ipw_dtr_rts,
.write = usb_wwan_write,
}; };
......
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