spin_unlock_irqrestore(&port->lock, flags);
 
        /* if we have a bulk endpoint, start reading from it */
-       if (serial->num_bulk_in) {
+       if (port->bulk_in_size) {
                /* Start reading from the device */
                usb_fill_bulk_urb(port->read_urb, serial->dev,
                                   usb_rcvbulkpipe(serial->dev,
        dbg("%s - port %d", __func__, port->number);
 
        if (serial->dev) {
-               /* shutdown any bulk reads that might be going on */
-               if (serial->num_bulk_out)
+               /* shutdown any bulk transfers that might be going on */
+               if (port->bulk_out_size)
                        usb_kill_urb(port->write_urb);
-               if (serial->num_bulk_in)
+               if (port->bulk_in_size)
                        usb_kill_urb(port->read_urb);
        }
 }
 
        dbg("%s - port %d", __func__, port->number);
 
+       /* only do something if we have a bulk out endpoint */
+       if (!port->bulk_out_size)
+               return -ENODEV;
+
        if (count == 0) {
                dbg("%s - write request of 0 bytes", __func__);
                return 0;
        }
 
-       /* only do something if we have a bulk out endpoint */
-       if (!serial->num_bulk_out)
-               return 0;
-
        if (serial->type->max_in_flight_urbs)
                return usb_serial_multi_urb_write(tty, port,
                                                  buf, count);
        int room = 0;
 
        dbg("%s - port %d", __func__, port->number);
+
+       if (!port->bulk_out_size)
+               return 0;
+
        spin_lock_irqsave(&port->lock, flags);
        if (serial->type->max_in_flight_urbs) {
                if (port->urbs_in_flight < serial->type->max_in_flight_urbs)
                        room = port->bulk_out_size *
                                (serial->type->max_in_flight_urbs -
                                 port->urbs_in_flight);
-       } else if (serial->num_bulk_out)
+       } else {
                room = kfifo_avail(&port->write_fifo);
+       }
        spin_unlock_irqrestore(&port->lock, flags);
 
        dbg("%s - returns %d", __func__, room);
 {
        struct usb_serial_port *port = tty->driver_data;
        struct usb_serial *serial = port->serial;
-       int chars = 0;
        unsigned long flags;
+       int chars;
 
        dbg("%s - port %d", __func__, port->number);
 
+       if (!port->bulk_out_size)
+               return 0;
+
        spin_lock_irqsave(&port->lock, flags);
        if (serial->type->max_in_flight_urbs)
                chars = port->tx_bytes_flight;
-       else if (serial->num_bulk_out)
+       else
                chars = kfifo_len(&port->write_fifo);
        spin_unlock_irqrestore(&port->lock, flags);