aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/media')
-rw-r--r--drivers/media/usb/dvb-usb-v2/dvb_usb.h4
-rw-r--r--drivers/media/usb/dvb-usb-v2/dvb_usb_urb.c38
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 */
401extern int dvb_usbv2_generic_rw(struct dvb_usb_device *, u8 *, u16, u8 *, u16); 401extern int dvb_usbv2_generic_rw(struct dvb_usb_device *, u8 *, u16, u8 *, u16);
402extern int dvb_usbv2_generic_write(struct dvb_usb_device *, u8 *, u16); 402extern int dvb_usbv2_generic_write(struct dvb_usb_device *, u8 *, u16);
403/* caller must hold lock when locked versions are called */
404extern int dvb_usbv2_generic_rw_locked(struct dvb_usb_device *,
405 u8 *, u16, u8 *, u16);
406extern 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
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);