Commit c9129371 authored by Himadri Pandya's avatar Himadri Pandya Committed by Johan Hovold
Browse files

USB: serial: keyspan_pda: use usb_control_msg_recv()



Use the wrapper function usb_control_msg_recv() that accepts stack
variables and remove dma buffers from callers of usb_control_msg().

Signed-off-by: default avatarHimadri Pandya <himadrispandya@gmail.com>
Link: https://lore.kernel.org/r/20210801203122.3515-6-himadrispandya@gmail.com


[ johan: simplify write-room error handling further ]
Signed-off-by: default avatarJohan Hovold <johan@kernel.org>
parent a7388592
Loading
Loading
Loading
Loading
+28 −39
Original line number Diff line number Diff line
@@ -77,36 +77,27 @@ static int keyspan_pda_get_write_room(struct keyspan_pda_private *priv)
{
	struct usb_serial_port *port = priv->port;
	struct usb_serial *serial = port->serial;
	u8 *room;
	u8 room;
	int rc;

	room = kmalloc(1, GFP_KERNEL);
	if (!room)
		return -ENOMEM;

	rc = usb_control_msg(serial->dev,
			     usb_rcvctrlpipe(serial->dev, 0),
	rc = usb_control_msg_recv(serial->dev,
				  0,
				  6, /* write_room */
			     USB_TYPE_VENDOR | USB_RECIP_INTERFACE
			     | USB_DIR_IN,
				  USB_TYPE_VENDOR | USB_RECIP_INTERFACE | USB_DIR_IN,
				  0, /* value: 0 means "remaining room" */
				  0, /* index */
			     room,
				  &room,
				  1,
			     2000);
	if (rc != 1) {
		if (rc >= 0)
			rc = -EIO;
				  2000,
				  GFP_KERNEL);
	if (rc) {
		dev_dbg(&port->dev, "roomquery failed: %d\n", rc);
		goto out_free;
		return rc;
	}

	dev_dbg(&port->dev, "roomquery says %d\n", *room);
	rc = *room;
out_free:
	kfree(room);
	dev_dbg(&port->dev, "roomquery says %d\n", room);

	return rc;
	return room;
}

static void keyspan_pda_request_unthrottle(struct work_struct *work)
@@ -381,22 +372,20 @@ static int keyspan_pda_get_modem_info(struct usb_serial *serial,
				      unsigned char *value)
{
	int rc;
	u8 *data;

	data = kmalloc(1, GFP_KERNEL);
	if (!data)
		return -ENOMEM;
	u8 data;

	rc = usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0),
	rc = usb_control_msg_recv(serial->dev, 0,
				  3, /* get pins */
				  USB_TYPE_VENDOR | USB_RECIP_INTERFACE | USB_DIR_IN,
			     0, 0, data, 1, 2000);
	if (rc == 1)
		*value = *data;
	else if (rc >= 0)
		rc = -EIO;
				  0,
				  0,
				  &data,
				  1,
				  2000,
				  GFP_KERNEL);
	if (rc == 0)
		*value = data;

	kfree(data);
	return rc;
}