diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/net/usb/hso.c | 55 |
1 files changed, 31 insertions, 24 deletions
diff --git a/drivers/net/usb/hso.c b/drivers/net/usb/hso.c index d345a6eec4ca..7373fb6b3f88 100644 --- a/drivers/net/usb/hso.c +++ b/drivers/net/usb/hso.c | |||
@@ -362,8 +362,6 @@ static struct tty_driver *tty_drv; | |||
362 | static struct hso_device *serial_table[HSO_SERIAL_TTY_MINORS]; | 362 | static struct hso_device *serial_table[HSO_SERIAL_TTY_MINORS]; |
363 | static struct hso_device *network_table[HSO_MAX_NET_DEVICES]; | 363 | static struct hso_device *network_table[HSO_MAX_NET_DEVICES]; |
364 | static spinlock_t serial_table_lock; | 364 | static spinlock_t serial_table_lock; |
365 | static struct ktermios *hso_serial_termios[HSO_SERIAL_TTY_MINORS]; | ||
366 | static struct ktermios *hso_serial_termios_locked[HSO_SERIAL_TTY_MINORS]; | ||
367 | 365 | ||
368 | static const s32 default_port_spec[] = { | 366 | static const s32 default_port_spec[] = { |
369 | HSO_INTF_MUX | HSO_PORT_NETWORK, | 367 | HSO_INTF_MUX | HSO_PORT_NETWORK, |
@@ -1009,23 +1007,11 @@ static void read_bulk_callback(struct urb *urb) | |||
1009 | 1007 | ||
1010 | /* Serial driver functions */ | 1008 | /* Serial driver functions */ |
1011 | 1009 | ||
1012 | static void _hso_serial_set_termios(struct tty_struct *tty, | 1010 | static void hso_init_termios(struct ktermios *termios) |
1013 | struct ktermios *old) | ||
1014 | { | 1011 | { |
1015 | struct hso_serial *serial = get_serial_by_tty(tty); | ||
1016 | struct ktermios *termios; | ||
1017 | |||
1018 | if (!serial) { | ||
1019 | printk(KERN_ERR "%s: no tty structures", __func__); | ||
1020 | return; | ||
1021 | } | ||
1022 | |||
1023 | D4("port %d", serial->minor); | ||
1024 | |||
1025 | /* | 1012 | /* |
1026 | * The default requirements for this device are: | 1013 | * The default requirements for this device are: |
1027 | */ | 1014 | */ |
1028 | termios = tty->termios; | ||
1029 | termios->c_iflag &= | 1015 | termios->c_iflag &= |
1030 | ~(IGNBRK /* disable ignore break */ | 1016 | ~(IGNBRK /* disable ignore break */ |
1031 | | BRKINT /* disable break causes interrupt */ | 1017 | | BRKINT /* disable break causes interrupt */ |
@@ -1057,15 +1043,38 @@ static void _hso_serial_set_termios(struct tty_struct *tty, | |||
1057 | termios->c_cflag |= CS8; /* character size 8 bits */ | 1043 | termios->c_cflag |= CS8; /* character size 8 bits */ |
1058 | 1044 | ||
1059 | /* baud rate 115200 */ | 1045 | /* baud rate 115200 */ |
1060 | tty_encode_baud_rate(tty, 115200, 115200); | 1046 | tty_termios_encode_baud_rate(termios, 115200, 115200); |
1047 | } | ||
1048 | |||
1049 | static void _hso_serial_set_termios(struct tty_struct *tty, | ||
1050 | struct ktermios *old) | ||
1051 | { | ||
1052 | struct hso_serial *serial = get_serial_by_tty(tty); | ||
1053 | struct ktermios *termios; | ||
1054 | |||
1055 | if (!serial) { | ||
1056 | printk(KERN_ERR "%s: no tty structures", __func__); | ||
1057 | return; | ||
1058 | } | ||
1059 | |||
1060 | D4("port %d", serial->minor); | ||
1061 | 1061 | ||
1062 | /* | 1062 | /* |
1063 | * Force low_latency on; otherwise the pushes are scheduled; | 1063 | * Fix up unsupported bits |
1064 | * this is bad as it opens up the possibility of dropping bytes | ||
1065 | * on the floor. We don't want to drop bytes on the floor. :) | ||
1066 | */ | 1064 | */ |
1067 | tty->low_latency = 1; | 1065 | termios = tty->termios; |
1068 | return; | 1066 | termios->c_iflag &= ~IXON; /* disable enable XON/XOFF flow control */ |
1067 | |||
1068 | termios->c_cflag &= | ||
1069 | ~(CSIZE /* no size */ | ||
1070 | | PARENB /* disable parity bit */ | ||
1071 | | CBAUD /* clear current baud rate */ | ||
1072 | | CBAUDEX); /* clear current buad rate */ | ||
1073 | |||
1074 | termios->c_cflag |= CS8; /* character size 8 bits */ | ||
1075 | |||
1076 | /* baud rate 115200 */ | ||
1077 | tty_encode_baud_rate(tty, 115200, 115200); | ||
1069 | } | 1078 | } |
1070 | 1079 | ||
1071 | static void hso_resubmit_rx_bulk_urb(struct hso_serial *serial, struct urb *urb) | 1080 | static void hso_resubmit_rx_bulk_urb(struct hso_serial *serial, struct urb *urb) |
@@ -2969,9 +2978,7 @@ static int __init hso_init(void) | |||
2969 | tty_drv->subtype = SERIAL_TYPE_NORMAL; | 2978 | tty_drv->subtype = SERIAL_TYPE_NORMAL; |
2970 | tty_drv->flags = TTY_DRIVER_REAL_RAW | TTY_DRIVER_DYNAMIC_DEV; | 2979 | tty_drv->flags = TTY_DRIVER_REAL_RAW | TTY_DRIVER_DYNAMIC_DEV; |
2971 | tty_drv->init_termios = tty_std_termios; | 2980 | tty_drv->init_termios = tty_std_termios; |
2972 | tty_drv->init_termios.c_cflag = B9600 | CS8 | CREAD | HUPCL | CLOCAL; | 2981 | hso_init_termios(&tty_drv->init_termios); |
2973 | tty_drv->termios = hso_serial_termios; | ||
2974 | tty_drv->termios_locked = hso_serial_termios_locked; | ||
2975 | tty_set_operations(tty_drv, &hso_serial_ops); | 2982 | tty_set_operations(tty_drv, &hso_serial_ops); |
2976 | 2983 | ||
2977 | /* register the tty driver */ | 2984 | /* register the tty driver */ |