Merge commit 'v2.6.35-rc1' into for-2.6.36
[pandora-kernel.git] / drivers / usb / serial / console.c
index f347da2..1ee6b2a 100644 (file)
@@ -66,7 +66,7 @@ static int usb_console_setup(struct console *co, char *options)
        struct usb_serial_port *port;
        int retval;
        struct tty_struct *tty = NULL;
-       struct ktermios *termios = NULL, dummy;
+       struct ktermios dummy;
 
        dbg("%s", __func__);
 
@@ -141,15 +141,14 @@ static int usb_console_setup(struct console *co, char *options)
                                goto reset_open_count;
                        }
                        kref_init(&tty->kref);
-                       termios = kzalloc(sizeof(*termios), GFP_KERNEL);
-                       if (!termios) {
+                       tty_port_tty_set(&port->port, tty);
+                       tty->driver = usb_serial_tty_driver;
+                       tty->index = co->index;
+                       if (tty_init_termios(tty)) {
                                retval = -ENOMEM;
                                err("no more memory");
                                goto free_tty;
                        }
-                       memset(&dummy, 0, sizeof(struct ktermios));
-                       tty->termios = termios;
-                       tty_port_tty_set(&port->port, tty);
                }
 
                /* only call the device specific open if this
@@ -161,16 +160,16 @@ static int usb_console_setup(struct console *co, char *options)
 
                if (retval) {
                        err("could not open USB console port");
-                       goto free_termios;
+                       goto fail;
                }
 
                if (serial->type->set_termios) {
-                       termios->c_cflag = cflag;
-                       tty_termios_encode_baud_rate(termios, baud, baud);
+                       tty->termios->c_cflag = cflag;
+                       tty_termios_encode_baud_rate(tty->termios, baud, baud);
+                       memset(&dummy, 0, sizeof(struct ktermios));
                        serial->type->set_termios(tty, port, &dummy);
 
                        tty_port_tty_set(&port->port, NULL);
-                       kfree(termios);
                        kfree(tty);
                }
                set_bit(ASYNCB_INITIALIZED, &port->port.flags);
@@ -180,14 +179,12 @@ static int usb_console_setup(struct console *co, char *options)
        --port->port.count;
        /* The console is special in terms of closing the device so
         * indicate this port is now acting as a system console. */
-       port->console = 1;
        port->port.console = 1;
 
        mutex_unlock(&serial->disc_mutex);
        return retval;
 
- free_termios:
-       kfree(termios);
+ fail:
        tty_port_tty_set(&port->port, NULL);
  free_tty:
        kfree(tty);
@@ -217,7 +214,7 @@ static void usb_console_write(struct console *co,
 
        dbg("%s - port %d, %d byte(s)", __func__, port->number, count);
 
-       if (!port->console) {
+       if (!port->port.console) {
                dbg("%s - port not opened", __func__);
                return;
        }
@@ -313,7 +310,7 @@ void usb_serial_console_exit(void)
 {
        if (usbcons_info.port) {
                unregister_console(&usbcons);
-               usbcons_info.port->console = 0;
+               usbcons_info.port->port.console = 0;
                usbcons_info.port = NULL;
        }
 }