TTY: 68328serial, use tty from tty_port
authorJiri Slaby <jslaby@suse.cz>
Mon, 2 Apr 2012 11:54:45 +0000 (13:54 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 9 Apr 2012 19:02:45 +0000 (12:02 -0700)
And refcount that properly.

Signed-off-by: Jiri Slaby <jslaby@suse.cz>
Cc: Geert Uytterhoeven <geert@linux-m68k.org>
Cc: linux-m68k@lists.linux-m68k.org
Acked-by: Greg Ungerer <gerg@uclinux.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/tty/serial/68328serial.c

index fde573b32ce0b90e3aaa1af8fc8855e7ec34c12e..77e10bb89e4b545771ebb02ec722fe0e3a130275 100644 (file)
@@ -114,7 +114,6 @@ struct m68k_serial {
        int                     port;
        int                     irq;
        int                     type;           /* UART type */
-       struct tty_struct       *tty;
        int                     custom_divisor;
        int                     x_char;         /* xon/xoff character */
        int                     line;
@@ -356,7 +355,7 @@ clear_and_return:
 irqreturn_t rs_interrupt(int irq, void *dev_id)
 {
        struct m68k_serial *info = dev_id;
-       struct tty_struct *tty = info->tty;
+       struct tty_struct *tty = tty_port_tty_get(&info->tport);
        m68328_uart *uart;
        unsigned short rx;
        unsigned short tx;
@@ -374,6 +373,8 @@ irqreturn_t rs_interrupt(int irq, void *dev_id)
 #else
        receive_chars(info, tty, rx);
 #endif
+       tty_kref_put(tty);
+
        return IRQ_HANDLED;
 }
 
@@ -1062,7 +1063,7 @@ static void rs_close(struct tty_struct *tty, struct file * filp)
                
        tty_ldisc_flush(tty);
        tty->closing = 0;
-       info->tty = NULL;
+       tty_port_tty_set(&info->tport, NULL);
 #warning "This is not and has never been valid so fix it"      
 #if 0
        if (tty->ldisc.num != ldiscs[N_TTY].num) {
@@ -1098,7 +1099,7 @@ void rs_hangup(struct tty_struct *tty)
        shutdown(info, tty);
        info->tport.count = 0;
        info->tport.flags &= ~ASYNC_NORMAL_ACTIVE;
-       info->tty = NULL;
+       tty_port_tty_set(&info->tport, NULL);
        wake_up_interruptible(&info->tport.open_wait);
 }
 
@@ -1210,7 +1211,7 @@ int rs_open(struct tty_struct *tty, struct file * filp)
 
        info->tport.count++;
        tty->driver_data = info;
-       info->tty = tty;
+       tty_port_tty_set(&info->tport, tty);
 
        /*
         * Start up serial port
@@ -1289,7 +1290,6 @@ rs68328_init(void)
            tty_port_init(&info->tport);
            info->magic = SERIAL_MAGIC;
            info->port = (int) &uart_addr[i];
-           info->tty = NULL;
            info->irq = uart_irqs[i];
            info->custom_divisor = 16;
            info->x_char = 0;