[media] rtl28xxu: move usb buffers to state
authorAntti Palosaari <crope@iki.fi>
Sun, 21 Dec 2014 21:33:14 +0000 (18:33 -0300)
committerMauro Carvalho Chehab <mchehab@osg.samsung.com>
Tue, 3 Feb 2015 18:24:49 +0000 (16:24 -0200)
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>
drivers/media/usb/dvb-usb-v2/rtl28xxu.c
drivers/media/usb/dvb-usb-v2/rtl28xxu.h

index e3312a21a090f7f8eb1c9fdc2c8b144a2b989019..b0d2467398f289a7a52d6d67f9069d91a12d3d64 100644 (file)
@@ -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 {
@@ -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;
index abf0111a3fdacee63a2e114efcbeb766918a85f5..1b5d7ffb685e053581efc8184228571d58778b38 100644 (file)
@@ -69,6 +69,7 @@
 
 
 struct rtl28xxu_dev {
+       u8 buf[28];
        u8 chip_id;
        u8 tuner;
        char *tuner_name;