diff options
Diffstat (limited to 'drivers/usb/serial/mos7840.c')
-rw-r--r-- | drivers/usb/serial/mos7840.c | 48 |
1 files changed, 1 insertions, 47 deletions
diff --git a/drivers/usb/serial/mos7840.c b/drivers/usb/serial/mos7840.c index 84fb1dcd30dc..10b78a37214f 100644 --- a/drivers/usb/serial/mos7840.c +++ b/drivers/usb/serial/mos7840.c | |||
@@ -1135,54 +1135,12 @@ static int mos7840_chars_in_buffer(struct tty_struct *tty) | |||
1135 | 1135 | ||
1136 | } | 1136 | } |
1137 | 1137 | ||
1138 | /************************************************************************ | ||
1139 | * | ||
1140 | * mos7840_block_until_tx_empty | ||
1141 | * | ||
1142 | * This function will block the close until one of the following: | ||
1143 | * 1. TX count are 0 | ||
1144 | * 2. The mos7840 has stopped | ||
1145 | * 3. A timeout of 3 seconds without activity has expired | ||
1146 | * | ||
1147 | ************************************************************************/ | ||
1148 | static void mos7840_block_until_tx_empty(struct tty_struct *tty, | ||
1149 | struct moschip_port *mos7840_port) | ||
1150 | { | ||
1151 | int timeout = HZ / 10; | ||
1152 | int wait = 30; | ||
1153 | int count; | ||
1154 | |||
1155 | while (1) { | ||
1156 | |||
1157 | count = mos7840_chars_in_buffer(tty); | ||
1158 | |||
1159 | /* Check for Buffer status */ | ||
1160 | if (count <= 0) | ||
1161 | return; | ||
1162 | |||
1163 | /* Block the thread for a while */ | ||
1164 | interruptible_sleep_on_timeout(&mos7840_port->wait_chase, | ||
1165 | timeout); | ||
1166 | |||
1167 | /* No activity.. count down section */ | ||
1168 | wait--; | ||
1169 | if (wait == 0) { | ||
1170 | dbg("%s - TIMEOUT", __func__); | ||
1171 | return; | ||
1172 | } else { | ||
1173 | /* Reset timeout value back to seconds */ | ||
1174 | wait = 30; | ||
1175 | } | ||
1176 | } | ||
1177 | } | ||
1178 | |||
1179 | /***************************************************************************** | 1138 | /***************************************************************************** |
1180 | * mos7840_close | 1139 | * mos7840_close |
1181 | * this function is called by the tty driver when a port is closed | 1140 | * this function is called by the tty driver when a port is closed |
1182 | *****************************************************************************/ | 1141 | *****************************************************************************/ |
1183 | 1142 | ||
1184 | static void mos7840_close(struct tty_struct *tty, | 1143 | static void mos7840_close(struct usb_serial_port *port) |
1185 | struct usb_serial_port *port, struct file *filp) | ||
1186 | { | 1144 | { |
1187 | struct usb_serial *serial; | 1145 | struct usb_serial *serial; |
1188 | struct moschip_port *mos7840_port; | 1146 | struct moschip_port *mos7840_port; |
@@ -1223,10 +1181,6 @@ static void mos7840_close(struct tty_struct *tty, | |||
1223 | } | 1181 | } |
1224 | } | 1182 | } |
1225 | 1183 | ||
1226 | if (serial->dev) | ||
1227 | /* flush and block until tx is empty */ | ||
1228 | mos7840_block_until_tx_empty(tty, mos7840_port); | ||
1229 | |||
1230 | /* While closing port, shutdown all bulk read, write * | 1184 | /* While closing port, shutdown all bulk read, write * |
1231 | * and interrupt read if they exists */ | 1185 | * and interrupt read if they exists */ |
1232 | if (serial->dev) { | 1186 | if (serial->dev) { |