Commit c56222a6 authored by Antti Palosaari's avatar Antti Palosaari Committed by Mauro Carvalho Chehab

[media] rtl28xxu: move usb buffers to state

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: default avatarAntti Palosaari <crope@iki.fi>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@osg.samsung.com>
parent 5ba4ca1a
...@@ -29,20 +29,14 @@ DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr); ...@@ -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) static int rtl28xxu_ctrl_msg(struct dvb_usb_device *d, struct rtl28xxu_req *req)
{ {
struct rtl28xxu_dev *dev = d->priv;
int ret; int ret;
unsigned int pipe; unsigned int pipe;
u8 requesttype; u8 requesttype;
u8 *buf;
buf = kmalloc(req->size, GFP_KERNEL);
if (!buf) {
ret = -ENOMEM;
goto err;
}
if (req->index & CMD_WR_FLAG) { if (req->index & CMD_WR_FLAG) {
/* write */ /* write */
memcpy(buf, req->data, req->size); memcpy(dev->buf, req->data, req->size);
requesttype = (USB_TYPE_VENDOR | USB_DIR_OUT); requesttype = (USB_TYPE_VENDOR | USB_DIR_OUT);
pipe = usb_sndctrlpipe(d->udev, 0); pipe = usb_sndctrlpipe(d->udev, 0);
} else { } else {
...@@ -52,24 +46,17 @@ static int rtl28xxu_ctrl_msg(struct dvb_usb_device *d, struct rtl28xxu_req *req) ...@@ -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, 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, dvb_usb_dbg_usb_control_msg(d->udev, 0, requesttype, req->value,
req->index, buf, req->size); req->index, dev->buf, req->size);
if (ret < 0)
if (ret > 0) goto err;
ret = 0;
/* read request, copy returned data to return buf */ /* read request, copy returned data to return buf */
if (!ret && requesttype == (USB_TYPE_VENDOR | USB_DIR_IN)) if (requesttype == (USB_TYPE_VENDOR | USB_DIR_IN))
memcpy(req->data, buf, req->size); memcpy(req->data, dev->buf, req->size);
kfree(buf);
if (ret) return 0;
goto err;
return ret;
err: err:
dev_dbg(&d->intf->dev, "failed=%d\n", ret); dev_dbg(&d->intf->dev, "failed=%d\n", ret);
return ret; return ret;
......
...@@ -69,6 +69,7 @@ ...@@ -69,6 +69,7 @@
struct rtl28xxu_dev { struct rtl28xxu_dev {
u8 buf[28];
u8 chip_id; u8 chip_id;
u8 tuner; u8 tuner;
char *tuner_name; char *tuner_name;
......
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