diff options
author | Antti Palosaari <crope@iki.fi> | 2012-06-20 19:27:42 -0400 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2012-08-04 06:56:37 -0400 |
commit | 1162c7b383a62431d5800e3697423fbcf9133ad7 (patch) | |
tree | 5fb34ee3cb08844eacd6ca153a55c38b75646e0a /drivers/media/dvb | |
parent | 831511bdeee8b956fc9399f61fc9b25bd808429f (diff) |
[media] dvb_usb_v2: refactor dvb_usbv2_generic_rw()
Signed-off-by: Antti Palosaari <crope@iki.fi>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/media/dvb')
-rw-r--r-- | drivers/media/dvb/dvb-usb/af9015.c | 2 | ||||
-rw-r--r-- | drivers/media/dvb/dvb-usb/af9035.c | 2 | ||||
-rw-r--r-- | drivers/media/dvb/dvb-usb/anysee.c | 2 | ||||
-rw-r--r-- | drivers/media/dvb/dvb-usb/dvb_usb.h | 4 | ||||
-rw-r--r-- | drivers/media/dvb/dvb-usb/dvb_usb_urb.c | 47 |
5 files changed, 26 insertions, 31 deletions
diff --git a/drivers/media/dvb/dvb-usb/af9015.c b/drivers/media/dvb/dvb-usb/af9015.c index 6cecd755f1d9..e48cb586f4cf 100644 --- a/drivers/media/dvb/dvb-usb/af9015.c +++ b/drivers/media/dvb/dvb-usb/af9015.c | |||
@@ -100,7 +100,7 @@ static int af9015_ctrl_msg(struct dvb_usb_device *d, struct req_t *req) | |||
100 | if (req->cmd == DOWNLOAD_FIRMWARE || req->cmd == RECONNECT_USB) | 100 | if (req->cmd == DOWNLOAD_FIRMWARE || req->cmd == RECONNECT_USB) |
101 | rlen = 0; | 101 | rlen = 0; |
102 | 102 | ||
103 | ret = dvb_usbv2_generic_rw(d, buf, wlen, buf, rlen, 0); | 103 | ret = dvb_usbv2_generic_rw(d, buf, wlen, buf, rlen); |
104 | if (ret) | 104 | if (ret) |
105 | goto error; | 105 | goto error; |
106 | 106 | ||
diff --git a/drivers/media/dvb/dvb-usb/af9035.c b/drivers/media/dvb/dvb-usb/af9035.c index b030055d14a3..82b1ac716c2f 100644 --- a/drivers/media/dvb/dvb-usb/af9035.c +++ b/drivers/media/dvb/dvb-usb/af9035.c | |||
@@ -77,7 +77,7 @@ static int af9035_ctrl_msg(struct dvb_usb_device *d, struct usb_req *req) | |||
77 | if (req->cmd == CMD_FW_DL) | 77 | if (req->cmd == CMD_FW_DL) |
78 | rlen = 0; | 78 | rlen = 0; |
79 | 79 | ||
80 | ret = dvb_usbv2_generic_rw(d, buf, wlen, buf, rlen, 0); | 80 | ret = dvb_usbv2_generic_rw(d, buf, wlen, buf, rlen); |
81 | if (ret) | 81 | if (ret) |
82 | goto err; | 82 | goto err; |
83 | 83 | ||
diff --git a/drivers/media/dvb/dvb-usb/anysee.c b/drivers/media/dvb/dvb-usb/anysee.c index 9de0004c06d3..87c978b0373e 100644 --- a/drivers/media/dvb/dvb-usb/anysee.c +++ b/drivers/media/dvb/dvb-usb/anysee.c | |||
@@ -69,7 +69,7 @@ static int anysee_ctrl_msg(struct dvb_usb_device *d, u8 *sbuf, u8 slen, | |||
69 | 69 | ||
70 | /* We need receive one message more after dvb_usb_generic_rw due | 70 | /* We need receive one message more after dvb_usb_generic_rw due |
71 | to weird transaction flow, which is 1 x send + 2 x receive. */ | 71 | to weird transaction flow, which is 1 x send + 2 x receive. */ |
72 | ret = dvb_usbv2_generic_rw(d, buf, sizeof(buf), buf, sizeof(buf), 0); | 72 | ret = dvb_usbv2_generic_rw(d, buf, sizeof(buf), buf, sizeof(buf)); |
73 | if (ret) | 73 | if (ret) |
74 | goto error_unlock; | 74 | goto error_unlock; |
75 | 75 | ||
diff --git a/drivers/media/dvb/dvb-usb/dvb_usb.h b/drivers/media/dvb/dvb-usb/dvb_usb.h index 56bf3a7f085b..d771e1c72737 100644 --- a/drivers/media/dvb/dvb-usb/dvb_usb.h +++ b/drivers/media/dvb/dvb-usb/dvb_usb.h | |||
@@ -197,6 +197,7 @@ struct dvb_usb_device_properties { | |||
197 | unsigned int size_of_priv; | 197 | unsigned int size_of_priv; |
198 | u8 generic_bulk_ctrl_endpoint; | 198 | u8 generic_bulk_ctrl_endpoint; |
199 | u8 generic_bulk_ctrl_endpoint_response; | 199 | u8 generic_bulk_ctrl_endpoint_response; |
200 | unsigned int generic_bulk_ctrl_delay; | ||
200 | 201 | ||
201 | #define WARM 0 | 202 | #define WARM 0 |
202 | #define COLD 1 | 203 | #define COLD 1 |
@@ -371,8 +372,7 @@ extern int dvb_usbv2_suspend(struct usb_interface *, pm_message_t); | |||
371 | extern int dvb_usbv2_resume(struct usb_interface *); | 372 | extern int dvb_usbv2_resume(struct usb_interface *); |
372 | 373 | ||
373 | /* the generic read/write method for device control */ | 374 | /* the generic read/write method for device control */ |
374 | extern int dvb_usbv2_generic_rw(struct dvb_usb_device *, u8 *, u16, u8 *, u16, | 375 | extern int dvb_usbv2_generic_rw(struct dvb_usb_device *, u8 *, u16, u8 *, u16); |
375 | int); | ||
376 | extern int dvb_usbv2_generic_write(struct dvb_usb_device *, u8 *, u16); | 376 | extern int dvb_usbv2_generic_write(struct dvb_usb_device *, u8 *, u16); |
377 | 377 | ||
378 | #endif | 378 | #endif |
diff --git a/drivers/media/dvb/dvb-usb/dvb_usb_urb.c b/drivers/media/dvb/dvb-usb/dvb_usb_urb.c index e886362ccf7e..11e284b371be 100644 --- a/drivers/media/dvb/dvb-usb/dvb_usb_urb.c +++ b/drivers/media/dvb/dvb-usb/dvb_usb_urb.c | |||
@@ -10,55 +10,50 @@ | |||
10 | 10 | ||
11 | #undef DVB_USB_XFER_DEBUG | 11 | #undef DVB_USB_XFER_DEBUG |
12 | int dvb_usbv2_generic_rw(struct dvb_usb_device *d, u8 *wbuf, u16 wlen, u8 *rbuf, | 12 | int dvb_usbv2_generic_rw(struct dvb_usb_device *d, u8 *wbuf, u16 wlen, u8 *rbuf, |
13 | u16 rlen, int delay_ms) | 13 | u16 rlen) |
14 | { | 14 | { |
15 | int actlen, ret = -ENOMEM; | 15 | int ret, actual_length; |
16 | 16 | ||
17 | if (!d || wbuf == NULL || wlen == 0) | 17 | if (!d || !wbuf || !wlen || !d->props->generic_bulk_ctrl_endpoint || |
18 | return -EINVAL; | 18 | !d->props->generic_bulk_ctrl_endpoint_response) { |
19 | 19 | pr_debug("%s: failed=%d\n", __func__, -EINVAL); | |
20 | if (d->props->generic_bulk_ctrl_endpoint == 0) { | ||
21 | pr_err("%s: endpoint for generic control not specified\n", | ||
22 | KBUILD_MODNAME); | ||
23 | return -EINVAL; | 20 | return -EINVAL; |
24 | } | 21 | } |
25 | 22 | ||
26 | ret = mutex_lock_interruptible(&d->usb_mutex); | 23 | ret = mutex_lock_interruptible(&d->usb_mutex); |
27 | if (ret) | 24 | if (ret < 0) |
28 | return ret; | 25 | return ret; |
29 | 26 | ||
30 | #ifdef DVB_USB_XFER_DEBUG | 27 | #ifdef DVB_USB_XFER_DEBUG |
31 | print_hex_dump(KERN_DEBUG, KBUILD_MODNAME ": >>> ", DUMP_PREFIX_NONE, | 28 | print_hex_dump(KERN_DEBUG, KBUILD_MODNAME ": >>> ", DUMP_PREFIX_NONE, |
32 | 32, 1, wbuf, wlen, 0); | 29 | 32, 1, wbuf, wlen, 0); |
33 | #endif | 30 | #endif |
34 | |||
35 | ret = usb_bulk_msg(d->udev, usb_sndbulkpipe(d->udev, | 31 | ret = usb_bulk_msg(d->udev, usb_sndbulkpipe(d->udev, |
36 | d->props->generic_bulk_ctrl_endpoint), wbuf, wlen, | 32 | d->props->generic_bulk_ctrl_endpoint), wbuf, wlen, |
37 | &actlen, 2000); | 33 | &actual_length, 2000); |
38 | 34 | if (ret < 0) | |
39 | if (ret) | 35 | pr_err("%s: usb_bulk_msg() failed=%d\n", KBUILD_MODNAME, ret); |
40 | pr_err("%s: bulk message failed: %d (%d/%d)\n", KBUILD_MODNAME, | ||
41 | ret, wlen, actlen); | ||
42 | else | 36 | else |
43 | ret = actlen != wlen ? -1 : 0; | 37 | ret = actual_length != wlen ? -EIO : 0; |
44 | 38 | ||
45 | /* an answer is expected, and no error before */ | 39 | /* an answer is expected, and no error before */ |
46 | if (!ret && rbuf && rlen) { | 40 | if (!ret && rbuf && rlen) { |
47 | if (delay_ms) | 41 | if (d->props->generic_bulk_ctrl_delay) |
48 | msleep(delay_ms); | 42 | usleep_range(d->props->generic_bulk_ctrl_delay, |
43 | d->props->generic_bulk_ctrl_delay | ||
44 | + 20000); | ||
49 | 45 | ||
50 | ret = usb_bulk_msg(d->udev, usb_rcvbulkpipe(d->udev, | 46 | ret = usb_bulk_msg(d->udev, usb_rcvbulkpipe(d->udev, |
51 | d->props->generic_bulk_ctrl_endpoint_response ? | 47 | d->props->generic_bulk_ctrl_endpoint_response), |
52 | d->props->generic_bulk_ctrl_endpoint_response : | 48 | rbuf, rlen, &actual_length, 2000); |
53 | d->props->generic_bulk_ctrl_endpoint), | ||
54 | rbuf, rlen, &actlen, 2000); | ||
55 | |||
56 | if (ret) | 49 | if (ret) |
57 | pr_err("%s: recv bulk message failed: %d\n", | 50 | pr_err("%s: 2nd usb_bulk_msg() failed=%d\n", |
58 | KBUILD_MODNAME, ret); | 51 | KBUILD_MODNAME, ret); |
52 | |||
59 | #ifdef DVB_USB_XFER_DEBUG | 53 | #ifdef DVB_USB_XFER_DEBUG |
60 | print_hex_dump(KERN_DEBUG, KBUILD_MODNAME ": <<< ", | 54 | print_hex_dump(KERN_DEBUG, KBUILD_MODNAME ": <<< ", |
61 | DUMP_PREFIX_NONE, 32, 1, rbuf, actlen, 0); | 55 | DUMP_PREFIX_NONE, 32, 1, rbuf, actual_length, |
56 | 0); | ||
62 | #endif | 57 | #endif |
63 | } | 58 | } |
64 | 59 | ||
@@ -69,6 +64,6 @@ EXPORT_SYMBOL(dvb_usbv2_generic_rw); | |||
69 | 64 | ||
70 | int dvb_usbv2_generic_write(struct dvb_usb_device *d, u8 *buf, u16 len) | 65 | int dvb_usbv2_generic_write(struct dvb_usb_device *d, u8 *buf, u16 len) |
71 | { | 66 | { |
72 | return dvb_usbv2_generic_rw(d, buf, len, NULL, 0, 0); | 67 | return dvb_usbv2_generic_rw(d, buf, len, NULL, 0); |
73 | } | 68 | } |
74 | EXPORT_SYMBOL(dvb_usbv2_generic_write); | 69 | EXPORT_SYMBOL(dvb_usbv2_generic_write); |