Update of /cvsroot/alsa/alsa-driver/usb/us428
In directory sc8-pr-cvs1:/tmp/cvs-serv30455/us428

Modified Files:
        usX2Yhwdep.c usbus428.c usbus428.h usbus428audio.c 
Log Message:
fixed the compilation on 2.2 and 2.6 kernels.

us428 driver has bunch of ifdefs, so far.
we'll need to clean up later (maybe after integration with
the core usbaudio.c).



Index: usX2Yhwdep.c
===================================================================
RCS file: /cvsroot/alsa/alsa-driver/usb/us428/usX2Yhwdep.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- usX2Yhwdep.c        8 Sep 2003 10:57:41 -0000       1.1
+++ usX2Yhwdep.c        24 Sep 2003 16:45:10 -0000      1.2
@@ -1,3 +1,4 @@
+#define __NO_VERSION__
 /*
  * Driver for Tascam US-X2Y USB soundcards
  *
@@ -19,6 +20,7 @@
  *   along with this program; if not, write to the Free Software
  *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
  */
+#define SND_NEED_USB_WRAPPER
 #include <sound/driver.h>
 #include <sound/core.h>
 #include "usx2y.h"
@@ -26,8 +28,6 @@
 #include "usbus428.h"
 #include "usX2Yhwdep.h"
 
-extern void snd_us428_In04Int(urb_t* urb);
-
 
 static void us428ctls_vm_open(struct vm_area_struct *area)
 {
@@ -37,7 +37,11 @@
 {
 }
 
+#ifndef LINUX_2_2
 static struct page * us428ctls_vm_nopage(struct vm_area_struct *area, unsigned long 
address, int no_share)
+#else
+static unsigned long us428ctls_vm_nopage(struct vm_area_struct *area, unsigned long 
address, int no_share)
+#endif
 {
        unsigned long offset;
        struct page * page;
@@ -50,14 +54,26 @@
                   address,
                   no_share);
        
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 3, 25)
        offset = area->vm_pgoff << PAGE_SHIFT;
+#else
+       offset = area->vm_offset;
+#endif
        offset += address - area->vm_start;
        snd_assert((offset % PAGE_SIZE) == 0, return NOPAGE_OOM);
        vaddr = (char*)((us428dev_t*)area->vm_private_data)->us428ctls_sharedmem + 
offset;
        page = virt_to_page(vaddr);
        get_page(page);
-       snd_printd( "vaddr=%X made us428ctls_vm_nopage() return %X; offset=%X\n", 
(unsigned)vaddr, (unsigned)page, offset);
+       snd_printd( "vaddr=%p made us428ctls_vm_nopage() return %p; offset=%X\n", 
vaddr, page, offset);
+#ifndef LINUX_2_2
        return page;
+#else
+       /* why 2.2's kcomp.h redefines this? */
+#ifdef page_address
+#undef page_address
+#endif
+       return page_address(page);
+#endif
 }
 
 static struct vm_operations_struct us428ctls_vm_ops = {
@@ -89,8 +105,14 @@
                memset(us428->us428ctls_sharedmem, -1, sizeof(us428ctls_sharedmem_t));
        }
        area->vm_ops = &us428ctls_vm_ops;
+#ifdef VM_RESERVED
        area->vm_flags |= VM_RESERVED;
+#endif
+#ifndef LINUX_2_2
        area->vm_private_data = hw->private_data;
+#else
+       area->vm_private_data = (long)hw->private_data;
+#endif
        return 0;
 }
 
@@ -156,7 +178,7 @@
                err = -ENOMEM;
        }else
                for (i = 0; i < URBS_AsyncSeq; ++i){
-                       if (NULL == (us428->AS04.urb[i] = usb_alloc_urb(0))){
+                       if (NULL == (us428->AS04.urb[i] = usb_alloc_urb(0, 
GFP_KERNEL))){
                                err = -ENOMEM;
                                break;
                        }
@@ -183,11 +205,15 @@
                        .type = QUIRK_MIDI_FIXED_ENDPOINT,
                .data = &quirk_data
        };
+       struct usb_interface *iface;
 
        snd_printd("snd_us428_create_usbmidi \n");
 
-       return snd_usb_create_midi_interface(&us428(card)->chip, 
us428(card)->chip.dev->actconfig->interface , &quirk);
+       iface = get_iface(us428(card)->chip.dev->actconfig, 0);
+
+       return snd_usb_create_midi_interface(&us428(card)->chip, iface, &quirk);
 }
