Commit 383d19c5 authored by Johan Hovold's avatar Johan Hovold Committed by Greg Kroah-Hartman

USB: pl2303: add error handling to line requests

Refactor and add error handling to line requests.
Signed-off-by: default avatarJohan Hovold <jhovold@gmail.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent a6ec8245
...@@ -344,6 +344,52 @@ static void pl2303_encode_baudrate(struct tty_struct *tty, ...@@ -344,6 +344,52 @@ static void pl2303_encode_baudrate(struct tty_struct *tty,
dev_dbg(&port->dev, "baud set = %d\n", baud); dev_dbg(&port->dev, "baud set = %d\n", baud);
} }
static int pl2303_get_line_request(struct usb_serial_port *port,
unsigned char buf[7])
{
struct usb_device *udev = port->serial->dev;
int ret;
ret = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0),
GET_LINE_REQUEST, GET_LINE_REQUEST_TYPE,
0, 0, buf, 7, 100);
if (ret != 7) {
dev_err(&port->dev, "%s - failed: %d\n", __func__, ret);
if (ret > 0)
ret = -EIO;
return ret;
}
dev_dbg(&port->dev, "%s - %7ph\n", __func__, buf);
return 0;
}
static int pl2303_set_line_request(struct usb_serial_port *port,
unsigned char buf[7])
{
struct usb_device *udev = port->serial->dev;
int ret;
ret = usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
SET_LINE_REQUEST, SET_LINE_REQUEST_TYPE,
0, 0, buf, 7, 100);
if (ret != 7) {
dev_err(&port->dev, "%s - failed: %d\n", __func__, ret);
if (ret > 0)
ret = -EIO;
return ret;
}
dev_dbg(&port->dev, "%s - %7ph\n", __func__, buf);
return 0;
}
static void pl2303_set_termios(struct tty_struct *tty, static void pl2303_set_termios(struct tty_struct *tty,
struct usb_serial_port *port, struct ktermios *old_termios) struct usb_serial_port *port, struct ktermios *old_termios)
{ {
...@@ -352,7 +398,7 @@ static void pl2303_set_termios(struct tty_struct *tty, ...@@ -352,7 +398,7 @@ static void pl2303_set_termios(struct tty_struct *tty,
struct pl2303_private *priv = usb_get_serial_port_data(port); struct pl2303_private *priv = usb_get_serial_port_data(port);
unsigned long flags; unsigned long flags;
unsigned char *buf; unsigned char *buf;
int i; int ret;
u8 control; u8 control;
if (old_termios && !tty_termios_hw_change(&tty->termios, old_termios)) if (old_termios && !tty_termios_hw_change(&tty->termios, old_termios))
...@@ -366,10 +412,7 @@ static void pl2303_set_termios(struct tty_struct *tty, ...@@ -366,10 +412,7 @@ static void pl2303_set_termios(struct tty_struct *tty,
return; return;
} }
i = usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0), pl2303_get_line_request(port, buf);
GET_LINE_REQUEST, GET_LINE_REQUEST_TYPE,
0, 0, buf, 7, 100);
dev_dbg(&port->dev, "0xa1:0x21:0:0 %d - %7ph\n", i, buf);
switch (C_CSIZE(tty)) { switch (C_CSIZE(tty)) {
case CS5: case CS5:
...@@ -451,14 +494,8 @@ static void pl2303_set_termios(struct tty_struct *tty, ...@@ -451,14 +494,8 @@ static void pl2303_set_termios(struct tty_struct *tty,
* only used in set_termios, which is serialised against itself. * only used in set_termios, which is serialised against itself.
*/ */
if (!old_termios || memcmp(buf, priv->line_settings, 7)) { if (!old_termios || memcmp(buf, priv->line_settings, 7)) {
i = usb_control_msg(serial->dev, ret = pl2303_set_line_request(port, buf);
usb_sndctrlpipe(serial->dev, 0), if (!ret)
SET_LINE_REQUEST, SET_LINE_REQUEST_TYPE,
0, 0, buf, 7, 100);
dev_dbg(&port->dev, "0x21:0x20:0:0 %d\n", i);
if (i == 7)
memcpy(priv->line_settings, buf, 7); memcpy(priv->line_settings, buf, 7);
} }
...@@ -478,10 +515,7 @@ static void pl2303_set_termios(struct tty_struct *tty, ...@@ -478,10 +515,7 @@ static void pl2303_set_termios(struct tty_struct *tty,
} }
memset(buf, 0, 7); memset(buf, 0, 7);
i = usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0), pl2303_get_line_request(port, buf);
GET_LINE_REQUEST, GET_LINE_REQUEST_TYPE,
0, 0, buf, 7, 100);
dev_dbg(&port->dev, "0xa1:0x21:0:0 %d - %7ph\n", i, buf);
if (C_CRTSCTS(tty)) { if (C_CRTSCTS(tty)) {
if (spriv->type == HX) if (spriv->type == HX)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment