From 2421cc8bfafee83fb82ebec1191ad82dc6761e2c Mon Sep 17 00:00:00 2001 From: Florian Mickler Date: Mon, 21 Mar 2011 15:33:46 -0300 Subject: [PATCH] --- yaml --- r: 250183 b: refs/heads/master c: 12fe2a6193df97b28f5ff9fd3f12d460e96c6a95 h: refs/heads/master i: 250181: 8883fe515e9327d864c6e29b28c7b81de7bf9016 250179: 19943b23728fb75b8c63581751f558230bee4dbf 250175: eba06a09c96006826fd6305f1eb6f95d6752fe34 v: v3 --- [refs] | 2 +- trunk/drivers/media/dvb/dvb-usb/opera1.c | 31 +++++++++++++++--------- 2 files changed, 21 insertions(+), 12 deletions(-) diff --git a/[refs] b/[refs] index 4838d2aab15f..bcac4bd89d4a 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 513ea35ff9cd332abe650f5da3689bdb41824b43 +refs/heads/master: 12fe2a6193df97b28f5ff9fd3f12d460e96c6a95 diff --git a/trunk/drivers/media/dvb/dvb-usb/opera1.c b/trunk/drivers/media/dvb/dvb-usb/opera1.c index 7e569f4dd80b..4258f127ea30 100644 --- a/trunk/drivers/media/dvb/dvb-usb/opera1.c +++ b/trunk/drivers/media/dvb/dvb-usb/opera1.c @@ -53,27 +53,36 @@ static int opera1_xilinx_rw(struct usb_device *dev, u8 request, u16 value, u8 * data, u16 len, int flags) { int ret; - u8 r; - u8 u8buf[len]; - + u8 tmp; + u8 *buf; unsigned int pipe = (flags == OPERA_READ_MSG) ? usb_rcvctrlpipe(dev,0) : usb_sndctrlpipe(dev, 0); u8 request_type = (flags == OPERA_READ_MSG) ? USB_DIR_IN : USB_DIR_OUT; + buf = kmalloc(len, GFP_KERNEL); + if (!buf) + return -ENOMEM; + if (flags == OPERA_WRITE_MSG) - memcpy(u8buf, data, len); - ret = - usb_control_msg(dev, pipe, request, request_type | USB_TYPE_VENDOR, - value, 0x0, u8buf, len, 2000); + memcpy(buf, data, len); + ret = usb_control_msg(dev, pipe, request, + request_type | USB_TYPE_VENDOR, value, 0x0, + buf, len, 2000); if (request == OPERA_TUNER_REQ) { + tmp = buf[0]; if (usb_control_msg(dev, usb_rcvctrlpipe(dev, 0), - OPERA_TUNER_REQ, USB_DIR_IN | USB_TYPE_VENDOR, - 0x01, 0x0, &r, 1, 2000)<1 || r!=0x08) - return 0; + OPERA_TUNER_REQ, USB_DIR_IN | USB_TYPE_VENDOR, + 0x01, 0x0, buf, 1, 2000) < 1 || buf[0] != 0x08) { + ret = 0; + goto out; + } + buf[0] = tmp; } if (flags == OPERA_READ_MSG) - memcpy(data, u8buf, len); + memcpy(data, buf, len); +out: + kfree(buf); return ret; }