diff options
| -rw-r--r-- | drivers/staging/comedi/drivers/usbduxfast.c | 30 |
1 files changed, 18 insertions, 12 deletions
diff --git a/drivers/staging/comedi/drivers/usbduxfast.c b/drivers/staging/comedi/drivers/usbduxfast.c index 4bf5dd094dc9..1ba0e3df492d 100644 --- a/drivers/staging/comedi/drivers/usbduxfast.c +++ b/drivers/staging/comedi/drivers/usbduxfast.c | |||
| @@ -436,10 +436,14 @@ static void usbduxfastsub_ai_Irq(struct urb *urb) | |||
| 436 | static int usbduxfastsub_start(struct usbduxfastsub_s *udfs) | 436 | static int usbduxfastsub_start(struct usbduxfastsub_s *udfs) |
| 437 | { | 437 | { |
| 438 | int ret; | 438 | int ret; |
| 439 | unsigned char local_transfer_buffer[16]; | 439 | unsigned char *local_transfer_buffer; |
| 440 | |||
| 441 | local_transfer_buffer = kmalloc(1, GFP_KERNEL); | ||
| 442 | if (!local_transfer_buffer) | ||
| 443 | return -ENOMEM; | ||
| 440 | 444 | ||
| 441 | /* 7f92 to zero */ | 445 | /* 7f92 to zero */ |
| 442 | local_transfer_buffer[0] = 0; | 446 | *local_transfer_buffer = 0; |
| 443 | /* bRequest, "Firmware" */ | 447 | /* bRequest, "Firmware" */ |
| 444 | ret = usb_control_msg(udfs->usbdev, usb_sndctrlpipe(udfs->usbdev, 0), | 448 | ret = usb_control_msg(udfs->usbdev, usb_sndctrlpipe(udfs->usbdev, 0), |
| 445 | USBDUXFASTSUB_FIRMWARE, | 449 | USBDUXFASTSUB_FIRMWARE, |
| @@ -450,22 +454,25 @@ static int usbduxfastsub_start(struct usbduxfastsub_s *udfs) | |||
| 450 | local_transfer_buffer, | 454 | local_transfer_buffer, |
| 451 | 1, /* Length */ | 455 | 1, /* Length */ |
| 452 | EZTIMEOUT); /* Timeout */ | 456 | EZTIMEOUT); /* Timeout */ |
| 453 | if (ret < 0) { | 457 | if (ret < 0) |
| 454 | dev_err(&udfs->interface->dev, | 458 | dev_err(&udfs->interface->dev, |
| 455 | "control msg failed (start)\n"); | 459 | "control msg failed (start)\n"); |
| 456 | return ret; | ||
| 457 | } | ||
| 458 | 460 | ||
| 459 | return 0; | 461 | kfree(local_transfer_buffer); |
| 462 | return ret; | ||
| 460 | } | 463 | } |
| 461 | 464 | ||
| 462 | static int usbduxfastsub_stop(struct usbduxfastsub_s *udfs) | 465 | static int usbduxfastsub_stop(struct usbduxfastsub_s *udfs) |
| 463 | { | 466 | { |
| 464 | int ret; | 467 | int ret; |
| 465 | unsigned char local_transfer_buffer[16]; | 468 | unsigned char *local_transfer_buffer; |
| 469 | |||
| 470 | local_transfer_buffer = kmalloc(1, GFP_KERNEL); | ||
| 471 | if (!local_transfer_buffer) | ||
| 472 | return -ENOMEM; | ||
| 466 | 473 | ||
| 467 | /* 7f92 to one */ | 474 | /* 7f92 to one */ |
| 468 | local_transfer_buffer[0] = 1; | 475 | *local_transfer_buffer = 1; |
| 469 | /* bRequest, "Firmware" */ | 476 | /* bRequest, "Firmware" */ |
| 470 | ret = usb_control_msg(udfs->usbdev, usb_sndctrlpipe(udfs->usbdev, 0), | 477 | ret = usb_control_msg(udfs->usbdev, usb_sndctrlpipe(udfs->usbdev, 0), |
| 471 | USBDUXFASTSUB_FIRMWARE, | 478 | USBDUXFASTSUB_FIRMWARE, |
| @@ -474,13 +481,12 @@ static int usbduxfastsub_stop(struct usbduxfastsub_s *udfs) | |||
| 474 | 0x0000, /* Index */ | 481 | 0x0000, /* Index */ |
| 475 | local_transfer_buffer, 1, /* Length */ | 482 | local_transfer_buffer, 1, /* Length */ |
| 476 | EZTIMEOUT); /* Timeout */ | 483 | EZTIMEOUT); /* Timeout */ |
| 477 | if (ret < 0) { | 484 | if (ret < 0) |
| 478 | dev_err(&udfs->interface->dev, | 485 | dev_err(&udfs->interface->dev, |
| 479 | "control msg failed (stop)\n"); | 486 | "control msg failed (stop)\n"); |
| 480 | return ret; | ||
| 481 | } | ||
| 482 | 487 | ||
| 483 | return 0; | 488 | kfree(local_transfer_buffer); |
| 489 | return ret; | ||
| 484 | } | 490 | } |
| 485 | 491 | ||
| 486 | static int usbduxfastsub_upload(struct usbduxfastsub_s *udfs, | 492 | static int usbduxfastsub_upload(struct usbduxfastsub_s *udfs, |
