From: Himadri Pandya <himadrispandya@gmail.com>
To: johan@kernel.org, gregkh@linuxfoundation.org,
linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org
Cc: linux-kernel-mentees@lists.linuxfoundation.org,
Himadri Pandya <himadrispandya@gmail.com>
Subject: [PATCH 04/15] usb: serial: cp210x: use usb_control_msg_recv() and usb_control_msg_send()
Date: Wed, 4 Nov 2020 12:16:52 +0530 [thread overview]
Message-ID: <20201104064703.15123-5-himadrispandya@gmail.com> (raw)
In-Reply-To: <20201104064703.15123-1-himadrispandya@gmail.com>
The new usb_control_msg_recv() and usb_control_msg_send() nicely wraps
usb_control_msg() with proper error check. Hence use the wrappers
instead of calling usb_control_msg() directly.
Signed-off-by: Himadri Pandya <himadrispandya@gmail.com>
---
drivers/usb/serial/cp210x.c | 148 ++++++++++--------------------------
1 file changed, 42 insertions(+), 106 deletions(-)
diff --git a/drivers/usb/serial/cp210x.c b/drivers/usb/serial/cp210x.c
index d0c05aa8a0d6..29436ab392e8 100644
--- a/drivers/usb/serial/cp210x.c
+++ b/drivers/usb/serial/cp210x.c
@@ -555,31 +555,15 @@ static int cp210x_read_reg_block(struct usb_serial_port *port, u8 req,
{
struct usb_serial *serial = port->serial;
struct cp210x_port_private *port_priv = usb_get_serial_port_data(port);
- void *dmabuf;
int result;
- dmabuf = kmalloc(bufsize, GFP_KERNEL);
- if (!dmabuf) {
- /*
- * FIXME Some callers don't bother to check for error,
- * at least give them consistent junk until they are fixed
- */
- memset(buf, 0, bufsize);
- return -ENOMEM;
- }
-
- result = usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0),
- req, REQTYPE_INTERFACE_TO_HOST, 0,
- port_priv->bInterfaceNumber, dmabuf, bufsize,
- USB_CTRL_SET_TIMEOUT);
- if (result == bufsize) {
- memcpy(buf, dmabuf, bufsize);
- result = 0;
- } else {
+ result = usb_control_msg_recv(serial->dev, 0, req,
+ REQTYPE_INTERFACE_TO_HOST, 0,
+ port_priv->bInterfaceNumber, buf, bufsize,
+ USB_CTRL_SET_TIMEOUT, GFP_KERNEL);
+ if (result) {
dev_err(&port->dev, "failed get req 0x%x size %d status: %d\n",
- req, bufsize, result);
- if (result >= 0)
- result = -EIO;
+ req, bufsize, result);
/*
* FIXME Some callers don't bother to check for error,
@@ -588,8 +572,6 @@ static int cp210x_read_reg_block(struct usb_serial_port *port, u8 req,
memset(buf, 0, bufsize);
}
- kfree(dmabuf);
-
return result;
}
@@ -648,29 +630,16 @@ static int cp210x_read_u8_reg(struct usb_serial_port *port, u8 req, u8 *val)
static int cp210x_read_vendor_block(struct usb_serial *serial, u8 type, u16 val,
void *buf, int bufsize)
{
- void *dmabuf;
int result;
- dmabuf = kmalloc(bufsize, GFP_KERNEL);
- if (!dmabuf)
- return -ENOMEM;
-
- result = usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0),
- CP210X_VENDOR_SPECIFIC, type, val,
- cp210x_interface_num(serial), dmabuf, bufsize,
- USB_CTRL_GET_TIMEOUT);
- if (result == bufsize) {
- memcpy(buf, dmabuf, bufsize);
- result = 0;
- } else {
+ result = usb_control_msg_recv(serial->dev, 0, CP210X_VENDOR_SPECIFIC,
+ type, val, cp210x_interface_num(serial),
+ buf, bufsize, USB_CTRL_GET_TIMEOUT,
+ GFP_KERNEL);
+ if (result)
dev_err(&serial->interface->dev,
"failed to get vendor val 0x%04x size %d: %d\n", val,
bufsize, result);
- if (result >= 0)
- result = -EIO;
- }
-
- kfree(dmabuf);
return result;
}
@@ -685,14 +654,13 @@ static int cp210x_write_u16_reg(struct usb_serial_port *port, u8 req, u16 val)
struct cp210x_port_private *port_priv = usb_get_serial_port_data(port);
int result;
- result = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
- req, REQTYPE_HOST_TO_INTERFACE, val,
- port_priv->bInterfaceNumber, NULL, 0,
- USB_CTRL_SET_TIMEOUT);
- if (result < 0) {
+ result = usb_control_msg_send(serial->dev, 0, req,
+ REQTYPE_HOST_TO_INTERFACE, val,
+ port_priv->bInterfaceNumber, NULL, 0,
+ USB_CTRL_SET_TIMEOUT, GFP_KERNEL);
+ if (result)
dev_err(&port->dev, "failed set request 0x%x status: %d\n",
req, result);
- }
return result;
}
@@ -706,28 +674,17 @@ static int cp210x_write_reg_block(struct usb_serial_port *port, u8 req,
{
struct usb_serial *serial = port->serial;
struct cp210x_port_private *port_priv = usb_get_serial_port_data(port);
- void *dmabuf;
int result;
- dmabuf = kmemdup(buf, bufsize, GFP_KERNEL);
- if (!dmabuf)
- return -ENOMEM;
+ result = usb_control_msg_send(serial->dev, 0, req,
+ REQTYPE_HOST_TO_INTERFACE, 0,
+ port_priv->bInterfaceNumber, buf, bufsize,
+ USB_CTRL_SET_TIMEOUT, GFP_KERNEL);
- result = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
- req, REQTYPE_HOST_TO_INTERFACE, 0,
- port_priv->bInterfaceNumber, dmabuf, bufsize,
- USB_CTRL_SET_TIMEOUT);
- kfree(dmabuf);
-
- if (result == bufsize) {
- result = 0;
- } else {
+ if (result)
dev_err(&port->dev, "failed set req 0x%x size %d status: %d\n",
req, bufsize, result);
- if (result >= 0)
- result = -EIO;
- }
return result;
}
@@ -752,29 +709,17 @@ static int cp210x_write_u32_reg(struct usb_serial_port *port, u8 req, u32 val)
static int cp210x_write_vendor_block(struct usb_serial *serial, u8 type,
u16 val, void *buf, int bufsize)
{
- void *dmabuf;
int result;
- dmabuf = kmemdup(buf, bufsize, GFP_KERNEL);
- if (!dmabuf)
- return -ENOMEM;
-
- result = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
- CP210X_VENDOR_SPECIFIC, type, val,
- cp210x_interface_num(serial), dmabuf, bufsize,
- USB_CTRL_SET_TIMEOUT);
-
- kfree(dmabuf);
+ result = usb_control_msg_send(serial->dev, 0, CP210X_VENDOR_SPECIFIC,
+ type, val, cp210x_interface_num(serial),
+ buf, bufsize, USB_CTRL_SET_TIMEOUT,
+ GFP_KERNEL);
- if (result == bufsize) {
- result = 0;
- } else {
+ if (result)
dev_err(&serial->interface->dev,
"failed to set vendor val 0x%04x size %d: %d\n", val,
bufsize, result);
- if (result >= 0)
- result = -EIO;
- }
return result;
}
@@ -995,27 +940,19 @@ static int cp210x_get_tx_queue_byte_count(struct usb_serial_port *port,
{
struct usb_serial *serial = port->serial;
struct cp210x_port_private *port_priv = usb_get_serial_port_data(port);
- struct cp210x_comm_status *sts;
+ struct cp210x_comm_status sts;
int result;
- sts = kmalloc(sizeof(*sts), GFP_KERNEL);
- if (!sts)
- return -ENOMEM;
-
- result = usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0),
- CP210X_GET_COMM_STATUS, REQTYPE_INTERFACE_TO_HOST,
- 0, port_priv->bInterfaceNumber, sts, sizeof(*sts),
- USB_CTRL_GET_TIMEOUT);
- if (result == sizeof(*sts)) {
- *count = le32_to_cpu(sts->ulAmountInOutQueue);
- result = 0;
- } else {
+ result = usb_control_msg_recv(serial->dev, 0,
+ CP210X_GET_COMM_STATUS,
+ REQTYPE_INTERFACE_TO_HOST, 0,
+ port_priv->bInterfaceNumber, &sts,
+ sizeof(sts), USB_CTRL_GET_TIMEOUT,
+ GFP_KERNEL);
+ if (result == 0)
+ *count = le32_to_cpu(sts.ulAmountInOutQueue);
+ else
dev_err(&port->dev, "failed to get comm status: %d\n", result);
- if (result >= 0)
- result = -EIO;
- }
-
- kfree(sts);
return result;
}
@@ -1624,13 +1561,12 @@ static void cp210x_gpio_set(struct gpio_chip *gc, unsigned int gpio, int value)
} else {
u16 wIndex = buf.state << 8 | buf.mask;
- result = usb_control_msg(serial->dev,
- usb_sndctrlpipe(serial->dev, 0),
- CP210X_VENDOR_SPECIFIC,
- REQTYPE_HOST_TO_DEVICE,
- CP210X_WRITE_LATCH,
- wIndex,
- NULL, 0, USB_CTRL_SET_TIMEOUT);
+ result = usb_control_msg_send(serial->dev, 0,
+ CP210X_VENDOR_SPECIFIC,
+ REQTYPE_HOST_TO_DEVICE,
+ CP210X_WRITE_LATCH,
+ wIndex, NULL, 0,
+ USB_CTRL_SET_TIMEOUT, GFP_KERNEL);
}
usb_autopm_put_interface(serial->interface);
--
2.17.1
next prev parent reply other threads:[~2020-11-04 6:47 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-11-04 6:46 [PATCH 00/15] usb: serial: avoid using usb_control_msg() directly Himadri Pandya
2020-11-04 6:46 ` [PATCH 01/15] usb: serial: ark3116: use usb_control_msg_recv() and usb_control_msg_send() Himadri Pandya
2020-12-04 9:16 ` Johan Hovold
2020-11-04 6:46 ` [PATCH 02/15] usb: serial: belkin_sa: use usb_control_msg_send() Himadri Pandya
2020-12-04 9:17 ` Johan Hovold
2020-11-04 6:46 ` [PATCH 03/15] usb: serial: ch314: use usb_control_msg_recv() and usb_control_msg_send() Himadri Pandya
2020-12-04 9:24 ` Johan Hovold
2020-11-04 6:46 ` Himadri Pandya [this message]
2020-12-04 9:34 ` [PATCH 04/15] usb: serial: cp210x: " Johan Hovold
2020-11-04 6:46 ` [PATCH 05/15] usb: serial: cypress_m8: " Himadri Pandya
2020-12-04 9:37 ` Johan Hovold
2020-11-04 6:46 ` [PATCH 06/15] usb: serial: f81232: " Himadri Pandya
2020-12-04 9:49 ` Johan Hovold
2020-11-04 6:46 ` [PATCH 07/15] usb: serial: f81534: " Himadri Pandya
2020-12-04 9:55 ` Johan Hovold
2020-11-04 6:46 ` [PATCH 08/15] usb: serial: ftdi_sio: " Himadri Pandya
2020-12-04 10:03 ` Johan Hovold
2020-11-04 6:46 ` [PATCH 09/15] usb: serial: io_edgeport: " Himadri Pandya
2020-12-04 10:10 ` Johan Hovold
2020-11-04 6:46 ` [PATCH 10/15] usb: serial: io_ti: " Himadri Pandya
2020-12-04 10:12 ` Johan Hovold
2020-11-04 6:46 ` [PATCH 11/15] usb: serial: ipaq: use usb_control_msg_send() Himadri Pandya
2020-12-04 10:21 ` Johan Hovold
2020-11-04 6:47 ` [PATCH 12/15] usb: serial: ipw: " Himadri Pandya
2020-12-04 10:27 ` Johan Hovold
2020-11-04 6:47 ` [PATCH 13/15] usb: serial: iuu_phoenix: " Himadri Pandya
2020-12-04 10:28 ` Johan Hovold
2020-11-04 6:47 ` [PATCH 14/15] usb: serial: keyspan_pda: use usb_control_msg_recv() and usb_control_msg_send() Himadri Pandya
2020-12-04 10:31 ` Johan Hovold
2020-11-04 6:47 ` [PATCH 15/15] usb: serial: kl5kusb105: " Himadri Pandya
2020-12-04 10:37 ` Johan Hovold
2020-11-06 10:43 ` [PATCH 00/15] usb: serial: avoid using usb_control_msg() directly Greg KH
2020-12-04 9:09 ` Johan Hovold
2020-12-24 10:01 ` Himadri Pandya
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20201104064703.15123-5-himadrispandya@gmail.com \
--to=himadrispandya@gmail.com \
--cc=gregkh@linuxfoundation.org \
--cc=johan@kernel.org \
--cc=linux-kernel-mentees@lists.linuxfoundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).