diff options
-rw-r--r-- | drivers/net/can/usb/peak_usb/pcan_usb_fd.c | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/drivers/net/can/usb/peak_usb/pcan_usb_fd.c b/drivers/net/can/usb/peak_usb/pcan_usb_fd.c index 7ccdc3e30c98..53d6bb045e9e 100644 --- a/drivers/net/can/usb/peak_usb/pcan_usb_fd.c +++ b/drivers/net/can/usb/peak_usb/pcan_usb_fd.c | |||
@@ -184,7 +184,7 @@ static int pcan_usb_fd_send_cmd(struct peak_usb_device *dev, void *cmd_tail) | |||
184 | void *cmd_head = pcan_usb_fd_cmd_buffer(dev); | 184 | void *cmd_head = pcan_usb_fd_cmd_buffer(dev); |
185 | int err = 0; | 185 | int err = 0; |
186 | u8 *packet_ptr; | 186 | u8 *packet_ptr; |
187 | int i, n = 1, packet_len; | 187 | int packet_len; |
188 | ptrdiff_t cmd_len; | 188 | ptrdiff_t cmd_len; |
189 | 189 | ||
190 | /* usb device unregistered? */ | 190 | /* usb device unregistered? */ |
@@ -201,17 +201,13 @@ static int pcan_usb_fd_send_cmd(struct peak_usb_device *dev, void *cmd_tail) | |||
201 | } | 201 | } |
202 | 202 | ||
203 | packet_ptr = cmd_head; | 203 | packet_ptr = cmd_head; |
204 | packet_len = cmd_len; | ||
204 | 205 | ||
205 | /* firmware is not able to re-assemble 512 bytes buffer in full-speed */ | 206 | /* firmware is not able to re-assemble 512 bytes buffer in full-speed */ |
206 | if ((dev->udev->speed != USB_SPEED_HIGH) && | 207 | if (unlikely(dev->udev->speed != USB_SPEED_HIGH)) |
207 | (cmd_len > PCAN_UFD_LOSPD_PKT_SIZE)) { | 208 | packet_len = min(packet_len, PCAN_UFD_LOSPD_PKT_SIZE); |
208 | packet_len = PCAN_UFD_LOSPD_PKT_SIZE; | ||
209 | n += cmd_len / packet_len; | ||
210 | } else { | ||
211 | packet_len = cmd_len; | ||
212 | } | ||
213 | 209 | ||
214 | for (i = 0; i < n; i++) { | 210 | do { |
215 | err = usb_bulk_msg(dev->udev, | 211 | err = usb_bulk_msg(dev->udev, |
216 | usb_sndbulkpipe(dev->udev, | 212 | usb_sndbulkpipe(dev->udev, |
217 | PCAN_USBPRO_EP_CMDOUT), | 213 | PCAN_USBPRO_EP_CMDOUT), |
@@ -224,7 +220,12 @@ static int pcan_usb_fd_send_cmd(struct peak_usb_device *dev, void *cmd_tail) | |||
224 | } | 220 | } |
225 | 221 | ||
226 | packet_ptr += packet_len; | 222 | packet_ptr += packet_len; |
227 | } | 223 | cmd_len -= packet_len; |
224 | |||
225 | if (cmd_len < PCAN_UFD_LOSPD_PKT_SIZE) | ||
226 | packet_len = cmd_len; | ||
227 | |||
228 | } while (packet_len > 0); | ||
228 | 229 | ||
229 | return err; | 230 | return err; |
230 | } | 231 | } |