This commit was generated by cvs2svn to compensate for changes in r1129,
[linux-2.6.git] / drivers / usb / class / audio.c
index 96a1c02..3ad9ee8 100644 (file)
 
 #define dprintk(x)
 
-#undef abs
-extern int abs(int __x) __attribute_const__; /* Shut up warning */
-
 /* --------------------------------------------------------------------- */
 
 /*
@@ -398,17 +395,6 @@ struct usb_audio_state {
 
 /* --------------------------------------------------------------------- */
 
-/* prevent picking up a bogus abs macro */
-#undef abs
-static inline int abs(int x)
-{
-        if (x < 0)
-               return -x;
-       return x;
-}
-                                
-/* --------------------------------------------------------------------- */
-
 static inline unsigned ld2(unsigned int x)
 {
        unsigned r = 0;
@@ -523,7 +509,10 @@ static int dmabuf_mmap(struct vm_area_struct *vma, struct dmabuf *db, unsigned l
                        return -EINVAL;
        db->mapped = 1;
        for(nr = 0; nr < size; nr++) {
-               if (remap_page_range(vma, start, virt_to_phys(db->sgbuf[nr]), PAGE_SIZE, prot))
+               unsigned long pfn;
+
+               pfn = virt_to_phys(db->sgbuf[nr]) >> PAGE_SHIFT;
+               if (remap_pfn_range(vma, start, pfn, PAGE_SIZE, prot))
                        return -EAGAIN;
                start += PAGE_SIZE;
        }
@@ -642,32 +631,30 @@ static void usbin_stop(struct usb_audiodev *as)
        i = u->flags;
        spin_unlock_irqrestore(&as->lock, flags);
        while (i & (FLG_URB0RUNNING|FLG_URB1RUNNING|FLG_SYNC0RUNNING|FLG_SYNC1RUNNING)) {
-               set_current_state(notkilled ? TASK_INTERRUPTIBLE : TASK_UNINTERRUPTIBLE);
-               schedule_timeout(1);
+               if (notkilled)
+                       schedule_timeout_interruptible(1);
+               else
+                       schedule_timeout_uninterruptible(1);
                spin_lock_irqsave(&as->lock, flags);
                i = u->flags;
                spin_unlock_irqrestore(&as->lock, flags);
                if (notkilled && signal_pending(current)) {
                        if (i & FLG_URB0RUNNING)
-                               usb_unlink_urb(u->durb[0].urb);
+                               usb_kill_urb(u->durb[0].urb);
                        if (i & FLG_URB1RUNNING)
-                               usb_unlink_urb(u->durb[1].urb);
+                               usb_kill_urb(u->durb[1].urb);
                        if (i & FLG_SYNC0RUNNING)
-                               usb_unlink_urb(u->surb[0].urb);
+                               usb_kill_urb(u->surb[0].urb);
                        if (i & FLG_SYNC1RUNNING)
-                               usb_unlink_urb(u->surb[1].urb);
+                               usb_kill_urb(u->surb[1].urb);
                        notkilled = 0;
                }
        }
        set_current_state(TASK_RUNNING);
-       if (u->durb[0].urb->transfer_buffer)
-               kfree(u->durb[0].urb->transfer_buffer);
-       if (u->durb[1].urb->transfer_buffer)
-               kfree(u->durb[1].urb->transfer_buffer);
-       if (u->surb[0].urb->transfer_buffer)
-               kfree(u->surb[0].urb->transfer_buffer);
-       if (u->surb[1].urb->transfer_buffer)
-               kfree(u->surb[1].urb->transfer_buffer);
+       kfree(u->durb[0].urb->transfer_buffer);
+       kfree(u->durb[1].urb->transfer_buffer);
+       kfree(u->surb[0].urb->transfer_buffer);
+       kfree(u->surb[1].urb->transfer_buffer);
        u->durb[0].urb->transfer_buffer = u->durb[1].urb->transfer_buffer = 
                u->surb[0].urb->transfer_buffer = u->surb[1].urb->transfer_buffer = NULL;
 }
@@ -1020,21 +1007,17 @@ static int usbin_start(struct usb_audiodev *as)
                u->phase = 0;
                maxsze = (u->freqmax + 0x3fff) >> (14 - AFMT_BYTESSHIFT(u->format));
                bufsz = DESCFRAMES * maxsze;
-               if (u->durb[0].urb->transfer_buffer)
-                       kfree(u->durb[0].urb->transfer_buffer);
+               kfree(u->durb[0].urb->transfer_buffer);
                u->durb[0].urb->transfer_buffer = kmalloc(bufsz, GFP_KERNEL);
                u->durb[0].urb->transfer_buffer_length = bufsz;
-               if (u->durb[1].urb->transfer_buffer)
-                       kfree(u->durb[1].urb->transfer_buffer);
+               kfree(u->durb[1].urb->transfer_buffer);
                u->durb[1].urb->transfer_buffer = kmalloc(bufsz, GFP_KERNEL);
                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);
+                       kfree(u->surb[0].urb->transfer_buffer);
                        u->surb[0].urb->transfer_buffer = kmalloc(3*SYNCFRAMES, GFP_KERNEL);
                        u->surb[0].urb->transfer_buffer_length = 3*SYNCFRAMES;
-                       if (u->surb[1].urb->transfer_buffer)
-                               kfree(u->surb[1].urb->transfer_buffer);
+                       kfree(u->surb[1].urb->transfer_buffer);
                        u->surb[1].urb->transfer_buffer = kmalloc(3*SYNCFRAMES, GFP_KERNEL);
                        u->surb[1].urb->transfer_buffer_length = 3*SYNCFRAMES;
                }
@@ -1121,32 +1104,30 @@ static void usbout_stop(struct usb_audiodev *as)
        i = u->flags;
        spin_unlock_irqrestore(&as->lock, flags);
        while (i & (FLG_URB0RUNNING|FLG_URB1RUNNING|FLG_SYNC0RUNNING|FLG_SYNC1RUNNING)) {
-               set_current_state(notkilled ? TASK_INTERRUPTIBLE : TASK_UNINTERRUPTIBLE);
-               schedule_timeout(1);
+               if (notkilled)
+                       schedule_timeout_interruptible(1);
+               else
+                       schedule_timeout_uninterruptible(1);
                spin_lock_irqsave(&as->lock, flags);
                i = u->flags;
                spin_unlock_irqrestore(&as->lock, flags);
                if (notkilled && signal_pending(current)) {
                        if (i & FLG_URB0RUNNING)
-                               usb_unlink_urb(u->durb[0].urb);
+                               usb_kill_urb(u->durb[0].urb);
                        if (i & FLG_URB1RUNNING)
-                               usb_unlink_urb(u->durb[1].urb);
+                               usb_kill_urb(u->durb[1].urb);
                        if (i & FLG_SYNC0RUNNING)
-                               usb_unlink_urb(u->surb[0].urb);
+                               usb_kill_urb(u->surb[0].urb);
                        if (i & FLG_SYNC1RUNNING)
-                               usb_unlink_urb(u->surb[1].urb);
+                               usb_kill_urb(u->surb[1].urb);
                        notkilled = 0;
                }
        }
        set_current_state(TASK_RUNNING);
-       if (u->durb[0].urb->transfer_buffer)
-               kfree(u->durb[0].urb->transfer_buffer);
-       if (u->durb[1].urb->transfer_buffer)
-               kfree(u->durb[1].urb->transfer_buffer);
-       if (u->surb[0].urb->transfer_buffer)
-               kfree(u->surb[0].urb->transfer_buffer);
-       if (u->surb[1].urb->transfer_buffer)
-               kfree(u->surb[1].urb->transfer_buffer);
+       kfree(u->durb[0].urb->transfer_buffer);
+       kfree(u->durb[1].urb->transfer_buffer);
+       kfree(u->surb[0].urb->transfer_buffer);
+       kfree(u->surb[1].urb->transfer_buffer);
        u->durb[0].urb->transfer_buffer = u->durb[1].urb->transfer_buffer = 
                u->surb[0].urb->transfer_buffer = u->surb[1].urb->transfer_buffer = NULL;
 }
@@ -1387,21 +1368,17 @@ static int usbout_start(struct usb_audiodev *as)
                u->phase = 0;
                maxsze = (u->freqmax + 0x3fff) >> (14 - AFMT_BYTESSHIFT(u->format));
                bufsz = DESCFRAMES * maxsze;
-               if (u->durb[0].urb->transfer_buffer)
-                       kfree(u->durb[0].urb->transfer_buffer);
+               kfree(u->durb[0].urb->transfer_buffer);
                u->durb[0].urb->transfer_buffer = kmalloc(bufsz, GFP_KERNEL);
                u->durb[0].urb->transfer_buffer_length = bufsz;
-               if (u->durb[1].urb->transfer_buffer)
-                       kfree(u->durb[1].urb->transfer_buffer);
+               kfree(u->durb[1].urb->transfer_buffer);
                u->durb[1].urb->transfer_buffer = kmalloc(bufsz, GFP_KERNEL);
                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);
+                       kfree(u->surb[0].urb->transfer_buffer);
                        u->surb[0].urb->transfer_buffer = kmalloc(3*SYNCFRAMES, GFP_KERNEL);
                        u->surb[0].urb->transfer_buffer_length = 3*SYNCFRAMES;
-                       if (u->surb[1].urb->transfer_buffer)
-                               kfree(u->surb[1].urb->transfer_buffer);
+                       kfree(u->surb[1].urb->transfer_buffer);
                        u->surb[1].urb->transfer_buffer = kmalloc(3*SYNCFRAMES, GFP_KERNEL);
                        u->surb[1].urb->transfer_buffer_length = 3*SYNCFRAMES;
                }
@@ -1572,7 +1549,7 @@ static int set_format_in(struct usb_audiodev *as)
        if (fmt->attributes & 0x02) {
                data[0] = 1;
                if ((ret = usb_control_msg(dev, usb_sndctrlpipe(dev, 0), SET_CUR, USB_TYPE_CLASS|USB_RECIP_ENDPOINT|USB_DIR_OUT, 
-                                          PITCH_CONTROL << 8, ep, data, 1, HZ)) < 0) {
+                                          PITCH_CONTROL << 8, ep, data, 1, 1000)) < 0) {
                        printk(KERN_ERR "usbaudio: failure (error %d) to set output pitch control device %d interface %u endpoint 0x%x to %u\n",
                               ret, dev->devnum, u->interface, ep, d->srate);
                        return -1;
@@ -1584,13 +1561,13 @@ static int set_format_in(struct usb_audiodev *as)
                data[1] = d->srate >> 8;
                data[2] = d->srate >> 16;
                if ((ret = usb_control_msg(dev, usb_sndctrlpipe(dev, 0), SET_CUR, USB_TYPE_CLASS|USB_RECIP_ENDPOINT|USB_DIR_OUT, 
-                                          SAMPLING_FREQ_CONTROL << 8, ep, data, 3, HZ)) < 0) {
+                                          SAMPLING_FREQ_CONTROL << 8, ep, data, 3, 1000)) < 0) {
                        printk(KERN_ERR "usbaudio: failure (error %d) to set input sampling frequency device %d interface %u endpoint 0x%x to %u\n",
                               ret, dev->devnum, u->interface, ep, d->srate);
                        return -1;
                }
                if ((ret = usb_control_msg(dev, usb_rcvctrlpipe(dev, 0), GET_CUR, USB_TYPE_CLASS|USB_RECIP_ENDPOINT|USB_DIR_IN,
-                                          SAMPLING_FREQ_CONTROL << 8, ep, data, 3, HZ)) < 0) {
+                                          SAMPLING_FREQ_CONTROL << 8, ep, data, 3, 1000)) < 0) {
                        printk(KERN_ERR "usbaudio: failure (error %d) to get input sampling frequency device %d interface %u endpoint 0x%x\n",
                               ret, dev->devnum, u->interface, ep);
                        return -1;
@@ -1668,7 +1645,7 @@ static int set_format_out(struct usb_audiodev *as)
        if (fmt->attributes & 0x02) {
                data[0] = 1;
                if ((ret = usb_control_msg(dev, usb_sndctrlpipe(dev, 0), SET_CUR, USB_TYPE_CLASS|USB_RECIP_ENDPOINT|USB_DIR_OUT, 
-                                          PITCH_CONTROL << 8, ep, data, 1, HZ)) < 0) {
+                                          PITCH_CONTROL << 8, ep, data, 1, 1000)) < 0) {
                        printk(KERN_ERR "usbaudio: failure (error %d) to set output pitch control device %d interface %u endpoint 0x%x to %u\n",
                               ret, dev->devnum, u->interface, ep, d->srate);
                        return -1;
@@ -1680,13 +1657,13 @@ static int set_format_out(struct usb_audiodev *as)
                data[1] = d->srate >> 8;
                data[2] = d->srate >> 16;
                if ((ret = usb_control_msg(dev, usb_sndctrlpipe(dev, 0), SET_CUR, USB_TYPE_CLASS|USB_RECIP_ENDPOINT|USB_DIR_OUT, 
-                                          SAMPLING_FREQ_CONTROL << 8, ep, data, 3, HZ)) < 0) {
+                                          SAMPLING_FREQ_CONTROL << 8, ep, data, 3, 1000)) < 0) {
                        printk(KERN_ERR "usbaudio: failure (error %d) to set output sampling frequency device %d interface %u endpoint 0x%x to %u\n",
                               ret, dev->devnum, u->interface, ep, d->srate);
                        return -1;
                }
                if ((ret = usb_control_msg(dev, usb_rcvctrlpipe(dev, 0), GET_CUR, USB_TYPE_CLASS|USB_RECIP_ENDPOINT|USB_DIR_IN,
-                                          SAMPLING_FREQ_CONTROL << 8, ep, data, 3, HZ)) < 0) {
+                                          SAMPLING_FREQ_CONTROL << 8, ep, data, 3, 1000)) < 0) {
                        printk(KERN_ERR "usbaudio: failure (error %d) to get output sampling frequency device %d interface %u endpoint 0x%x\n",
                               ret, dev->devnum, u->interface, ep);
                        return -1;
@@ -1765,7 +1742,7 @@ static int wrmixer(struct usb_mixerdev *ms, unsigned mixch, unsigned value)
                data[0] = v1;
                data[1] = v1 >> 8;
                if (usb_control_msg(dev, usb_sndctrlpipe(dev, 0), SET_CUR, USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_OUT,
-                                   (ch->chnum << 8) | 1, ms->iface | (ch->unitid << 8), data, 2, HZ) < 0)
+                                   (ch->chnum << 8) | 1, ms->iface | (ch->unitid << 8), data, 2, 1000) < 0)
                        goto err;
                if (!(ch->flags & (MIXFLG_STEREOIN | MIXFLG_STEREOOUT)))
                        return 0;
@@ -1773,7 +1750,7 @@ static int wrmixer(struct usb_mixerdev *ms, unsigned mixch, unsigned value)
                data[1] = v2 >> 8;
                if (usb_control_msg(dev, usb_sndctrlpipe(dev, 0), SET_CUR, USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_OUT,
                                    ((ch->chnum + !!(ch->flags & MIXFLG_STEREOIN)) << 8) | (1 + !!(ch->flags & MIXFLG_STEREOOUT)),
-                                   ms->iface | (ch->unitid << 8), data, 2, HZ) < 0)
+                                   ms->iface | (ch->unitid << 8), data, 2, 1000) < 0)
                        goto err;
                return 0;
 
@@ -1782,14 +1759,14 @@ static int wrmixer(struct usb_mixerdev *ms, unsigned mixch, unsigned value)
                data[0] = v1;
                data[1] = v1 >> 8;
                if (usb_control_msg(dev, usb_sndctrlpipe(dev, 0), SET_CUR, USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_OUT,
-                                   (ch->selector << 8) | ch->chnum, ms->iface | (ch->unitid << 8), data, 2, HZ) < 0)
+                                   (ch->selector << 8) | ch->chnum, ms->iface | (ch->unitid << 8), data, 2, 1000) < 0)
                        goto err;
                if (!(ch->flags & (MIXFLG_STEREOIN | MIXFLG_STEREOOUT)))
                        return 0;
                data[0] = v2;
                data[1] = v2 >> 8;
                if (usb_control_msg(dev, usb_sndctrlpipe(dev, 0), SET_CUR, USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_OUT,
-                                   (ch->selector << 8) | (ch->chnum + 1), ms->iface | (ch->unitid << 8), data, 2, HZ) < 0)
+                                   (ch->selector << 8) | (ch->chnum + 1), ms->iface | (ch->unitid << 8), data, 2, 1000) < 0)
                        goto err;
                return 0;
                 
@@ -1798,13 +1775,13 @@ static int wrmixer(struct usb_mixerdev *ms, unsigned mixch, unsigned value)
        case TREBLE_CONTROL:
                data[0] = v1 >> 8;
                if (usb_control_msg(dev, usb_sndctrlpipe(dev, 0), SET_CUR, USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_OUT,
-                                   (ch->selector << 8) | ch->chnum, ms->iface | (ch->unitid << 8), data, 1, HZ) < 0)
+                                   (ch->selector << 8) | ch->chnum, ms->iface | (ch->unitid << 8), data, 1, 1000) < 0)
                        goto err;
                if (!(ch->flags & (MIXFLG_STEREOIN | MIXFLG_STEREOOUT)))
                        return 0;
                data[0] = v2 >> 8;
                if (usb_control_msg(dev, usb_sndctrlpipe(dev, 0), SET_CUR, USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_OUT,
-                                   (ch->selector << 8) | (ch->chnum + 1), ms->iface | (ch->unitid << 8), data, 1, HZ) < 0)
+                                   (ch->selector << 8) | (ch->chnum + 1), ms->iface | (ch->unitid << 8), data, 1, 1000) < 0)
                        goto err;
                return 0;
 
@@ -1831,7 +1808,7 @@ static int get_rec_src(struct usb_mixerdev *ms)
                if (!ms->ch[i].slctunitid || (mask & (1 << i)))
                        continue;
                if (usb_control_msg(dev, usb_rcvctrlpipe(dev, 0), GET_CUR, USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_IN,
-                                   0, ms->iface | (ms->ch[i].slctunitid << 8), &buf, 1, HZ) < 0) {
+                                   0, ms->iface | (ms->ch[i].slctunitid << 8), &buf, 1, 1000) < 0) {
                        err = -EIO;
                        printk(KERN_ERR "usbaudio: selector read request device %u if %u unit %u failed\n", 
                               dev->devnum, ms->iface, ms->ch[i].slctunitid & 0xff);
@@ -1862,7 +1839,7 @@ static int set_rec_src(struct usb_mixerdev *ms, int srcmask)
                if (!ms->ch[i].slctunitid || (mask & (1 << i)))
                        continue;
                if (usb_control_msg(dev, usb_rcvctrlpipe(dev, 0), GET_CUR, USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_IN,
-                                   0, ms->iface | (ms->ch[i].slctunitid << 8), &buf, 1, HZ) < 0) {
+                                   0, ms->iface | (ms->ch[i].slctunitid << 8), &buf, 1, 1000) < 0) {
                        err = -EIO;
                        printk(KERN_ERR "usbaudio: selector read request device %u if %u unit %u failed\n", 
                               dev->devnum, ms->iface, ms->ch[i].slctunitid & 0xff);
@@ -1891,7 +1868,7 @@ static int set_rec_src(struct usb_mixerdev *ms, int srcmask)
                                continue;
                        buf = ms->ch[j].slctunitid >> 8;
                        if (usb_control_msg(dev, usb_sndctrlpipe(dev, 0), SET_CUR, USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_OUT,
-                                   0, ms->iface | (ms->ch[j].slctunitid << 8), &buf, 1, HZ) < 0) {
+                                   0, ms->iface | (ms->ch[j].slctunitid << 8), &buf, 1, 1000) < 0) {
                                err = -EIO;
                                printk(KERN_ERR "usbaudio: selector write request device %u if %u unit %u failed\n", 
                                       dev->devnum, ms->iface, ms->ch[j].slctunitid & 0xff);
@@ -1963,15 +1940,12 @@ static inline int prog_dmabuf_out(struct usb_audiodev *as)
 static int usb_audio_open_mixdev(struct inode *inode, struct file *file)
 {
        unsigned int minor = iminor(inode);
-       struct list_head *devs, *mdevs;
        struct usb_mixerdev *ms;
        struct usb_audio_state *s;
 
        down(&open_sem);
-       for (devs = audiodevs.next; devs != &audiodevs; devs = devs->next) {
-               s = list_entry(devs, struct usb_audio_state, audiodev);
-               for (mdevs = s->mixerlist.next; mdevs != &s->mixerlist; mdevs = mdevs->next) {
-                       ms = list_entry(mdevs, struct usb_mixerdev, list);
+       list_for_each_entry(s, &audiodevs, audiodev) {
+               list_for_each_entry(ms, &s->mixerlist, list) {
                        if (ms->dev_mixer == minor)
                                goto mixer_found;
                }
@@ -1988,7 +1962,7 @@ static int usb_audio_open_mixdev(struct inode *inode, struct file *file)
        s->count++;
 
        up(&open_sem);
-       return 0;
+       return nonseekable_open(inode, file);
 }
 
 static int usb_audio_release_mixdev(struct inode *inode, struct file *file)
@@ -2161,8 +2135,6 @@ static ssize_t usb_audio_read(struct file *file, char __user *buffer, size_t cou
        unsigned int ptr;
        int cnt, err;
 
-       if (ppos != &file->f_pos)
-               return -ESPIPE;
        if (as->usbin.dma.mapped)
                return -ENXIO;
        if (!as->usbin.dma.ready && (ret = prog_dmabuf_in(as)))
@@ -2230,8 +2202,6 @@ static ssize_t usb_audio_write(struct file *file, const char __user *buffer, siz
        unsigned int start_thr;
        int cnt, err;
 
-       if (ppos != &file->f_pos)
-               return -ESPIPE;
        if (as->usbout.dma.mapped)
                return -ENXIO;
        if (!as->usbout.dma.ready && (ret = prog_dmabuf_out(as)))
@@ -2652,16 +2622,13 @@ static int usb_audio_open(struct inode *inode, struct file *file)
 {
        unsigned int minor = iminor(inode);
        DECLARE_WAITQUEUE(wait, current);
-       struct list_head *devs, *adevs;
        struct usb_audiodev *as;
        struct usb_audio_state *s;
 
        for (;;) {
                down(&open_sem);
-               for (devs = audiodevs.next; devs != &audiodevs; devs = devs->next) {
-                       s = list_entry(devs, struct usb_audio_state, audiodev);
-                       for (adevs = s->audiolist.next; adevs != &s->audiolist; adevs = adevs->next) {
-                               as = list_entry(adevs, struct usb_audiodev, list);
+               list_for_each_entry(s, &audiodevs, audiodev) {
+                       list_for_each_entry(as, &s->audiolist, list) {
                                if (!((as->dev_audio ^ minor) & ~0xf))
                                        goto device_found;
                        }
@@ -2702,7 +2669,7 @@ static int usb_audio_open(struct inode *inode, struct file *file)
        as->open_mode |= file->f_mode & (FMODE_READ | FMODE_WRITE);
        s->count++;
        up(&open_sem);
-       return 0;
+       return nonseekable_open(inode, file);
 }
 
 static int usb_audio_release(struct inode *inode, struct file *file)
@@ -2765,7 +2732,6 @@ static struct usb_device_id usb_audio_ids [] = {
 MODULE_DEVICE_TABLE (usb, usb_audio_ids);
 
 static struct usb_driver usb_audio_driver = {
-       .owner =        THIS_MODULE,
        .name =         "audio",
        .probe =        usb_audio_probe,
        .disconnect =   usb_audio_disconnect,
@@ -2992,7 +2958,8 @@ static void usb_audio_parsestreaming(struct usb_audio_state *s, unsigned char *b
                        }
                        format = (fmt[5] == 2) ? (AFMT_U16_LE | AFMT_U8) : (AFMT_S16_LE | AFMT_S8);
                        /* Dallas DS4201 workaround */
-                       if (dev->descriptor.idVendor == 0x04fa && dev->descriptor.idProduct == 0x4201)
+                       if (le16_to_cpu(dev->descriptor.idVendor) == 0x04fa && 
+                           le16_to_cpu(dev->descriptor.idProduct) == 0x4201)
                                format = (AFMT_S16_LE | AFMT_S8);
                        fmt = find_csinterface_descriptor(buffer, buflen, NULL, FORMAT_TYPE, asifout, i);
                        if (!fmt) {
@@ -3140,28 +3107,34 @@ static void prepmixch(struct consmixstate *state)
 {
        struct usb_device *dev = state->s->usbdev;
        struct mixerchannel *ch;
-       unsigned char buf[2];
+       unsigned char *buf;
        __s16 v1;
        unsigned int v2, v3;
 
        if (!state->nrmixch || state->nrmixch > SOUND_MIXER_NRDEVICES)
                return;
+       buf = kmalloc(sizeof(*buf) * 2, GFP_KERNEL);
+       if (!buf) {
+               printk(KERN_ERR "prepmixch: out of memory\n") ;
+               return;
+       }
+
        ch = &state->mixch[state->nrmixch-1];
        switch (ch->selector) {
        case 0:  /* mixer unit request */
                if (usb_control_msg(dev, usb_rcvctrlpipe(dev, 0), GET_MIN, USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_IN,
-                                   (ch->chnum << 8) | 1, state->ctrlif | (ch->unitid << 8), buf, 2, HZ) < 0)
+                                   (ch->chnum << 8) | 1, state->ctrlif | (ch->unitid << 8), buf, 2, 1000) < 0)
                        goto err;
                ch->minval = buf[0] | (buf[1] << 8);
                if (usb_control_msg(dev, usb_rcvctrlpipe(dev, 0), GET_MAX, USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_IN,
-                                   (ch->chnum << 8) | 1, state->ctrlif | (ch->unitid << 8), buf, 2, HZ) < 0)
+                                   (ch->chnum << 8) | 1, state->ctrlif | (ch->unitid << 8), buf, 2, 1000) < 0)
                        goto err;
                ch->maxval = buf[0] | (buf[1] << 8);
                v2 = ch->maxval - ch->minval;
                if (!v2)
                        v2 = 1;
                if (usb_control_msg(dev, usb_rcvctrlpipe(dev, 0), GET_CUR, USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_IN,
-                                   (ch->chnum << 8) | 1, state->ctrlif | (ch->unitid << 8), buf, 2, HZ) < 0)
+                                   (ch->chnum << 8) | 1, state->ctrlif | (ch->unitid << 8), buf, 2, 1000) < 0)
                        goto err;
                v1 = buf[0] | (buf[1] << 8);
                v3 = v1 - ch->minval;
@@ -3172,7 +3145,7 @@ static void prepmixch(struct consmixstate *state)
                if (ch->flags & (MIXFLG_STEREOIN | MIXFLG_STEREOOUT)) {
                        if (usb_control_msg(dev, usb_rcvctrlpipe(dev, 0), GET_CUR, USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_IN,
                                            ((ch->chnum + !!(ch->flags & MIXFLG_STEREOIN)) << 8) | (1 + !!(ch->flags & MIXFLG_STEREOOUT)),
-                                           state->ctrlif | (ch->unitid << 8), buf, 2, HZ) < 0)
+                                           state->ctrlif | (ch->unitid << 8), buf, 2, 1000) < 0)
                        goto err;
                        v1 = buf[0] | (buf[1] << 8);
                        v3 = v1 - ch->minval;
@@ -3186,15 +3159,15 @@ static void prepmixch(struct consmixstate *state)
                /* various feature unit controls */
        case VOLUME_CONTROL:
                if (usb_control_msg(dev, usb_rcvctrlpipe(dev, 0), GET_MIN, USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_IN,
-                                   (ch->selector << 8) | ch->chnum, state->ctrlif | (ch->unitid << 8), buf, 2, HZ) < 0)
+                                   (ch->selector << 8) | ch->chnum, state->ctrlif | (ch->unitid << 8), buf, 2, 1000) < 0)
                        goto err;
                ch->minval = buf[0] | (buf[1] << 8);
                if (usb_control_msg(dev, usb_rcvctrlpipe(dev, 0), GET_MAX, USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_IN,
-                                   (ch->selector << 8) | ch->chnum, state->ctrlif | (ch->unitid << 8), buf, 2, HZ) < 0)
+                                   (ch->selector << 8) | ch->chnum, state->ctrlif | (ch->unitid << 8), buf, 2, 1000) < 0)
                        goto err;
                ch->maxval = buf[0] | (buf[1] << 8);
                if (usb_control_msg(dev, usb_rcvctrlpipe(dev, 0), GET_CUR, USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_IN,
-                                   (ch->selector << 8) | ch->chnum, state->ctrlif | (ch->unitid << 8), buf, 2, HZ) < 0)
+                                   (ch->selector << 8) | ch->chnum, state->ctrlif | (ch->unitid << 8), buf, 2, 1000) < 0)
                        goto err;
                v1 = buf[0] | (buf[1] << 8);
                v2 = ch->maxval - ch->minval;
@@ -3207,7 +3180,7 @@ static void prepmixch(struct consmixstate *state)
                ch->value = v3;
                if (ch->flags & (MIXFLG_STEREOIN | MIXFLG_STEREOOUT)) {
                        if (usb_control_msg(dev, usb_rcvctrlpipe(dev, 0), GET_CUR, USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_IN,
-                                           (ch->selector << 8) | (ch->chnum + 1), state->ctrlif | (ch->unitid << 8), buf, 2, HZ) < 0)
+                                           (ch->selector << 8) | (ch->chnum + 1), state->ctrlif | (ch->unitid << 8), buf, 2, 1000) < 0)
                                goto err;
                        v1 = buf[0] | (buf[1] << 8);
                        v3 = v1 - ch->minval;
@@ -3222,15 +3195,15 @@ static void prepmixch(struct consmixstate *state)
        case MID_CONTROL:
        case TREBLE_CONTROL:
                if (usb_control_msg(dev, usb_rcvctrlpipe(dev, 0), GET_MIN, USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_IN,
-                                   (ch->selector << 8) | ch->chnum, state->ctrlif | (ch->unitid << 8), buf, 1, HZ) < 0)
+                                   (ch->selector << 8) | ch->chnum, state->ctrlif | (ch->unitid << 8), buf, 1, 1000) < 0)
                        goto err;
                ch->minval = buf[0] << 8;
                if (usb_control_msg(dev, usb_rcvctrlpipe(dev, 0), GET_MAX, USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_IN,
-                                   (ch->selector << 8) | ch->chnum, state->ctrlif | (ch->unitid << 8), buf, 1, HZ) < 0)
+                                   (ch->selector << 8) | ch->chnum, state->ctrlif | (ch->unitid << 8), buf, 1, 1000) < 0)
                        goto err;
                ch->maxval = buf[0] << 8;
                if (usb_control_msg(dev, usb_rcvctrlpipe(dev, 0), GET_CUR, USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_IN,
-                                   (ch->selector << 8) | ch->chnum, state->ctrlif | (ch->unitid << 8), buf, 1, HZ) < 0)
+                                   (ch->selector << 8) | ch->chnum, state->ctrlif | (ch->unitid << 8), buf, 1, 1000) < 0)
                        goto err;
                v1 = buf[0] << 8;
                v2 = ch->maxval - ch->minval;
@@ -3243,7 +3216,7 @@ static void prepmixch(struct consmixstate *state)
                ch->value = v3;
                if (ch->flags & (MIXFLG_STEREOIN | MIXFLG_STEREOOUT)) {
                        if (usb_control_msg(dev, usb_rcvctrlpipe(dev, 0), GET_CUR, USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_IN,
-                                           (ch->selector << 8) | (ch->chnum + 1), state->ctrlif | (ch->unitid << 8), buf, 1, HZ) < 0)
+                                           (ch->selector << 8) | (ch->chnum + 1), state->ctrlif | (ch->unitid << 8), buf, 1, 1000) < 0)
                                goto err;
                        v1 = buf[0] << 8;
                        v3 = v1 - ch->minval;
@@ -3257,13 +3230,16 @@ static void prepmixch(struct consmixstate *state)
        default:
                goto err;
        }
-       return;
 
+ freebuf:
+       kfree(buf);
+       return;
  err:
        printk(KERN_ERR "usbaudio: mixer request device %u if %u unit %u ch %u selector %u failed\n", 
               dev->devnum, state->ctrlif, ch->unitid, ch->chnum, ch->selector);
        if (state->nrmixch)
                state->nrmixch--;
+       goto freebuf;
 }
 
 
@@ -3533,7 +3509,7 @@ static void usb_audio_featureunit(struct consmixstate *state, unsigned char *ftr
                printk(KERN_DEBUG "usbaudio: unmuting feature unit %u interface %u\n", ftr[3], state->ctrlif);
                data[0] = 0;
                if (usb_control_msg(dev, usb_sndctrlpipe(dev, 0), SET_CUR, USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_OUT,
-                                   (MUTE_CONTROL << 8) | 0xff, state->ctrlif | (ftr[3] << 8), data, 1, HZ) < 0)
+                                   (MUTE_CONTROL << 8) | 0xff, state->ctrlif | (ftr[3] << 8), data, 1, 1000) < 0)
                        printk(KERN_WARNING "usbaudio: failure to unmute feature unit %u interface %u\n", ftr[3], state->ctrlif);
        }
 #endif
