aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMalcolm Priestley <tvboxspy@gmail.com>2018-11-29 17:30:25 -0500
committerMauro Carvalho Chehab <mchehab+samsung@kernel.org>2018-12-05 03:24:23 -0500
commitd3411f656cbba9c3cfb85644189f83ce159c6e29 (patch)
tree23004fb668ad7ff5ac62542594b46698c5ab36fd
parent8824e5018c1944ef68d1a4a566ac245290c99da8 (diff)
media: lmedm04: use dvb_usbv2_generic_rw_locked
Use dvb-usb-v2 generic usb function for bulk transfers and simplify logic. Signed-off-by: Malcolm Priestley <tvboxspy@gmail.com> Signed-off-by: Sean Young <sean@mess.org> Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
-rw-r--r--drivers/media/usb/dvb-usb-v2/lmedm04.c42
1 files changed, 12 insertions, 30 deletions
diff --git a/drivers/media/usb/dvb-usb-v2/lmedm04.c b/drivers/media/usb/dvb-usb-v2/lmedm04.c
index 962cee02b19c..e9b149a26ce5 100644
--- a/drivers/media/usb/dvb-usb-v2/lmedm04.c
+++ b/drivers/media/usb/dvb-usb-v2/lmedm04.c
@@ -147,50 +147,30 @@ struct lme2510_state {
147 u8 dvb_usb_lme2510_firmware; 147 u8 dvb_usb_lme2510_firmware;
148}; 148};
149 149
150static int lme2510_bulk_write(struct usb_device *dev,
151 u8 *snd, int len, u8 pipe)
152{
153 int actual_l;
154
155 return usb_bulk_msg(dev, usb_sndbulkpipe(dev, pipe),
156 snd, len, &actual_l, 100);
157}
158
159static int lme2510_bulk_read(struct usb_device *dev,
160 u8 *rev, int len, u8 pipe)
161{
162 int actual_l;
163
164 return usb_bulk_msg(dev, usb_rcvbulkpipe(dev, pipe),
165 rev, len, &actual_l, 200);
166}
167
168static int lme2510_usb_talk(struct dvb_usb_device *d, 150static int lme2510_usb_talk(struct dvb_usb_device *d,
169 u8 *wbuf, int wlen, u8 *rbuf, int rlen) 151 u8 *wbuf, int wlen, u8 *rbuf, int rlen)
170{ 152{
171 struct lme2510_state *st = d->priv; 153 struct lme2510_state *st = d->priv;
172 u8 *buff = st->usb_buffer;
173 int ret = 0; 154 int ret = 0;
174 155
175 ret = mutex_lock_interruptible(&d->usb_mutex); 156 if (max(wlen, rlen) > sizeof(st->usb_buffer))
157 return -EINVAL;
176 158
159 ret = mutex_lock_interruptible(&d->usb_mutex);
177 if (ret < 0) 160 if (ret < 0)
178 return -EAGAIN; 161 return -EAGAIN;
179 162
180 /* the read/write capped at 64 */ 163 memcpy(st->usb_buffer, wbuf, wlen);
181 memcpy(buff, wbuf, (wlen < 64) ? wlen : 64);
182 164
183 ret |= lme2510_bulk_write(d->udev, buff, wlen , 0x01); 165 ret = dvb_usbv2_generic_rw_locked(d, st->usb_buffer, wlen,
166 st->usb_buffer, rlen);
184 167
185 ret |= lme2510_bulk_read(d->udev, buff, (rlen < 64) ? 168 if (rlen)
186 rlen : 64 , 0x01); 169 memcpy(rbuf, st->usb_buffer, rlen);
187
188 if (rlen > 0)
189 memcpy(rbuf, buff, rlen);
190 170
191 mutex_unlock(&d->usb_mutex); 171 mutex_unlock(&d->usb_mutex);
192 172
193 return (ret < 0) ? -ENODEV : 0; 173 return ret;
194} 174}
195 175
196static int lme2510_stream_restart(struct dvb_usb_device *d) 176static int lme2510_stream_restart(struct dvb_usb_device *d)
@@ -1259,6 +1239,8 @@ static struct dvb_usb_device_properties lme2510_props = {
1259 .bInterfaceNumber = 0, 1239 .bInterfaceNumber = 0,
1260 .adapter_nr = adapter_nr, 1240 .adapter_nr = adapter_nr,
1261 .size_of_priv = sizeof(struct lme2510_state), 1241 .size_of_priv = sizeof(struct lme2510_state),
1242 .generic_bulk_ctrl_endpoint = 0x01,
1243 .generic_bulk_ctrl_endpoint_response = 0x01,
1262 1244
1263 .download_firmware = lme2510_download_firmware, 1245 .download_firmware = lme2510_download_firmware,
1264 1246