diff options
| -rw-r--r-- | drivers/usb/serial/pl2303.c | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/drivers/usb/serial/pl2303.c b/drivers/usb/serial/pl2303.c index 0f872e6b2c87..829604d11f3f 100644 --- a/drivers/usb/serial/pl2303.c +++ b/drivers/usb/serial/pl2303.c | |||
| @@ -132,6 +132,7 @@ MODULE_DEVICE_TABLE(usb, id_table); | |||
| 132 | #define UART_OVERRUN_ERROR 0x40 | 132 | #define UART_OVERRUN_ERROR 0x40 |
| 133 | #define UART_CTS 0x80 | 133 | #define UART_CTS 0x80 |
| 134 | 134 | ||
| 135 | static void pl2303_set_break(struct usb_serial_port *port, bool enable); | ||
| 135 | 136 | ||
| 136 | enum pl2303_type { | 137 | enum pl2303_type { |
| 137 | TYPE_01, /* Type 0 and 1 (difference unknown) */ | 138 | TYPE_01, /* Type 0 and 1 (difference unknown) */ |
| @@ -615,6 +616,7 @@ static void pl2303_close(struct usb_serial_port *port) | |||
| 615 | { | 616 | { |
| 616 | usb_serial_generic_close(port); | 617 | usb_serial_generic_close(port); |
| 617 | usb_kill_urb(port->interrupt_in_urb); | 618 | usb_kill_urb(port->interrupt_in_urb); |
| 619 | pl2303_set_break(port, false); | ||
| 618 | } | 620 | } |
| 619 | 621 | ||
| 620 | static int pl2303_open(struct tty_struct *tty, struct usb_serial_port *port) | 622 | 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, | |||
| 741 | return -ENOIOCTLCMD; | 743 | return -ENOIOCTLCMD; |
| 742 | } | 744 | } |
| 743 | 745 | ||
| 744 | static void pl2303_break_ctl(struct tty_struct *tty, int break_state) | 746 | static void pl2303_set_break(struct usb_serial_port *port, bool enable) |
| 745 | { | 747 | { |
| 746 | struct usb_serial_port *port = tty->driver_data; | ||
| 747 | struct usb_serial *serial = port->serial; | 748 | struct usb_serial *serial = port->serial; |
| 748 | u16 state; | 749 | u16 state; |
| 749 | int result; | 750 | int result; |
| 750 | 751 | ||
| 751 | if (break_state == 0) | 752 | if (enable) |
| 752 | state = BREAK_OFF; | ||
| 753 | else | ||
| 754 | state = BREAK_ON; | 753 | state = BREAK_ON; |
| 754 | else | ||
| 755 | state = BREAK_OFF; | ||
| 755 | 756 | ||
| 756 | dev_dbg(&port->dev, "%s - turning break %s\n", __func__, | 757 | dev_dbg(&port->dev, "%s - turning break %s\n", __func__, |
| 757 | state == BREAK_OFF ? "off" : "on"); | 758 | state == BREAK_OFF ? "off" : "on"); |
| @@ -763,6 +764,13 @@ static void pl2303_break_ctl(struct tty_struct *tty, int break_state) | |||
| 763 | dev_err(&port->dev, "error sending break = %d\n", result); | 764 | dev_err(&port->dev, "error sending break = %d\n", result); |
| 764 | } | 765 | } |
| 765 | 766 | ||
| 767 | static void pl2303_break_ctl(struct tty_struct *tty, int state) | ||
| 768 | { | ||
| 769 | struct usb_serial_port *port = tty->driver_data; | ||
| 770 | |||
| 771 | pl2303_set_break(port, state); | ||
| 772 | } | ||
| 773 | |||
| 766 | static void pl2303_update_line_status(struct usb_serial_port *port, | 774 | static void pl2303_update_line_status(struct usb_serial_port *port, |
| 767 | unsigned char *data, | 775 | unsigned char *data, |
| 768 | unsigned int actual_length) | 776 | unsigned int actual_length) |
