diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2008-10-06 17:27:15 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-10-06 17:27:15 -0400 |
commit | 11f9b020fa921bb33fff65b947f6422fe15f4414 (patch) | |
tree | 9f974d8037480192202ed9f9020adb7f8f2f0b53 /drivers/media/video/em28xx/em28xx-audio.c | |
parent | e683b423007b9befec30c672c695d0e6abf87493 (diff) | |
parent | db98fb8b5b9210ba3b14fb984a26060e4afdb9f5 (diff) |
Merge branch 'fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/v4l-dvb
* 'fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/v4l-dvb: (33 commits)
V4L/DVB (9103): em28xx: HVR-900 B3C0 - fix audio clicking issue
V4L/DVB (9099): em28xx: Add detection for K-WORLD DVB-T 310U
V4L/DVB (9092): gspca: Bad init values for sonixj ov7660.
V4L/DVB (9080): gspca: Add a delay after writing to the sonixj sensors.
V4L/DVB (9075): gspca: Bad check of returned status in i2c_read() spca561.
V4L/DVB (9053): fix buffer overflow in uvc-video
V4L/DVB (9043): S5H1420: Fix size of shadow-array to avoid overflow
V4L/DVB (9037): Fix support for Hauppauge Nova-S SE
V4L/DVB (9029): Fix deadlock in demux code
V4L/DVB (8979): sms1xxx: Add new USB product ID for Hauppauge WinTV MiniStick
V4L/DVB (8978): sms1xxx: fix product name for Hauppauge WinTV MiniStick
V4L/DVB (8967): Use correct XC3028L firmware for AMD ATI TV Wonder 600
V4L/DVB (8963): s2255drv field count fix
V4L/DVB (8961): zr36067: Fix RGBR pixel format
V4L/DVB (8960): drivers/media/video/cafe_ccic.c needs mm.h
V4L/DVB (8958): zr36067: Return proper bytes-per-line value
V4L/DVB (8957): zr36067: Restore the default pixel format
V4L/DVB (8955): bttv: Prevent NULL pointer dereference in radio_open
V4L/DVB (8935): em28xx-cards: Remove duplicate entry (EM2800_BOARD_KWORLD_USB2800)
V4L/DVB (8933): gspca: Disable light frquency for zc3xx cs2102 Kokom.
...
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; |