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