aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/usb/dvb-usb-v2/dvb_usb_urb.c
diff options
context:
space:
mode:
authorAntti Palosaari <crope@iki.fi>2013-02-26 11:01:48 -0500
committerMauro Carvalho Chehab <mchehab@redhat.com>2013-03-18 15:43:15 -0400
commitacb0549acc270c8206ecfdd35d34fc349c3457a0 (patch)
tree64973a8cde6e41ca98411b663eed23b8aefe0512 /drivers/media/usb/dvb-usb-v2/dvb_usb_urb.c
parent972b072a83316e0d5a1fd0cb78eb99a57a305dce (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>
Diffstat (limited to 'drivers/media/usb/dvb-usb-v2/dvb_usb_urb.c')
-rw-r--r--drivers/media/usb/dvb-usb-v2/dvb_usb_urb.c38
1 files changed, 33 insertions, 5 deletions
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
24int dvb_usbv2_generic_rw(struct dvb_usb_device *d, u8 *wbuf, u16 wlen, u8 *rbuf, 24int 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
67int 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}
69EXPORT_SYMBOL(dvb_usbv2_generic_rw); 78EXPORT_SYMBOL(dvb_usbv2_generic_rw);
70 79
71int dvb_usbv2_generic_write(struct dvb_usb_device *d, u8 *buf, u16 len) 80int 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}
75EXPORT_SYMBOL(dvb_usbv2_generic_write); 90EXPORT_SYMBOL(dvb_usbv2_generic_write);
91
92int 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}
97EXPORT_SYMBOL(dvb_usbv2_generic_rw_locked);
98
99int 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}
103EXPORT_SYMBOL(dvb_usbv2_generic_write_locked);