USB: serial: omninet: fix reference leaks at open
[firefly-linux-kernel-4.4.55.git] / drivers / usb / serial / cyberjack.c
index 0ac3b3b3236c5f3e6982aa07f602a3b36afc15e7..8948f375e75d24c55fbcb7af9c87a04c2f835f7b 100644 (file)
@@ -50,6 +50,7 @@
 #define CYBERJACK_PRODUCT_ID   0x0100
 
 /* Function prototypes */
+static int cyberjack_attach(struct usb_serial *serial);
 static int cyberjack_port_probe(struct usb_serial_port *port);
 static int cyberjack_port_remove(struct usb_serial_port *port);
 static int  cyberjack_open(struct tty_struct *tty,
@@ -77,6 +78,7 @@ static struct usb_serial_driver cyberjack_device = {
        .description =          "Reiner SCT Cyberjack USB card reader",
        .id_table =             id_table,
        .num_ports =            1,
+       .attach =               cyberjack_attach,
        .port_probe =           cyberjack_port_probe,
        .port_remove =          cyberjack_port_remove,
        .open =                 cyberjack_open,
@@ -100,6 +102,14 @@ struct cyberjack_private {
        short           wrsent;         /* Data already sent */
 };
 
+static int cyberjack_attach(struct usb_serial *serial)
+{
+       if (serial->num_bulk_out < serial->num_ports)
+               return -ENODEV;
+
+       return 0;
+}
+
 static int cyberjack_port_probe(struct usb_serial_port *port)
 {
        struct cyberjack_private *priv;
@@ -220,7 +230,7 @@ static int cyberjack_write(struct tty_struct *tty,
                result = usb_submit_urb(port->write_urb, GFP_ATOMIC);
                if (result) {
                        dev_err(&port->dev,
-                               "%s - failed submitting write urb, error %d",
+                               "%s - failed submitting write urb, error %d\n",
                                __func__, result);
                        /* Throw away data. No better idea what to do with it. */
                        priv->wrfilled = 0;