Commit fc6cc979 authored by Al Viro's avatar Al Viro

whiteheat: switch to ->get_serial()

... and fix the return value - on success it used to have ioctl(2)
fill the user-supplied struct serial_struct and return -ENOTTY.
Reviewed-by: default avatarJohan Hovold <johan@kernel.org>
Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent 57e57236
...@@ -83,8 +83,8 @@ static int whiteheat_port_remove(struct usb_serial_port *port); ...@@ -83,8 +83,8 @@ static int whiteheat_port_remove(struct usb_serial_port *port);
static int whiteheat_open(struct tty_struct *tty, static int whiteheat_open(struct tty_struct *tty,
struct usb_serial_port *port); struct usb_serial_port *port);
static void whiteheat_close(struct usb_serial_port *port); static void whiteheat_close(struct usb_serial_port *port);
static int whiteheat_ioctl(struct tty_struct *tty, static int whiteheat_get_serial(struct tty_struct *tty,
unsigned int cmd, unsigned long arg); struct serial_struct *ss);
static void whiteheat_set_termios(struct tty_struct *tty, static void whiteheat_set_termios(struct tty_struct *tty,
struct usb_serial_port *port, struct ktermios *old); struct usb_serial_port *port, struct ktermios *old);
static int whiteheat_tiocmget(struct tty_struct *tty); static int whiteheat_tiocmget(struct tty_struct *tty);
...@@ -120,7 +120,7 @@ static struct usb_serial_driver whiteheat_device = { ...@@ -120,7 +120,7 @@ static struct usb_serial_driver whiteheat_device = {
.port_remove = whiteheat_port_remove, .port_remove = whiteheat_port_remove,
.open = whiteheat_open, .open = whiteheat_open,
.close = whiteheat_close, .close = whiteheat_close,
.ioctl = whiteheat_ioctl, .get_serial = whiteheat_get_serial,
.set_termios = whiteheat_set_termios, .set_termios = whiteheat_set_termios,
.break_ctl = whiteheat_break_ctl, .break_ctl = whiteheat_break_ctl,
.tiocmget = whiteheat_tiocmget, .tiocmget = whiteheat_tiocmget,
...@@ -442,33 +442,21 @@ static int whiteheat_tiocmset(struct tty_struct *tty, ...@@ -442,33 +442,21 @@ static int whiteheat_tiocmset(struct tty_struct *tty,
} }
static int whiteheat_ioctl(struct tty_struct *tty, static int whiteheat_get_serial(struct tty_struct *tty,
unsigned int cmd, unsigned long arg) struct serial_struct *ss)
{ {
struct usb_serial_port *port = tty->driver_data; struct usb_serial_port *port = tty->driver_data;
struct serial_struct serstruct;
void __user *user_arg = (void __user *)arg;
switch (cmd) {
case TIOCGSERIAL:
memset(&serstruct, 0, sizeof(serstruct));
serstruct.type = PORT_16654;
serstruct.line = port->minor;
serstruct.port = port->port_number;
serstruct.xmit_fifo_size = kfifo_size(&port->write_fifo);
serstruct.custom_divisor = 0;
serstruct.baud_base = 460800;
serstruct.close_delay = CLOSING_DELAY;
serstruct.closing_wait = CLOSING_DELAY;
if (copy_to_user(user_arg, &serstruct, sizeof(serstruct)))
return -EFAULT;
break;
default:
break;
}
return -ENOIOCTLCMD; ss->type = PORT_16654;
ss->line = port->minor;
ss->port = port->port_number;
ss->xmit_fifo_size = kfifo_size(&port->write_fifo);
ss->custom_divisor = 0;
ss->baud_base = 460800;
ss->close_delay = CLOSING_DELAY;
ss->closing_wait = CLOSING_DELAY;
return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment