summaryrefslogtreecommitdiffstats
path: root/uClinux-2.4.20-uc1/drivers/usb/audio.c
diff options
context:
space:
mode:
Diffstat (limited to 'uClinux-2.4.20-uc1/drivers/usb/audio.c')
-rw-r--r--uClinux-2.4.20-uc1/drivers/usb/audio.c44
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) {