aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/tty/amiserial.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/tty/amiserial.c')
-rw-r--r--drivers/tty/amiserial.c44
1 files changed, 2 insertions, 42 deletions
diff --git a/drivers/tty/amiserial.c b/drivers/tty/amiserial.c
index 9c8b199bad35..afadcd43d14e 100644
--- a/drivers/tty/amiserial.c
+++ b/drivers/tty/amiserial.c
@@ -1389,53 +1389,13 @@ static void rs_close(struct tty_struct *tty, struct file * filp)
1389{ 1389{
1390 struct serial_state *state = tty->driver_data; 1390 struct serial_state *state = tty->driver_data;
1391 struct tty_port *port = &state->tport; 1391 struct tty_port *port = &state->tport;
1392 unsigned long flags;
1393 1392
1394 if (!state || serial_paranoia_check(state, tty->name, "rs_close")) 1393 if (serial_paranoia_check(state, tty->name, "rs_close"))
1395 return; 1394 return;
1396 1395
1397 local_irq_save(flags); 1396 if (tty_port_close_start(port, tty, filp) == 0)
1398
1399 if (tty_hung_up_p(filp)) {
1400 DBG_CNT("before DEC-hung");
1401 local_irq_restore(flags);
1402 return; 1397 return;
1403 }
1404 1398
1405#ifdef SERIAL_DEBUG_OPEN
1406 printk("rs_close ttys%d, count = %d\n", state->line, port->count);
1407#endif
1408 if ((tty->count == 1) && (port->count != 1)) {
1409 /*
1410 * Uh, oh. tty->count is 1, which means that the tty
1411 * structure will be freed. port->count should always
1412 * be one in these conditions. If it's greater than
1413 * one, we've got real problems, since it means the
1414 * serial port won't be shutdown.
1415 */
1416 printk("rs_close: bad serial port count; tty->count is 1, "
1417 "port->count is %d\n", state->tport.count);
1418 port->count = 1;
1419 }
1420 if (--port->count < 0) {
1421 printk("rs_close: bad serial port count for ttys%d: %d\n",
1422 tty->index, port->count);
1423 port->count = 0;
1424 }
1425 if (port->count) {
1426 DBG_CNT("before DEC-2");
1427 local_irq_restore(flags);
1428 return;
1429 }
1430 port->flags |= ASYNC_CLOSING;
1431 /*
1432 * Now we wait for the transmit buffer to clear; and we notify
1433 * the line discipline to only process XON/XOFF characters.
1434 */
1435 tty->closing = 1;
1436 local_irq_restore(flags);
1437 if (port->closing_wait != ASYNC_CLOSING_WAIT_NONE)
1438 tty_wait_until_sent(tty, port->closing_wait);
1439 /* 1399 /*
1440 * At this point we stop accepting input. To do this, we 1400 * At this point we stop accepting input. To do this, we
1441 * disable the receive line status interrupts, and tell the 1401 * disable the receive line status interrupts, and tell the