mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 12:28:41 +08:00
USB: pl2303: disable break on shutdown
Currently an enabled break state is not disabled on final close nor on re-open and has to be disabled manually. Fix this by disabling break on port shutdown. Reported-by: Jari Ruusu <jariruusu@users.sourceforge.net> Tested-by: Jari Ruusu <jariruusu@users.sourceforge.net> Signed-off-by: Johan Hovold <johan@kernel.org>
This commit is contained in:
parent
db81de767e
commit
52772a7fd3
@ -132,6 +132,7 @@ MODULE_DEVICE_TABLE(usb, id_table);
|
||||
#define UART_OVERRUN_ERROR 0x40
|
||||
#define UART_CTS 0x80
|
||||
|
||||
static void pl2303_set_break(struct usb_serial_port *port, bool enable);
|
||||
|
||||
enum pl2303_type {
|
||||
TYPE_01, /* Type 0 and 1 (difference unknown) */
|
||||
@ -615,6 +616,7 @@ static void pl2303_close(struct usb_serial_port *port)
|
||||
{
|
||||
usb_serial_generic_close(port);
|
||||
usb_kill_urb(port->interrupt_in_urb);
|
||||
pl2303_set_break(port, false);
|
||||
}
|
||||
|
||||
static int pl2303_open(struct tty_struct *tty, struct usb_serial_port *port)
|
||||
@ -741,17 +743,16 @@ static int pl2303_ioctl(struct tty_struct *tty,
|
||||
return -ENOIOCTLCMD;
|
||||
}
|
||||
|
||||
static void pl2303_break_ctl(struct tty_struct *tty, int break_state)
|
||||
static void pl2303_set_break(struct usb_serial_port *port, bool enable)
|
||||
{
|
||||
struct usb_serial_port *port = tty->driver_data;
|
||||
struct usb_serial *serial = port->serial;
|
||||
u16 state;
|
||||
int result;
|
||||
|
||||
if (break_state == 0)
|
||||
state = BREAK_OFF;
|
||||
else
|
||||
if (enable)
|
||||
state = BREAK_ON;
|
||||
else
|
||||
state = BREAK_OFF;
|
||||
|
||||
dev_dbg(&port->dev, "%s - turning break %s\n", __func__,
|
||||
state == BREAK_OFF ? "off" : "on");
|
||||
@ -763,6 +764,13 @@ static void pl2303_break_ctl(struct tty_struct *tty, int break_state)
|
||||
dev_err(&port->dev, "error sending break = %d\n", result);
|
||||
}
|
||||
|
||||
static void pl2303_break_ctl(struct tty_struct *tty, int state)
|
||||
{
|
||||
struct usb_serial_port *port = tty->driver_data;
|
||||
|
||||
pl2303_set_break(port, state);
|
||||
}
|
||||
|
||||
static void pl2303_update_line_status(struct usb_serial_port *port,
|
||||
unsigned char *data,
|
||||
unsigned int actual_length)
|
||||
|
Loading…
Reference in New Issue
Block a user