|
@@ -71,10 +71,7 @@ static void serport_serio_close(struct serio *serio)
|
|
|
|
|
|
spin_lock_irqsave(&serport->lock, flags);
|
|
|
clear_bit(SERPORT_ACTIVE, &serport->flags);
|
|
|
- set_bit(SERPORT_DEAD, &serport->flags);
|
|
|
spin_unlock_irqrestore(&serport->lock, flags);
|
|
|
-
|
|
|
- wake_up_interruptible(&serport->wait);
|
|
|
}
|
|
|
|
|
|
/*
|
|
@@ -248,6 +245,19 @@ static long serport_ldisc_compat_ioctl(struct tty_struct *tty,
|
|
|
}
|
|
|
#endif
|
|
|
|
|
|
+static int serport_ldisc_hangup(struct tty_struct *tty)
|
|
|
+{
|
|
|
+ struct serport *serport = (struct serport *) tty->disc_data;
|
|
|
+ unsigned long flags;
|
|
|
+
|
|
|
+ spin_lock_irqsave(&serport->lock, flags);
|
|
|
+ set_bit(SERPORT_DEAD, &serport->flags);
|
|
|
+ spin_unlock_irqrestore(&serport->lock, flags);
|
|
|
+
|
|
|
+ wake_up_interruptible(&serport->wait);
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
static void serport_ldisc_write_wakeup(struct tty_struct * tty)
|
|
|
{
|
|
|
struct serport *serport = (struct serport *) tty->disc_data;
|
|
@@ -274,6 +284,7 @@ static struct tty_ldisc_ops serport_ldisc = {
|
|
|
.compat_ioctl = serport_ldisc_compat_ioctl,
|
|
|
#endif
|
|
|
.receive_buf = serport_ldisc_receive,
|
|
|
+ .hangup = serport_ldisc_hangup,
|
|
|
.write_wakeup = serport_ldisc_write_wakeup
|
|
|
};
|
|
|
|