|
|
@@ -556,9 +556,12 @@ static int f81232_open(struct tty_struct *tty, struct usb_serial_port *port)
|
|
|
|
|
|
static void f81232_close(struct usb_serial_port *port)
|
|
|
{
|
|
|
+ struct f81232_private *port_priv = usb_get_serial_port_data(port);
|
|
|
+
|
|
|
f81232_port_disable(port);
|
|
|
usb_serial_generic_close(port);
|
|
|
usb_kill_urb(port->interrupt_in_urb);
|
|
|
+ flush_work(&port_priv->interrupt_work);
|
|
|
}
|
|
|
|
|
|
static void f81232_dtr_rts(struct usb_serial_port *port, int on)
|
|
|
@@ -652,6 +655,40 @@ static int f81232_port_remove(struct usb_serial_port *port)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+static int f81232_suspend(struct usb_serial *serial, pm_message_t message)
|
|
|
+{
|
|
|
+ struct usb_serial_port *port = serial->port[0];
|
|
|
+ struct f81232_private *port_priv = usb_get_serial_port_data(port);
|
|
|
+ int i;
|
|
|
+
|
|
|
+ for (i = 0; i < ARRAY_SIZE(port->read_urbs); ++i)
|
|
|
+ usb_kill_urb(port->read_urbs[i]);
|
|
|
+
|
|
|
+ usb_kill_urb(port->interrupt_in_urb);
|
|
|
+
|
|
|
+ if (port_priv)
|
|
|
+ flush_work(&port_priv->interrupt_work);
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+static int f81232_resume(struct usb_serial *serial)
|
|
|
+{
|
|
|
+ struct usb_serial_port *port = serial->port[0];
|
|
|
+ int result;
|
|
|
+
|
|
|
+ if (tty_port_initialized(&port->port)) {
|
|
|
+ result = usb_submit_urb(port->interrupt_in_urb, GFP_NOIO);
|
|
|
+ if (result) {
|
|
|
+ dev_err(&port->dev, "submit interrupt urb failed: %d\n",
|
|
|
+ result);
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return usb_serial_generic_resume(serial);
|
|
|
+}
|
|
|
+
|
|
|
static struct usb_serial_driver f81232_device = {
|
|
|
.driver = {
|
|
|
.owner = THIS_MODULE,
|
|
|
@@ -675,6 +712,8 @@ static struct usb_serial_driver f81232_device = {
|
|
|
.read_int_callback = f81232_read_int_callback,
|
|
|
.port_probe = f81232_port_probe,
|
|
|
.port_remove = f81232_port_remove,
|
|
|
+ .suspend = f81232_suspend,
|
|
|
+ .resume = f81232_resume,
|
|
|
};
|
|
|
|
|
|
static struct usb_serial_driver * const serial_drivers[] = {
|