diff options
author | Antti Palosaari <crope@iki.fi> | 2013-02-26 11:01:48 -0500 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2013-03-18 15:43:15 -0400 |
commit | acb0549acc270c8206ecfdd35d34fc349c3457a0 (patch) | |
tree | 64973a8cde6e41ca98411b663eed23b8aefe0512 | |
parent | 972b072a83316e0d5a1fd0cb78eb99a57a305dce (diff) |
[media] dvb_usb_v2: locked versions of USB bulk IO functions
Implement:
dvb_usbv2_generic_rw_locked()
dvb_usbv2_generic_write_locked()
Caller must hold device lock when locked versions are called.
Signed-off-by: Antti Palosaari <crope@iki.fi>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
-rw-r--r-- | drivers/media/usb/dvb-usb-v2/dvb_usb.h | 4 | ||||
-rw-r--r-- | drivers/media/usb/dvb-usb-v2/dvb_usb_urb.c | 38 |
2 files changed, 37 insertions, 5 deletions
diff --git a/drivers/media/usb/dvb-usb-v2/dvb_usb.h b/drivers/media/usb/dvb-usb-v2/dvb_usb.h index 3cac8bd0b116..42801f8ecaa8 100644 --- a/drivers/media/usb/dvb-usb-v2/dvb_usb.h +++ b/drivers/media/usb/dvb-usb-v2/dvb_usb.h | |||
@@ -400,5 +400,9 @@ extern int dvb_usbv2_reset_resume(struct usb_interface *); | |||
400 | /* the generic read/write method for device control */ | 400 | /* the generic read/write method for device control */ |
401 | extern int dvb_usbv2_generic_rw(struct dvb_usb_device *, u8 *, u16, u8 *, u16); | 401 | extern int dvb_usbv2_generic_rw(struct dvb_usb_device *, u8 *, u16, u8 *, u16); |
402 | extern int dvb_usbv2_generic_write(struct dvb_usb_device *, u8 *, u16); | 402 | extern int dvb_usbv2_generic_write(struct dvb_usb_device *, u8 *, u16); |
403 | /* caller must hold lock when locked versions are called */ | ||
404 | extern int dvb_usbv2_generic_rw_locked(struct dvb_usb_device *, | ||
405 | u8 *, u16, u8 *, u16); | ||
406 | extern int dvb_usbv2_generic_write_locked(struct dvb_usb_device *, u8 *, u16); | ||
403 | 407 | ||
404 | #endif | 408 | #endif |
diff --git a/drivers/media/usb/dvb-usb-v2/dvb_usb_urb.c b/drivers/media/usb/dvb-usb-v2/dvb_usb_urb.c index 5716662b4834..74c911fa1fe6 100644 --- a/drivers/media/usb/dvb-usb-v2/dvb_usb_urb.c +++ b/drivers/media/usb/dvb-usb-v2/dvb_usb_urb.c | |||
@@ -21,8 +21,8 @@ | |||
21 | 21 | ||
22 | #include "dvb_usb_common.h" | 22 | #include "dvb_usb_common.h" |
23 | 23 | ||
24 | int dvb_usbv2_generic_rw(struct dvb_usb_device *d, u8 *wbuf, u16 wlen, u8 *rbuf, | 24 | int dvb_usb_v2_generic_io(struct dvb_usb_device *d, |
25 | u16 rlen) | 25 | u8 *wbuf, u16 wlen, u8 *rbuf, u16 rlen) |
26 | { | 26 | { |
27 | int ret, actual_length; | 27 | int ret, actual_length; |
28 | 28 | ||
@@ -32,8 +32,6 @@ int dvb_usbv2_generic_rw(struct dvb_usb_device *d, u8 *wbuf, u16 wlen, u8 *rbuf, | |||
32 | return -EINVAL; | 32 | return -EINVAL; |
33 | } | 33 | } |
34 | 34 | ||
35 | mutex_lock(&d->usb_mutex); | ||
36 | |||
37 | dev_dbg(&d->udev->dev, "%s: >>> %*ph\n", __func__, wlen, wbuf); | 35 | dev_dbg(&d->udev->dev, "%s: >>> %*ph\n", __func__, wlen, wbuf); |
38 | 36 | ||
39 | ret = usb_bulk_msg(d->udev, usb_sndbulkpipe(d->udev, | 37 | ret = usb_bulk_msg(d->udev, usb_sndbulkpipe(d->udev, |
@@ -63,13 +61,43 @@ int dvb_usbv2_generic_rw(struct dvb_usb_device *d, u8 *wbuf, u16 wlen, u8 *rbuf, | |||
63 | actual_length, rbuf); | 61 | actual_length, rbuf); |
64 | } | 62 | } |
65 | 63 | ||
64 | return ret; | ||
65 | } | ||
66 | |||
67 | int dvb_usbv2_generic_rw(struct dvb_usb_device *d, | ||
68 | u8 *wbuf, u16 wlen, u8 *rbuf, u16 rlen) | ||
69 | { | ||
70 | int ret; | ||
71 | |||
72 | mutex_lock(&d->usb_mutex); | ||
73 | ret = dvb_usb_v2_generic_io(d, wbuf, wlen, rbuf, rlen); | ||
66 | mutex_unlock(&d->usb_mutex); | 74 | mutex_unlock(&d->usb_mutex); |
75 | |||
67 | return ret; | 76 | return ret; |
68 | } | 77 | } |
69 | EXPORT_SYMBOL(dvb_usbv2_generic_rw); | 78 | EXPORT_SYMBOL(dvb_usbv2_generic_rw); |
70 | 79 | ||
71 | int dvb_usbv2_generic_write(struct dvb_usb_device *d, u8 *buf, u16 len) | 80 | int dvb_usbv2_generic_write(struct dvb_usb_device *d, u8 *buf, u16 len) |
72 | { | 81 | { |
73 | return dvb_usbv2_generic_rw(d, buf, len, NULL, 0); | 82 | int ret; |
83 | |||
84 | mutex_lock(&d->usb_mutex); | ||
85 | ret = dvb_usb_v2_generic_io(d, buf, len, NULL, 0); | ||
86 | mutex_unlock(&d->usb_mutex); | ||
87 | |||
88 | return ret; | ||
74 | } | 89 | } |
75 | EXPORT_SYMBOL(dvb_usbv2_generic_write); | 90 | EXPORT_SYMBOL(dvb_usbv2_generic_write); |
91 | |||
92 | int dvb_usbv2_generic_rw_locked(struct dvb_usb_device *d, | ||
93 | u8 *wbuf, u16 wlen, u8 *rbuf, u16 rlen) | ||
94 | { | ||
95 | return dvb_usb_v2_generic_io(d, wbuf, wlen, rbuf, rlen); | ||
96 | } | ||
97 | EXPORT_SYMBOL(dvb_usbv2_generic_rw_locked); | ||
98 | |||
99 | int dvb_usbv2_generic_write_locked(struct dvb_usb_device *d, u8 *buf, u16 len) | ||
100 | { | ||
101 | return dvb_usb_v2_generic_io(d, buf, len, NULL, 0); | ||
102 | } | ||
103 | EXPORT_SYMBOL(dvb_usbv2_generic_write_locked); | ||