diff options
Diffstat (limited to 'uClinux-2.4.20-uc1/drivers/usb/audio.c')
-rw-r--r-- | uClinux-2.4.20-uc1/drivers/usb/audio.c | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/uClinux-2.4.20-uc1/drivers/usb/audio.c b/uClinux-2.4.20-uc1/drivers/usb/audio.c index 2a6dd18..4fd0ff5 100644 --- a/uClinux-2.4.20-uc1/drivers/usb/audio.c +++ b/uClinux-2.4.20-uc1/drivers/usb/audio.c @@ -1019,20 +1019,36 @@ static int usbin_start(struct usb_audiodev *as) bufsz = DESCFRAMES * maxsze; if (u->durb[0].urb.transfer_buffer) kfree(u->durb[0].urb.transfer_buffer); +#ifdef CONFIG_BOARD_W90N745 + u->durb[0].urb.transfer_buffer = ((unsigned long)kmalloc(bufsz, GFP_KERNEL) | 0x80000000); +#else u->durb[0].urb.transfer_buffer = kmalloc(bufsz, GFP_KERNEL); +#endif u->durb[0].urb.transfer_buffer_length = bufsz; if (u->durb[1].urb.transfer_buffer) kfree(u->durb[1].urb.transfer_buffer); +#ifdef CONFIG_BOARD_W90N745 + u->durb[1].urb.transfer_buffer = ((unsigned long)kmalloc(bufsz, GFP_KERNEL) | 0x80000000); +#else u->durb[1].urb.transfer_buffer = kmalloc(bufsz, GFP_KERNEL); +#endif u->durb[1].urb.transfer_buffer_length = bufsz; if (u->syncpipe) { if (u->surb[0].urb.transfer_buffer) kfree(u->surb[0].urb.transfer_buffer); +#ifdef CONFIG_BOARD_W90N745 + u->surb[0].urb.transfer_buffer = ((unsigned long)kmalloc(3*SYNCFRAMES, GFP_KERNEL) | 0x80000000); +#else u->surb[0].urb.transfer_buffer = kmalloc(3*SYNCFRAMES, GFP_KERNEL); +#endif u->surb[0].urb.transfer_buffer_length = 3*SYNCFRAMES; if (u->surb[1].urb.transfer_buffer) kfree(u->surb[1].urb.transfer_buffer); +#ifdef CONFIG_BOARD_W90N745 + u->surb[1].urb.transfer_buffer = ((unsigned long)kmalloc(3*SYNCFRAMES, GFP_KERNEL) | 0x80000000); +#else u->surb[1].urb.transfer_buffer = kmalloc(3*SYNCFRAMES, GFP_KERNEL); +#endif u->surb[1].urb.transfer_buffer_length = 3*SYNCFRAMES; } if (!u->durb[0].urb.transfer_buffer || !u->durb[1].urb.transfer_buffer || @@ -1384,20 +1400,36 @@ static int usbout_start(struct usb_audiodev *as) bufsz = DESCFRAMES * maxsze; if (u->durb[0].urb.transfer_buffer) kfree(u->durb[0].urb.transfer_buffer); +#ifdef CONFIG_BOARD_W90N745 + u->durb[0].urb.transfer_buffer = ((unsigned long)kmalloc(bufsz, GFP_KERNEL) | 0x80000000); +#else u->durb[0].urb.transfer_buffer = kmalloc(bufsz, GFP_KERNEL); +#endif u->durb[0].urb.transfer_buffer_length = bufsz; if (u->durb[1].urb.transfer_buffer) kfree(u->durb[1].urb.transfer_buffer); +#ifdef CONFIG_BOARD_W90N745 + u->durb[1].urb.transfer_buffer = ((unsigned long)kmalloc(bufsz, GFP_KERNEL) | 0x80000000); +#else u->durb[1].urb.transfer_buffer = kmalloc(bufsz, GFP_KERNEL); +#endif u->durb[1].urb.transfer_buffer_length = bufsz; if (u->syncpipe) { if (u->surb[0].urb.transfer_buffer) kfree(u->surb[0].urb.transfer_buffer); +#ifdef CONFIG_BOARD_W90N745 + u->surb[0].urb.transfer_buffer = ((unsigned long)kmalloc(3*SYNCFRAMES, GFP_KERNEL) | 0x80000000); +#else u->surb[0].urb.transfer_buffer = kmalloc(3*SYNCFRAMES, GFP_KERNEL); +#endif u->surb[0].urb.transfer_buffer_length = 3*SYNCFRAMES; if (u->surb[1].urb.transfer_buffer) kfree(u->surb[1].urb.transfer_buffer); +#ifdef CONFIG_BOARD_W90N745 + u->surb[1].urb.transfer_buffer = ((unsigned long)kmalloc(3*SYNCFRAMES, GFP_KERNEL) | 0x80000000); +#else u->surb[1].urb.transfer_buffer = kmalloc(3*SYNCFRAMES, GFP_KERNEL); +#endif u->surb[1].urb.transfer_buffer_length = 3*SYNCFRAMES; } if (!u->durb[0].urb.transfer_buffer || !u->durb[1].urb.transfer_buffer || @@ -2325,6 +2357,7 @@ static int usb_audio_mmap(struct file *file, struct vm_area_struct *vma) struct dmabuf *db; int ret = -EINVAL; +#ifndef CONFIG_BOARD_W90N745 lock_kernel(); if (vma->vm_flags & VM_WRITE) { if ((ret = prog_dmabuf_out(as)) != 0) @@ -2344,6 +2377,7 @@ static int usb_audio_mmap(struct file *file, struct vm_area_struct *vma) ret = dmabuf_mmap(db, vma->vm_start, vma->vm_end - vma->vm_start, vma->vm_page_prot); out: unlock_kernel(); +#endif return ret; } @@ -3674,6 +3708,12 @@ static void *usb_audio_parsecontrol(struct usb_device *dev, unsigned char *buffe dev->devnum, ctrlif, j); continue; } +#ifdef CONFIG_BOARD_W90N745 + if (iface->altsetting[2].bNumEndpoints < 1) { + printk(KERN_ERR "usbaudio: device %d audiocontrol interface %u interface %u has no endpoint\n", + dev->devnum, ctrlif, j); + continue; + } /* note: this requires the data endpoint to be ep0 and the optional sync ep to be ep1, which seems to be the case */ if (iface->altsetting[1].endpoint[0].bEndpointAddress & USB_DIR_IN) { @@ -3754,7 +3794,11 @@ static void *usb_audio_probe(struct usb_device *dev, unsigned int ifnum, return NULL; } buflen = buf[2] | (buf[3] << 8); +#ifdef CONFIG_BOARD_W90N745 + if (!(buffer = ((unsigned long)kmalloc(buflen, GFP_KERNEL) | 0x80000000))) +#else if (!(buffer = kmalloc(buflen, GFP_KERNEL))) +#endif return NULL; ret = usb_get_descriptor(dev, USB_DT_CONFIG, i, buffer, buflen); if (ret < 0) { |