/* Structures and data needed to register tty driver */
 static struct tty_driver *sclp_vt220_driver;
 
-/* The tty_struct that the kernel associated with us */
-static struct tty_struct *sclp_vt220_tty;
+static struct tty_port sclp_vt220_port;
 
 /* Lock to protect internal data from concurrent access */
 static spinlock_t sclp_vt220_lock;
 static void
 sclp_vt220_process_queue(struct sclp_vt220_request *request)
 {
+       struct tty_struct *tty;
        unsigned long flags;
        void *page;
 
        if (request == NULL && sclp_vt220_flush_later)
                sclp_vt220_emit_current();
        /* Check if the tty needs a wake up call */
-       if (sclp_vt220_tty != NULL) {
-               tty_wakeup(sclp_vt220_tty);
+       tty = tty_port_tty_get(&sclp_vt220_port);
+       if (tty) {
+               tty_wakeup(tty);
+               tty_kref_put(tty);
        }
 }
 
 static void
 sclp_vt220_receiver_fn(struct evbuf_header *evbuf)
 {
+       struct tty_struct *tty = tty_port_tty_get(&sclp_vt220_port);
        char *buffer;
        unsigned int count;
 
        /* Ignore input if device is not open */
-       if (sclp_vt220_tty == NULL)
+       if (tty == NULL)
                return;
 
        buffer = (char *) ((addr_t) evbuf + sizeof(struct evbuf_header));
                /* Send input to line discipline */
                buffer++;
                count--;
-               tty_insert_flip_string(sclp_vt220_tty, buffer, count);
-               tty_flip_buffer_push(sclp_vt220_tty);
+               tty_insert_flip_string(tty, buffer, count);
+               tty_flip_buffer_push(tty);
                break;
        }
+       tty_kref_put(tty);
 }
 
 /*
 sclp_vt220_open(struct tty_struct *tty, struct file *filp)
 {
        if (tty->count == 1) {
-               sclp_vt220_tty = tty;
+               tty_port_tty_set(&sclp_vt220_port, tty);
                tty->driver_data = kmalloc(SCLP_VT220_BUF_SIZE, GFP_KERNEL);
                if (tty->driver_data == NULL)
                        return -ENOMEM;
 sclp_vt220_close(struct tty_struct *tty, struct file *filp)
 {
        if (tty->count == 1) {
-               sclp_vt220_tty = NULL;
+               tty_port_tty_set(&sclp_vt220_port, NULL);
                kfree(tty->driver_data);
                tty->driver_data = NULL;
        }
        INIT_LIST_HEAD(&sclp_vt220_empty);
        INIT_LIST_HEAD(&sclp_vt220_outqueue);
        init_timer(&sclp_vt220_timer);
+       tty_port_init(&sclp_vt220_port);
        sclp_vt220_current_request = NULL;
        sclp_vt220_buffered_chars = 0;
-       sclp_vt220_tty = NULL;
        sclp_vt220_flush_later = 0;
 
        /* Allocate pages for output buffering */