forked from Minki/linux
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: Michal Hybner <dta081@gmail.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
f02fe890ec
commit
53e77df25f
@ -47,6 +47,7 @@
|
||||
#include <linux/usb.h>
|
||||
#include <linux/usb/serial.h>
|
||||
#include <linux/uaccess.h>
|
||||
#include "usb-wwan.h"
|
||||
|
||||
/*
|
||||
* Version Information
|
||||
@ -185,7 +186,7 @@ static int ipw_open(struct tty_struct *tty, struct usb_serial_port *port)
|
||||
|
||||
/*--2: Start reading from the device */
|
||||
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 */
|
||||
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)
|
||||
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)
|
||||
{
|
||||
struct usb_device *dev = port->serial->dev;
|
||||
@ -285,7 +309,7 @@ static void ipw_close(struct usb_serial_port *port)
|
||||
dev_err(&port->dev,
|
||||
"Disabling bulk RxRead failed (error = %d)\n", result);
|
||||
|
||||
usb_serial_generic_close(port);
|
||||
usb_wwan_close(port);
|
||||
}
|
||||
|
||||
static struct usb_serial_driver ipw_device = {
|
||||
@ -297,9 +321,14 @@ static struct usb_serial_driver ipw_device = {
|
||||
.usb_driver = &usb_ipw_driver,
|
||||
.id_table = usb_ipw_ids,
|
||||
.num_ports = 1,
|
||||
.disconnect = usb_wwan_disconnect,
|
||||
.open = ipw_open,
|
||||
.close = ipw_close,
|
||||
.probe = ipw_probe,
|
||||
.attach = usb_wwan_startup,
|
||||
.release = ipw_release,
|
||||
.dtr_rts = ipw_dtr_rts,
|
||||
.write = usb_wwan_write,
|
||||
};
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user