Skip to content

Commit

Permalink
[media] rtl28xxu: move usb buffers to state
Browse files Browse the repository at this point in the history
Buffer needed for USB control message is small so move it to state
and get rid of alloc/free used for each control message.

Signed-off-by: Antti Palosaari <crope@iki.fi>
Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
  • Loading branch information
Antti Palosaari authored and Mauro Carvalho Chehab committed Feb 3, 2015
1 parent 5ba4ca1 commit c56222a
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 22 deletions.
31 changes: 9 additions & 22 deletions drivers/media/usb/dvb-usb-v2/rtl28xxu.c
Original file line number Diff line number Diff line change
Expand Up @@ -29,20 +29,14 @@ DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);

static int rtl28xxu_ctrl_msg(struct dvb_usb_device *d, struct rtl28xxu_req *req)
{
struct rtl28xxu_dev *dev = d->priv;
int ret;
unsigned int pipe;
u8 requesttype;
u8 *buf;

buf = kmalloc(req->size, GFP_KERNEL);
if (!buf) {
ret = -ENOMEM;
goto err;
}

if (req->index & CMD_WR_FLAG) {
/* write */
memcpy(buf, req->data, req->size);
memcpy(dev->buf, req->data, req->size);
requesttype = (USB_TYPE_VENDOR | USB_DIR_OUT);
pipe = usb_sndctrlpipe(d->udev, 0);
} else {
Expand All @@ -52,24 +46,17 @@ static int rtl28xxu_ctrl_msg(struct dvb_usb_device *d, struct rtl28xxu_req *req)
}

ret = usb_control_msg(d->udev, pipe, 0, requesttype, req->value,
req->index, buf, req->size, 1000);

req->index, dev->buf, req->size, 1000);
dvb_usb_dbg_usb_control_msg(d->udev, 0, requesttype, req->value,
req->index, buf, req->size);

if (ret > 0)
ret = 0;
req->index, dev->buf, req->size);
if (ret < 0)
goto err;

/* read request, copy returned data to return buf */
if (!ret && requesttype == (USB_TYPE_VENDOR | USB_DIR_IN))
memcpy(req->data, buf, req->size);

kfree(buf);
if (requesttype == (USB_TYPE_VENDOR | USB_DIR_IN))
memcpy(req->data, dev->buf, req->size);

if (ret)
goto err;

return ret;
return 0;
err:
dev_dbg(&d->intf->dev, "failed=%d\n", ret);
return ret;
Expand Down
1 change: 1 addition & 0 deletions drivers/media/usb/dvb-usb-v2/rtl28xxu.h
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@


struct rtl28xxu_dev {
u8 buf[28];
u8 chip_id;
u8 tuner;
char *tuner_name;
Expand Down

0 comments on commit c56222a

Please sign in to comment.