diff options
author | Malcolm Priestley <tvboxspy@gmail.com> | 2018-11-29 17:30:25 -0500 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab+samsung@kernel.org> | 2018-12-05 03:24:23 -0500 |
commit | d3411f656cbba9c3cfb85644189f83ce159c6e29 (patch) | |
tree | 23004fb668ad7ff5ac62542594b46698c5ab36fd | |
parent | 8824e5018c1944ef68d1a4a566ac245290c99da8 (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.c | 42 |
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 | ||
150 | static 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 | |||
159 | static 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 | |||
168 | static int lme2510_usb_talk(struct dvb_usb_device *d, | 150 | static 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 | ||
196 | static int lme2510_stream_restart(struct dvb_usb_device *d) | 176 | static 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 | ||