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