|
@@ -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,
|
|
|
};
|
|
|
|
|
|
|