+
 static int snd_us428_create_alsa_devices(snd_card_t* card)
 {
        int err;
@@ -209,7 +235,7 @@
 static int snd_us428_In04_init(us428dev_t* us428)
 {
        int     err = 0;
-       if (! (us428->In04urb = usb_alloc_urb(0)))
+       if (! (us428->In04urb = usb_alloc_urb(0, GFP_KERNEL)))
                return -ENOMEM;
 
        if (! (us428->In04Buf = kmalloc(21, GFP_KERNEL))){
@@ -218,12 +244,14 @@
        }
         
        init_waitqueue_head(&us428->In04WaitQueue);
-       usb_fill_int_urb(       us428->In04urb, us428->chip.dev, 
usb_rcvintpipe(us428->chip.dev, 0x4),
-                               us428->In04Buf, 21,
-                               snd_us428_In04Int, us428,
-                               10);
+       usb_fill_int_urb(us428->In04urb, us428->chip.dev, 
usb_rcvintpipe(us428->chip.dev, 0x4),
+                        us428->In04Buf, 21,
+                        snd_us428_In04Int, us428,
+                        10);
+#ifdef OLD_USB
        us428->In04urb->transfer_flags = USB_QUEUE_BULK;
-       err = usb_submit_urb(us428->In04urb);
+#endif
+       err = usb_submit_urb(us428->In04urb, GFP_KERNEL);
        return err;
 }
 

Index: usbus428.c
===================================================================
RCS file: /cvsroot/alsa/alsa-driver/usb/us428/usbus428.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- usbus428.c  12 Sep 2003 15:29:54 -0000      1.2
+++ usbus428.c  24 Sep 2003 16:45:10 -0000      1.3
@@ -59,9 +59,10 @@
  *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
 */
 
+#define SND_NEED_USB_WRAPPER
+
 #include <sound/driver.h>
 #include <sound/core.h>
-#include <sound/seq_device.h>
 #define SNDRV_GET_ID
 #include <sound/initval.h>
 #include <sound/pcm.h>
@@ -103,7 +104,11 @@
 /* 
  * pipe 4 is used for switching the lamps, setting samplerate, volumes ....   
  */
+#ifndef OLD_USB
+void snd_us428_Out04Int(urb_t* urb, struct pt_regs *regs)
+#else
 void snd_us428_Out04Int(urb_t* urb)
+#endif
 {
        if (urb->status) {
                int             i;
@@ -112,11 +117,14 @@
                snd_printd("snd_us428_Out04Int() us428->Seq04=%i urb %i status=%i\n", 
us428->Seq04, i, urb->status);
        }
 }
-#else
-#define snd_us428_Out04Int 0
 #endif
 
-void snd_us428_In04Int(urb_t* urb){
+#ifndef OLD_USB
+void snd_us428_In04Int(urb_t* urb, struct pt_regs *regs)
+#else
+void snd_us428_In04Int(urb_t* urb)
+#endif
+{
        int                     err = 0;
        us428dev_t              *us428 = urb->context;
        us428ctls_sharedmem_t   *us428ctls = us428->us428ctls_sharedmem;
@@ -153,7 +161,7 @@
        if (us428->US04) {
                if (0 == us428->US04->submitted)
                        do
-                               err = 
usb_submit_urb(us428->US04->urb[us428->US04->submitted++]);
+                               err = 
usb_submit_urb(us428->US04->urb[us428->US04->submitted++], GFP_KERNEL);
                        while (!err && us428->US04->submitted < us428->US04->len);
        } else
                if (us428ctls && us428ctls->p4outLast >= 0 && us428ctls->p4outLast < 
N_us428_p4out_BUFS) {
@@ -171,8 +179,10 @@
                                                                  
usb_sndbulkpipe(us428->chip.dev, 0x04), &p4out->vol, 
                                                                  p4out->type == 
eLT_Light ? sizeof(us428_lights_t) : sizeof(usX2Y_volume_t),
                                                                  snd_us428_Out04Int, 
us428);
+#ifdef OLD_USB
                                                us428->AS04.urb[j]->transfer_flags = 
USB_QUEUE_BULK;
-                                               usb_submit_urb(us428->AS04.urb[j]);
+#endif
+                                               usb_submit_urb(us428->AS04.urb[j], 
GFP_KERNEL);
                                                us428ctls->p4outSent = send;
                                                break;
                                        }
@@ -210,44 +220,43 @@
 
 static snd_card_t* snd_us428_create_card(struct usb_device* device)
 {
-       int             err = 0, dev;
-       snd_card_t*     card = NULL;
-       do {
-               for (dev = 0; dev < SNDRV_CARDS; ++dev)
-                       if (enable[dev] && !snd_us428_card_used[dev])
-                               break;
-
-               if (dev >= SNDRV_CARDS) {
-                       err = -ENOENT;
-                       break;
-               }
-               card = snd_card_new(index[dev], id[dev], THIS_MODULE, 
sizeof(us428dev_t));
-               if (!card) {
-                       err = -ENOMEM;
-                       break;
-               }
-               snd_us428_card_used[us428(card)->chip.index = dev] = 1;
-               card->private_free = snd_us428_card_private_free;
-               us428(card)->chip.dev = device;
-               us428(card)->chip.card = card;
-               init_MUTEX (&us428(card)->open_mutex);
-               INIT_LIST_HEAD(&us428(card)->chip.midi_list);
-               us428(card)->Seq04Complete = 1;
-               us428(card)->stride = 4;                // 16 Bit 
-               strcpy(card->driver, "USB "NAME_ALLCAPS"");
-               sprintf(card->shortname, "TASCAM "NAME_ALLCAPS"");
-               sprintf(card->longname, "%s (%x:%x if %d at %03d/%03d)",
-                       card->shortname, 
-                       snd_us428_usb_id_table[0].idVendor, 
snd_us428_usb_id_table[0].idProduct,
-                       0,//us428(card)->usbmidi.ifnum,
-                       us428(card)->chip.dev->bus->busnum, 
us428(card)->chip.dev->devnum
-                       );
-       } while (0);
+       int             dev;
+       snd_card_t*     card;
+
+       for (dev = 0; dev < SNDRV_CARDS; ++dev)
+               if (enable[dev] && !snd_us428_card_used[dev])
+                       return NULL;
+
+       if (dev >= SNDRV_CARDS)
+               return NULL;
+
+       card = snd_card_new(index[dev], id[dev], THIS_MODULE, sizeof(us428dev_t));
+       if (!card)
+               return NULL;
+
+       snd_us428_card_used[us428(card)->chip.index = dev] = 1;
+       card->private_free = snd_us428_card_private_free;
+       us428(card)->chip.dev = device;
+       us428(card)->chip.card = card;
+       init_MUTEX (&us428(card)->open_mutex);
+       INIT_LIST_HEAD(&us428(card)->chip.midi_list);
+       us428(card)->Seq04Complete = 1;
+       us428(card)->stride = 4;                // 16 Bit 
+       strcpy(card->driver, "USB "NAME_ALLCAPS"");
+       sprintf(card->shortname, "TASCAM "NAME_ALLCAPS"");
+       sprintf(card->longname, "%s (%x:%x if %d at %03d/%03d)",
+               card->shortname, 
+               snd_us428_usb_id_table[0].idVendor, 
snd_us428_usb_id_table[0].idProduct,
+               0,//us428(card)->usbmidi.ifnum,
+               us428(card)->chip.dev->bus->busnum, us428(card)->chip.dev->devnum
+               );
        return card;
 }
 
 
-static void* snd_us428_probe(struct usb_device* device, unsigned int ifnum, const 
struct usb_device_id* device_id)
+static void* snd_us428_usb_probe(struct usb_device* device,
+                                struct usb_interface *intf,
+                                const struct usb_device_id* device_id)
 {
        int             err;
        snd_card_t*     card;
@@ -270,19 +279,59 @@
        return card;
 }
 
+#ifndef OLD_USB
+/*
+ * new 2.5 USB kernel API
+ */
+static int snd_us428_probe(struct usb_interface *intf,
+                          const struct usb_device_id *id)
+{
+       void *chip;
+       chip = snd_us428_usb_probe(interface_to_usbdev(intf), intf, id);
+       if (chip) {
+               dev_set_drvdata(&intf->dev, chip);
+               return 0;
+       } else
+               return -EIO;
+}
+
+static void snd_us428_disconnect(struct usb_interface *intf)
+{
+       snd_us428_usb_disconnect(interface_to_usbdev(intf),
+                                dev_get_drvdata(&intf->dev));
+}
+#else
+/*
+ * 2.4 USB kernel API
+ */
+static void *snd_us428_probe(struct usb_device *dev, unsigned int ifnum,
+                            const struct usb_device_id *id)
+{
+       return snd_us428_usb_probe(dev, usb_ifnum_to_if(dev, ifnum), id);
+}
+                                       
+static void snd_us428_disconnect(struct usb_device *dev, void *ptr)
+{
+       snd_us428_usb_disconnect(dev, ptr);
+}
+#endif
 
 MODULE_DEVICE_TABLE(usb, snd_us428_usb_id_table);
 static struct usb_driver snd_us428_usb_driver = {
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 5, 70)     /* FIXME: find right number */
+       .owner =        THIS_MODULE,
+#endif
        .name =         "snd-usb-us428",
        .probe =        snd_us428_probe,
-       .disconnect =   snd_us428_usb_disconnect,
+       .disconnect =   snd_us428_disconnect,
        .id_table =     snd_us428_usb_id_table,
-       .driver_list =  LIST_HEAD_INIT(snd_us428_usb_driver.driver_list),
+#ifdef OLD_USB
+       .driver_list =  LIST_HEAD_INIT(snd_us428_usb_driver.driver_list), 
+#endif
 };
 
 static void snd_us428_card_private_free(snd_card_t *card)
 {
-       snd_printd("\n");
        if (us428(card)->In04Buf)
                kfree(us428(card)->In04Buf);
        usb_free_urb(us428(card)->In04urb);

Index: usbus428.h
===================================================================
RCS file: /cvsroot/alsa/alsa-driver/usb/us428/usbus428.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- usbus428.h  8 Sep 2003 10:57:41 -0000       1.1
+++ usbus428.h  24 Sep 2003 16:45:10 -0000      1.2
@@ -7,8 +7,10 @@
 #define NRURBS         2       /* */
 #define NRPACKS                1       /* usb-frames/ms per urb */
 
+#ifndef LINUX_2_2
 typedef struct urb urb_t;
 typedef struct urb* purb_t;
+#endif
 
 #define URBS_AsyncSeq 10
 #define URB_DataLen_AsyncSeq 32
@@ -52,9 +54,15 @@
 
 int snd_us428_audio_create(snd_card_t* card);
 
-#ifdef CONFIG_SND_DEBUG
-void snd_us428_Out04Int(urb_t* urb);
+#ifndef OLD_USB
+void snd_us428_Out04Int(urb_t* urb, struct pt_regs *regs);
+void snd_us428_In04Int(urb_t* urb, struct pt_regs *regs);
 #else
+void snd_us428_Out04Int(urb_t* urb);
+void snd_us428_In04Int(urb_t* urb);
+#endif
+
+#ifndef CONFIG_SND_DEBUG
 #define snd_us428_Out04Int 0
 #endif
 

Index: usbus428audio.c
===================================================================
RCS file: /cvsroot/alsa/alsa-driver/usb/us428/usbus428audio.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- usbus428audio.c     8 Sep 2003 10:57:41 -0000       1.1
+++ usbus428audio.c     24 Sep 2003 16:45:10 -0000      1.2
@@ -1,3 +1,4 @@
+#define __NO_VERSION__
 /*
  *   US-428 AUDIO
 
@@ -35,6 +36,14 @@
 #define SND_NEED_USB_WRAPPER
 #include <sound/driver.h>
 #include <linux/usb.h>
+
+/* wrappers */
+#ifdef OLD_USB
+#define snd_usb_complete_callback(x) __old_ ## x
+static void __old_snd_us428_urb_play_complete(struct urb *urb);
+static void __old_snd_us428_urb_capt_complete(struct urb *urb);
+#endif
+
 #include <sound/core.h>
 #include <sound/info.h>
 #include <sound/pcm.h>
@@ -148,89 +157,87 @@
        int             i, len, lens = 0, hwptr_done = subs->hwptr_done;
        us428dev_t*     us428 = subs->stream->us428;
 
-       do{
-               for (i = 0; i < NRPACKS; i++){
-                       cp = (unsigned char *)urb->transfer_buffer + 
urb->iso_frame_desc[i].offset;
-                       if (urb->iso_frame_desc[i].status){ /* active? hmm, skip this 
*/
-                               snd_printd("activ frame status %i\n", 
urb->iso_frame_desc[i].status);
-                               return urb->iso_frame_desc[i].status;
-                       }
-                       len = urb->iso_frame_desc[i].actual_length / us428->stride;
-                       //printk("%03i ",  urb->iso_frame_desc[i].actual_length);
-                       {
-                               unsigned long x = subs->freqm;
-                               x *= (1 << 11) - 1;
-                               x += (len << 14) + subs->remainder;
-                               subs->remainder = x % (1 << 11);
-                               x /= (1 << 11);
-                               subs->freqm = x ;
-                       }
+       for (i = 0; i < NRPACKS; i++){
+               cp = (unsigned char *)urb->transfer_buffer + 
urb->iso_frame_desc[i].offset;
+               if (urb->iso_frame_desc[i].status){ /* active? hmm, skip this */
+                       snd_printd("activ frame status %i\n", 
urb->iso_frame_desc[i].status);
+                       return urb->iso_frame_desc[i].status;
+               }
+               len = urb->iso_frame_desc[i].actual_length / us428->stride;
+               //printk("%03i ",  urb->iso_frame_desc[i].actual_length);
+               {
+                       unsigned long x = subs->freqm;
+                       x *= (1 << 11) - 1;
+                       x += (len << 14) + subs->remainder;
+                       subs->remainder = x % (1 << 11);
+                       x /= (1 << 11);
+                       subs->freqm = x ;
+               }
 
-                       if (! len){
-                               snd_printk("0 == len ERROR!\n");
-                               continue;
-                       }
+               if (! len){
+                       snd_printk("0 == len ERROR!\n");
+                       continue;
+               }
 
-                       /* update the current pointer */
-                       if (urb->pipe == subs->datapipe[0]){
-                               int j = subs->start_frame == urb->start_frame ? 1 : 
0;//FIXME ???
-
-                               us428->pipe0Aframes[j][i] = len;
-                               if (j){
-                                       us428->play_urb_waiting[1] = 
us428->play_urb_waiting[0];
-                                       us428->play_urb_waiting[0] = NULL;
-                                       snd_printd("%i\n", i);
-                               }
-                               subs->retired_frame[0] = urb->start_frame;
-                       }else{
-                               subs->retired_frame[1] = urb->start_frame;
-                               if (runtime->channels != 4)
-                                       break;
+               /* update the current pointer */
+               if (urb->pipe == subs->datapipe[0]){
+                       int j = subs->start_frame == urb->start_frame ? 1 : 0;//FIXME 
???
+
+                       us428->pipe0Aframes[j][i] = len;
+                       if (j){
+                               us428->play_urb_waiting[1] = 
us428->play_urb_waiting[0];
+                               us428->play_urb_waiting[0] = NULL;
+                               snd_printd("%i\n", i);
                        }
+                       subs->retired_frame[0] = urb->start_frame;
+               }else{
+                       subs->retired_frame[1] = urb->start_frame;
+                       if (runtime->channels != 4)
+                               break;
+               }
 
-                       if (! subs->running)
-                               continue;
+               if (! subs->running)
+                       continue;
                
-                       /* copy a data chunk */
-                       if ((hwptr_done + len) > runtime->buffer_size) {
-                               int cnt = runtime->buffer_size - hwptr_done;
-                               if (runtime->channels != 4){
-                                       int blen = cnt * us428->stride;
-                                       memcpy(runtime->dma_area + hwptr_done * 
us428->stride, cp, blen);
-                                       memcpy(runtime->dma_area, cp + blen, len * 
us428->stride - blen);
-                               }else{
-                                       int* p_dma_area = (int*)runtime->dma_area + 
(urb->pipe == subs->datapipe[0] ? 0 : 1);
-                                       framecpy_4c(p_dma_area + hwptr_done * 2, 
(int*)cp, cnt);
-                                       framecpy_4c(p_dma_area, (int*)cp + cnt, len - 
cnt);
-                               }
-                       } else {
-                               if (runtime->channels != 4){
-                                       memcpy(runtime->dma_area + hwptr_done * 
us428->stride, cp, len * us428->stride);
-                               }else{
-                                       int* p_dma_area = (int*)runtime->dma_area + 
(urb->pipe == subs->datapipe[0] ? 0 : 1);
-                                       framecpy_4c(p_dma_area + hwptr_done * 2, 
(int*)cp, len);
-                               }
+               /* copy a data chunk */
+               if ((hwptr_done + len) > runtime->buffer_size) {
+                       int cnt = runtime->buffer_size - hwptr_done;
+                       if (runtime->channels != 4){
+                               int blen = cnt * us428->stride;
+                               memcpy(runtime->dma_area + hwptr_done * us428->stride, 
cp, blen);
+                               memcpy(runtime->dma_area, cp + blen, len * 
us428->stride - blen);
+                       }else{
+                               int* p_dma_area = (int*)runtime->dma_area + (urb->pipe 
== subs->datapipe[0] ? 0 : 1);
+                               framecpy_4c(p_dma_area + hwptr_done * 2, (int*)cp, 
cnt);
+                               framecpy_4c(p_dma_area, (int*)cp + cnt, len - cnt);
+                       }
+               } else {
+                       if (runtime->channels != 4){
+                               memcpy(runtime->dma_area + hwptr_done * us428->stride, 
cp, len * us428->stride);
+                       }else{
+                               int* p_dma_area = (int*)runtime->dma_area + (urb->pipe 
== subs->datapipe[0] ? 0 : 1);
+                               framecpy_4c(p_dma_area + hwptr_done * 2, (int*)cp, 
len);
                        }
-                       lens += len;
-                       if ((hwptr_done += len) >= runtime->buffer_size)
-                               hwptr_done -= runtime->buffer_size;
                }
-               if ((runtime->channels == 4 
-                    && subs->retired_frame[0] != subs->retired_frame[1])
-                   || ! subs->running)
-                       break;
+               lens += len;
+               if ((hwptr_done += len) >= runtime->buffer_size)
+                       hwptr_done -= runtime->buffer_size;
+       }
+       if ((runtime->channels == 4 
+            && subs->retired_frame[0] != subs->retired_frame[1])
+           || ! subs->running)
+               return 0;
 
-               spin_lock_irqsave(&subs->lock, flags);
-               subs->hwptr_done = hwptr_done;
-               subs->transfer_done += lens;
-               /* update the pointer, call callback if necessary */
-               if (subs->transfer_done >= runtime->period_size) {
-                       subs->transfer_done -= runtime->period_size;
-                       spin_unlock_irqrestore(&subs->lock, flags);
-                       snd_pcm_period_elapsed(subs->pcm_substream);
-               } else
-                       spin_unlock_irqrestore(&subs->lock, flags);
-       } while (0);
+       spin_lock_irqsave(&subs->lock, flags);
+       subs->hwptr_done = hwptr_done;
+       subs->transfer_done += lens;
+       /* update the pointer, call callback if necessary */
+       if (subs->transfer_done >= runtime->period_size) {
+               subs->transfer_done -= runtime->period_size;
+               spin_unlock_irqrestore(&subs->lock, flags);
+               snd_pcm_period_elapsed(subs->pcm_substream);
+       } else
+               spin_unlock_irqrestore(&subs->lock, flags);
 
        return 0;
 }
@@ -366,7 +373,7 @@
        }
 }
 
-static void snd_us428_urb_play_complete(purb_t urb)
+static void snd_us428_urb_play_complete(purb_t urb, struct pt_regs *regs)
 {
        snd_us428_substream_t *subs = (snd_us428_substream_t*)urb->context;
        if (! subs->stream->us428->pipe0Aframes[0][0]){
@@ -380,7 +387,7 @@
 /*
  * complete callback from data urb
  */
-static void snd_us428_urb_capt_complete(purb_t urb)
+static void snd_us428_urb_capt_complete(purb_t urb, struct pt_regs *regs)
 {
        snd_us428_substream_t *captsubs = (snd_us428_substream_t*)urb->context;
        snd_pcm_substream_t *pcm_captsubs = captsubs->pcm_substream;
@@ -459,8 +466,8 @@
 
        for (ep = 0; ep < subs->endpoints; ep++)
                for (i = 0; i < NRURBS; i++) {
-                       if (    subs->dataurb[ep][i]
-                               &&      USB_ST_URB_PENDING == 
subs->dataurb[ep][i]->status){
+                       if (subs->dataurb[ep][i] &&
+                           subs->dataurb[ep][i]->status == -EINPROGRESS){
                                alive++;
                        }
                }
@@ -476,7 +483,7 @@
                subs->retired_frame[ep] = -1;
                for (i = 0; i < NRURBS; i++) {
                        if (0 == ep)
-                               subs->dataurb[0][i]->transfer_flags = USB_ISO_ASAP;
+                               subs->dataurb[0][i]->transfer_flags = URB_ISO_ASAP;
                        else{
                                subs->dataurb[ep][i]->transfer_flags = 0;
                                subs->dataurb[ep][i]->start_frame = 
subs->dataurb[0][i]->start_frame;
@@ -751,10 +758,12 @@
                        }
                        (*purb)->dev = subs->stream->us428->chip.dev;
                        (*purb)->pipe = subs->datapipe[ep];
-                       (*purb)->transfer_flags = USB_ISO_ASAP | USB_ASYNC_UNLINK;
+                       (*purb)->transfer_flags = URB_ISO_ASAP | URB_ASYNC_UNLINK;
                        (*purb)->number_of_packets = NRPACKS;
                        (*purb)->context = subs;
-                       (*purb)->complete = is_playback ? snd_us428_urb_play_complete 
: snd_us428_urb_capt_complete ;
+                       (*purb)->complete = is_playback ?
+                               snd_usb_complete_callback(snd_us428_urb_play_complete) 
:
+                               snd_usb_complete_callback(snd_us428_urb_capt_complete);
                }
 
        return 0;
@@ -783,7 +792,11 @@
        return 0;
 }
 
+#ifndef OLD_USB
+static void snd_us428_04Int(urb_t* urb, struct pt_regs *regs)
+#else
 static void snd_us428_04Int(urb_t* urb)
+#endif
 {
        us428dev_t*     us428 = urb->context;
        
@@ -908,9 +921,11 @@
                                }
                                ((char*)(usbdata + i))[0] = ra[i].c1;
                                ((char*)(usbdata + i))[1] = ra[i].c2;
-                               usb_fill_bulk_urb(      us->urb[i], 
us428_stream->us428->chip.dev, usb_sndbulkpipe(us428_stream->us428->chip.dev, 4),
-                                                       usbdata + i, 2, 
snd_us428_04Int, us428_stream->us428);
+                               usb_fill_bulk_urb(us->urb[i], 
us428_stream->us428->chip.dev, usb_sndbulkpipe(us428_stream->us428->chip.dev, 4),
+                                                 usbdata + i, 2, snd_us428_04Int, 
us428_stream->us428);
+#ifdef OLD_USB
                                us->urb[i]->transfer_flags = USB_QUEUE_BULK;
+#endif
                        }
                        if (err)
                                break;
@@ -1130,11 +1145,9 @@
 static void snd_us428_substream_init(snd_us428_stream_t *stream, enum 
sndrv_pcm_stream  dir)
 {
        struct usb_device *dev;
-       struct usb_config_descriptor *config;
        snd_us428_substream_t *subs = stream->substream + dir;
 
        dev = stream->us428->chip.dev;
-       config = dev->actconfig;
 
        if (SNDRV_PCM_STREAM_PLAYBACK == dir){
                subs->endpoint[0] = 0x0A;
@@ -1262,7 +1275,17 @@
 }
 
 
+/*
+ * compatible layers
+ */
+#ifdef OLD_USB
+static void __old_snd_us428_urb_play_complete(struct urb *urb)
+{
+       snd_us428_urb_play_complete(urb, NULL);
+}
 
-
-
-
+static void __old_snd_us428_urb_capt_complete(struct urb *urb)
+{
+       snd_us428_urb_capt_complete(urb, NULL);
+}
+#endif



-------------------------------------------------------
This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
http://thinkgeek.com/sf
_______________________________________________
Alsa-cvslog mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/alsa-cvslog

Reply via email to