@@ -3728,7 +3704,7 @@ static struct usb_audio_state *usb_audio_parsecontrol(struct usb_device *dev, un
                if (alt->desc.bNumEndpoints > 0) {
                        /* Check all endpoints; should they all have a bandwidth of 0 ? */
                        for (k = 0; k < alt->desc.bNumEndpoints; k++) {
-                               if (alt->endpoint[k].desc.wMaxPacketSize > 0) {
+                               if (le16_to_cpu(alt->endpoint[k].desc.wMaxPacketSize) > 0) {
                                        printk(KERN_ERR "usbaudio: device %d audiocontrol interface %u endpoint %d does not have 0 bandwidth at alt[0]\n", dev->devnum, ctrlif, k);
                                        break;
                                }
@@ -3812,7 +3788,7 @@ static int usb_audio_probe(struct usb_interface *intf,
         * find which configuration number is active
         */
        buffer = dev->rawdescriptors[dev->actconfig - dev->config];
-       buflen = dev->actconfig->desc.wTotalLength;
+       buflen = le16_to_cpu(dev->actconfig->desc.wTotalLength);
        s = usb_audio_parsecontrol(dev, buffer, buflen, intf->altsetting->desc.bInterfaceNumber);
        if (s) {
                usb_set_intfdata (intf, s);
@@ -3827,7 +3803,6 @@ static int usb_audio_probe(struct usb_interface *intf,
 static void usb_audio_disconnect(struct usb_interface *intf)
 {
        struct usb_audio_state *s = usb_get_intfdata (intf);
-       struct list_head *list;
        struct usb_audiodev *as;
        struct usb_mixerdev *ms;
 
@@ -3849,8 +3824,7 @@ static void usb_audio_disconnect(struct usb_interface *intf)
        usb_set_intfdata (intf, NULL);
 
        /* deregister all audio and mixer devices, so no new processes can open this device */
-       for(list = s->audiolist.next; list != &s->audiolist; list = list->next) {
-               as = list_entry(list, struct usb_audiodev, list);
+       list_for_each_entry(as, &s->audiolist, list) {
                usbin_disc(as);
                usbout_disc(as);
                wake_up(&as->usbin.dma.wait);
@@ -3861,8 +3835,7 @@ static void usb_audio_disconnect(struct usb_interface *intf)
                }
                as->dev_audio = -1;
        }
-       for(list = s->mixerlist.next; list != &s->mixerlist; list = list->next) {
-               ms = list_entry(list, struct usb_mixerdev, list);
+       list_for_each_entry(ms, &s->mixerlist, list) {
                if (ms->dev_mixer >= 0) {
                        unregister_sound_mixer(ms->dev_mixer);
                        printk(KERN_INFO "usbaudio: unregister mixer 14,%d\n", ms->dev_mixer);