}
 EXPORT_SYMBOL(usb_wwan_suspend);
 
-static void play_delayed(struct usb_serial_port *port)
+static int play_delayed(struct usb_serial_port *port)
 {
        struct usb_wwan_intf_private *data;
        struct usb_wwan_port_private *portdata;
        struct urb *urb;
-       int err;
+       int err = 0;
 
        portdata = usb_get_serial_port_data(port);
        data = port->serial->private;
                        break;
                }
        }
+
+       return err;
 }
 
 int usb_wwan_resume(struct usb_serial *serial)
        struct usb_wwan_intf_private *intfdata = serial->private;
        struct usb_wwan_port_private *portdata;
        struct urb *urb;
-       int err = 0;
+       int err;
+       int err_count = 0;
 
        spin_lock_irq(&intfdata->susp_lock);
        for (i = 0; i < serial->num_ports; i++) {
                                dev_err(&port->dev,
                                        "%s: submit int urb failed: %d\n",
                                        __func__, err);
+                               err_count++;
                        }
                }
 
+               err = play_delayed(port);
+               if (err)
+                       err_count++;
+
                for (j = 0; j < N_IN_URB; j++) {
                        urb = portdata->in_urbs[j];
                        err = usb_submit_urb(urb, GFP_ATOMIC);
                        if (err < 0) {
                                dev_err(&port->dev, "%s: Error %d for bulk URB %d\n",
                                        __func__, err, i);
-                               spin_unlock_irq(&intfdata->susp_lock);
-                               goto err_out;
+                               err_count++;
                        }
                }
-               play_delayed(port);
        }
        intfdata->suspended = 0;
        spin_unlock_irq(&intfdata->susp_lock);
-err_out:
-       return err;
+
+       if (err_count)
+               return -EIO;
+
+       return 0;
 }
 EXPORT_SYMBOL(usb_wwan_resume);
 #endif