提交 e0f8d323 编写于 作者: S Samuel Iglesias Gonsalvez 提交者: Greg Kroah-Hartman

ipack/devices/ipoctal: added shutdown callback

Added shutdown callback to disable RX and TX when there is no other client
accesing the device.
Signed-off-by: NSamuel Iglesias Gonsalvez <siglesias@igalia.com>
Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
上级 b0d17fbd
...@@ -625,6 +625,22 @@ static void ipoctal_hangup(struct tty_struct *tty) ...@@ -625,6 +625,22 @@ static void ipoctal_hangup(struct tty_struct *tty)
wake_up_interruptible(&channel->tty_port.open_wait); wake_up_interruptible(&channel->tty_port.open_wait);
} }
static void ipoctal_shutdown(struct tty_struct *tty)
{
struct ipoctal_channel *channel = tty->driver_data;
if (channel == NULL)
return;
iowrite8(CR_DISABLE_RX | CR_DISABLE_TX, &channel->regs->w.cr);
channel->rx_enable = 0;
iowrite8(CR_CMD_RESET_RX, &channel->regs->w.cr);
iowrite8(CR_CMD_RESET_TX, &channel->regs->w.cr);
iowrite8(CR_CMD_RESET_ERR_STATUS, &channel->regs->w.cr);
iowrite8(CR_CMD_RESET_MR, &channel->regs->w.cr);
clear_bit(ASYNCB_INITIALIZED, &channel->tty_port.flags);
}
static const struct tty_operations ipoctal_fops = { static const struct tty_operations ipoctal_fops = {
.ioctl = NULL, .ioctl = NULL,
.open = ipoctal_open, .open = ipoctal_open,
...@@ -635,6 +651,7 @@ static const struct tty_operations ipoctal_fops = { ...@@ -635,6 +651,7 @@ static const struct tty_operations ipoctal_fops = {
.chars_in_buffer = ipoctal_chars_in_buffer, .chars_in_buffer = ipoctal_chars_in_buffer,
.get_icount = ipoctal_get_icount, .get_icount = ipoctal_get_icount,
.hangup = ipoctal_hangup, .hangup = ipoctal_hangup,
.shutdown = ipoctal_shutdown,
}; };
static int ipoctal_probe(struct ipack_device *dev) static int ipoctal_probe(struct ipack_device *dev)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册