u8 dtr_state;
        unsigned tx_urb_used:1;
 
+       struct tty_port port;
        /* from usb_serial_port */
        struct tty_struct *tty;
-       int open_count;
        spinlock_t serial_lock;
 
        int (*write_data) (struct hso_serial *serial);
        struct urb *urb;
 
        urb = serial->rx_urb[0];
-       if (serial->open_count > 0) {
+       if (serial->port.count > 0) {
                count = put_rxbuf_data(urb, serial);
                if (count == -1)
                        return;
        DUMP1(urb->transfer_buffer, urb->actual_length);
 
        /* Anyone listening? */
-       if (serial->open_count == 0)
+       if (serial->port.count == 0)
                return;
 
        if (status == 0) {
        spin_unlock_irq(&serial->serial_lock);
 
        /* check for port already opened, if not set the termios */
-       serial->open_count++;
-       if (serial->open_count == 1) {
+       serial->port.count++;
+       if (serial->port.count == 1) {
                serial->rx_state = RX_IDLE;
                /* Force default termio settings */
                _hso_serial_set_termios(tty, NULL);
                result = hso_start_serial_device(serial->parent, GFP_KERNEL);
                if (result) {
                        hso_stop_serial_device(serial->parent);
-                       serial->open_count--;
+                       serial->port.count--;
                        kref_put(&serial->parent->ref, hso_serial_ref_free);
                }
        } else {
 
        /* reset the rts and dtr */
        /* do the actual close */
-       serial->open_count--;
+       serial->port.count--;
 
-       if (serial->open_count <= 0) {
-               serial->open_count = 0;
+       if (serial->port.count <= 0) {
+               serial->port.count = 0;
                spin_lock_irq(&serial->serial_lock);
                if (serial->tty == tty) {
                        serial->tty->driver_data = NULL;
 
        /* the actual setup */
        spin_lock_irqsave(&serial->serial_lock, flags);
-       if (serial->open_count)
+       if (serial->port.count)
                _hso_serial_set_termios(tty, old);
        else
                tty->termios = old;
                                D1("Pending read interrupt on port %d\n", i);
                                spin_lock(&serial->serial_lock);
                                if (serial->rx_state == RX_IDLE &&
-                                       serial->open_count > 0) {
+                                       serial->port.count > 0) {
                                        /* Setup and send a ctrl req read on
                                         * port i */
                                        if (!serial->rx_urb_filled[0]) {
        serial->minor = minor;
        serial->magic = HSO_SERIAL_MAGIC;
        spin_lock_init(&serial->serial_lock);
+       tty_port_init(&serial->port);
        serial->num_rx_urbs = num_urbs;
 
        /* RX, allocate urb and initialize */
        /* Start all serial ports */
        for (i = 0; i < HSO_SERIAL_TTY_MINORS; i++) {
                if (serial_table[i] && (serial_table[i]->interface == iface)) {
-                       if (dev2ser(serial_table[i])->open_count) {
+                       if (dev2ser(serial_table[i])->port.count) {
                                result =
                                    hso_start_serial_device(serial_table[i], GFP_NOIO);
                                hso_kick_transmit(dev2ser(serial_table[i]));