|
@@ -397,27 +397,33 @@ err_free:
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
+static int ark3116_get_serial_info(struct usb_serial_port *port,
|
|
|
+ struct serial_struct __user *retinfo)
|
|
|
+{
|
|
|
+ struct serial_struct tmp;
|
|
|
+
|
|
|
+ memset(&tmp, 0, sizeof(tmp));
|
|
|
+
|
|
|
+ tmp.type = PORT_16654;
|
|
|
+ tmp.line = port->minor;
|
|
|
+ tmp.port = port->port_number;
|
|
|
+ tmp.baud_base = 460800;
|
|
|
+
|
|
|
+ if (copy_to_user(retinfo, &tmp, sizeof(tmp)))
|
|
|
+ return -EFAULT;
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
static int ark3116_ioctl(struct tty_struct *tty,
|
|
|
unsigned int cmd, unsigned long arg)
|
|
|
{
|
|
|
struct usb_serial_port *port = tty->driver_data;
|
|
|
- struct serial_struct serstruct;
|
|
|
void __user *user_arg = (void __user *)arg;
|
|
|
|
|
|
switch (cmd) {
|
|
|
case TIOCGSERIAL:
|
|
|
- /* XXX: Some of these values are probably wrong. */
|
|
|
- memset(&serstruct, 0, sizeof(serstruct));
|
|
|
- serstruct.type = PORT_16654;
|
|
|
- serstruct.line = port->minor;
|
|
|
- serstruct.port = port->port_number;
|
|
|
- serstruct.custom_divisor = 0;
|
|
|
- serstruct.baud_base = 460800;
|
|
|
-
|
|
|
- if (copy_to_user(user_arg, &serstruct, sizeof(serstruct)))
|
|
|
- return -EFAULT;
|
|
|
-
|
|
|
- return 0;
|
|
|
+ return ark3116_get_serial_info(port, user_arg);
|
|
|
default:
|
|
|
break;
|
|
|
}
|