USB: pl2303: initial TIOCGSERIAL support
authorJohn Tsiombikas <nuclear@member.fsf.org>
Thu, 25 Feb 2010 15:09:08 +0000 (17:09 +0200)
committerGreg Kroah-Hartman <gregkh@suse.de>
Tue, 2 Mar 2010 22:55:17 +0000 (14:55 -0800)
I've got a trivial patch for the pl2303 driver, that's what I needed to
make the wacom serial tablet driver work properly. It uses the
TIOCGSERIAL ioctl to determine if it's talking to a serial device or
not, which I gather is rather common, but the pl2303 driver didn't
implement that ioctl.

Here's a patch, I'm not sure it's absolutely correct, I mostly looked at
other similar usbserial drivers to see what I must do, but it works for
me.

Signed-off-by: John Tsiombikas <nuclear@member.fsf.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/usb/serial/pl2303.c

index 571dcf182866f3b141ee31ee1aff41ba4c52e72a..895d0722183e1c9800f9e41ea056af26966d7bcd 100644 (file)
@@ -895,10 +895,23 @@ static int wait_modem_info(struct usb_serial_port *port, unsigned int arg)
 static int pl2303_ioctl(struct tty_struct *tty, struct file *file,
                        unsigned int cmd, unsigned long arg)
 {
+       struct serial_struct ser;
        struct usb_serial_port *port = tty->driver_data;
        dbg("%s (%d) cmd = 0x%04x", __func__, port->number, cmd);
 
        switch (cmd) {
+       case TIOCGSERIAL:
+               memset(&ser, 0, sizeof ser);
+               ser.type = PORT_16654;
+               ser.line = port->serial->minor;
+               ser.port = port->number;
+               ser.baud_base = 460800;
+
+               if (copy_to_user((void __user *)arg, &ser, sizeof ser))
+                       return -EFAULT;
+
+               return 0;
+
        case TIOCMIWAIT:
                dbg("%s (%d) TIOCMIWAIT", __func__,  port->number);
                return wait_modem_info(port, arg);