diff options
Diffstat (limited to 'drivers/media/video/em28xx/em28xx-audio.c')
| -rw-r--r-- | drivers/media/video/em28xx/em28xx-audio.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/drivers/media/video/em28xx/em28xx-audio.c b/drivers/media/video/em28xx/em28xx-audio.c index 3c006103c1eb..ac3292d7646c 100644 --- a/drivers/media/video/em28xx/em28xx-audio.c +++ b/drivers/media/video/em28xx/em28xx-audio.c | |||
| @@ -117,10 +117,10 @@ static void em28xx_audio_isocirq(struct urb *urb) | |||
| 117 | 117 | ||
| 118 | if (oldptr + length >= runtime->buffer_size) { | 118 | if (oldptr + length >= runtime->buffer_size) { |
| 119 | unsigned int cnt = | 119 | unsigned int cnt = |
| 120 | runtime->buffer_size - oldptr - 1; | 120 | runtime->buffer_size - oldptr; |
| 121 | memcpy(runtime->dma_area + oldptr * stride, cp, | 121 | memcpy(runtime->dma_area + oldptr * stride, cp, |
| 122 | cnt * stride); | 122 | cnt * stride); |
| 123 | memcpy(runtime->dma_area, cp + cnt, | 123 | memcpy(runtime->dma_area, cp + cnt * stride, |
| 124 | length * stride - cnt * stride); | 124 | length * stride - cnt * stride); |
| 125 | } else { | 125 | } else { |
| 126 | memcpy(runtime->dma_area + oldptr * stride, cp, | 126 | memcpy(runtime->dma_area + oldptr * stride, cp, |
| @@ -161,8 +161,14 @@ static int em28xx_init_audio_isoc(struct em28xx *dev) | |||
| 161 | 161 | ||
| 162 | memset(dev->adev->transfer_buffer[i], 0x80, sb_size); | 162 | memset(dev->adev->transfer_buffer[i], 0x80, sb_size); |
| 163 | urb = usb_alloc_urb(EM28XX_NUM_AUDIO_PACKETS, GFP_ATOMIC); | 163 | urb = usb_alloc_urb(EM28XX_NUM_AUDIO_PACKETS, GFP_ATOMIC); |
| 164 | if (!urb) | 164 | if (!urb) { |
| 165 | em28xx_errdev("usb_alloc_urb failed!\n"); | ||
| 166 | for (j = 0; j < i; j++) { | ||
| 167 | usb_free_urb(dev->adev->urb[j]); | ||
| 168 | kfree(dev->adev->transfer_buffer[j]); | ||
| 169 | } | ||
| 165 | return -ENOMEM; | 170 | return -ENOMEM; |
| 171 | } | ||
| 166 | 172 | ||
| 167 | urb->dev = dev->udev; | 173 | urb->dev = dev->udev; |
| 168 | urb->context = dev; | 174 | urb->context = dev; |
