patch-2.3.43 linux/drivers/usb/audio.c
Next file: linux/drivers/usb/cpia.c
Previous file: linux/drivers/usb/acm.c
Back to the patch index
Back to the overall index
- Lines: 164
- Date:
Wed Feb 9 11:42:35 2000
- Orig file:
v2.3.42/linux/drivers/usb/audio.c
- Orig date:
Fri Jan 28 15:09:08 2000
diff -u --recursive --new-file v2.3.42/linux/drivers/usb/audio.c linux/drivers/usb/audio.c
@@ -258,7 +258,6 @@
struct usb_audiodev {
struct list_head list;
struct usb_audio_state *state;
- int remove_pending;
/* soundcore stuff */
int dev_audio;
@@ -838,8 +837,6 @@
#if 0
printk(KERN_DEBUG "usbin_completed: status %d errcnt %d flags 0x%x\n", urb->status, urb->error_count, u->flags);
#endif
- if (as->remove_pending)
- return;
if (urb == &u->durb[0].urb)
mask = FLG_URB0RUNNING;
else if (urb == &u->durb[1].urb)
@@ -904,9 +901,6 @@
#if 0
printk(KERN_DEBUG "usbin_sync_completed: status %d errcnt %d flags 0x%x\n", urb->status, urb->error_count, u->flags);
#endif
- if (as->remove_pending)
- return;
-
if (urb == &u->surb[0].urb)
mask = FLG_SYNC0RUNNING;
else if (urb == &u->surb[1].urb)
@@ -1266,8 +1260,6 @@
#if 0
printk(KERN_DEBUG "usbout_sync_completed: status %d errcnt %d flags 0x%x\n", urb->status, urb->error_count, u->flags);
#endif
- if (as->remove_pending)
- return;
if (urb == &u->surb[0].urb)
mask = FLG_SYNC0RUNNING;
else if (urb == &u->surb[1].urb)
@@ -1462,6 +1454,7 @@
d->srate = fmt->sratelo;
if (d->srate > fmt->sratehi)
d->srate = fmt->sratehi;
+printk(KERN_DEBUG "usb_audio: set_format_in: usb_set_interface %u %u\n", alts->bInterfaceNumber, fmt->altsetting);
if (usb_set_interface(dev, alts->bInterfaceNumber, fmt->altsetting) < 0) {
printk(KERN_WARNING "usbaudio: usb_set_interface failed, device %d interface %d altsetting %d\n",
dev->devnum, u->interface, fmt->altsetting);
@@ -1527,13 +1520,13 @@
u->datapipe = usb_sndisocpipe(dev, alts->endpoint[0].bEndpointAddress & 0xf);
u->syncpipe = u->syncinterval = 0;
if ((alts->endpoint[0].bmAttributes & 0x0c) == 0x04) {
-
+#if 0
printk(KERN_DEBUG "bNumEndpoints 0x%02x endpoint[1].bmAttributes 0x%02x\n"
KERN_DEBUG "endpoint[1].bSynchAddress 0x%02x endpoint[1].bEndpointAddress 0x%02x\n"
KERN_DEBUG "endpoint[0].bSynchAddress 0x%02x\n", alts->bNumEndpoints,
alts->endpoint[1].bmAttributes, alts->endpoint[1].bSynchAddress,
alts->endpoint[1].bEndpointAddress, alts->endpoint[0].bSynchAddress);
-
+#endif
if (alts->bNumEndpoints < 2 ||
alts->endpoint[1].bmAttributes != 0x01 ||
alts->endpoint[1].bSynchAddress != 0 ||
@@ -1545,14 +1538,11 @@
u->syncpipe = usb_rcvisocpipe(dev, alts->endpoint[1].bEndpointAddress & 0xf);
u->syncinterval = alts->endpoint[1].bRefresh;
}
-
- printk(KERN_DEBUG "datapipe 0x%x syncpipe 0x%x\n", u->datapipe, u->syncpipe);
-
-
if (d->srate < fmt->sratelo)
d->srate = fmt->sratelo;
if (d->srate > fmt->sratehi)
d->srate = fmt->sratehi;
+printk(KERN_DEBUG "usb_audio: set_format_out: usb_set_interface %u %u\n", alts->bInterfaceNumber, fmt->altsetting);
if (usb_set_interface(dev, u->interface, fmt->altsetting) < 0) {
printk(KERN_WARNING "usbaudio: usb_set_interface failed, device %d interface %d altsetting %d\n",
dev->devnum, u->interface, fmt->altsetting);
@@ -1904,19 +1894,10 @@
}
static /*const*/ struct file_operations usb_mixer_fops = {
- &usb_audio_llseek,
- NULL, /* read */
- NULL, /* write */
- NULL, /* readdir */
- NULL, /* poll */
- &usb_audio_ioctl_mixdev,
- NULL, /* mmap */
- &usb_audio_open_mixdev,
- NULL, /* flush */
- &usb_audio_release_mixdev,
- NULL, /* fsync */
- NULL, /* fasync */
- NULL, /* lock */
+ llseek: usb_audio_llseek,
+ ioctl: usb_audio_ioctl_mixdev,
+ open: usb_audio_open_mixdev,
+ release: usb_audio_release_mixdev,
};
/* --------------------------------------------------------------------- */
@@ -2473,7 +2454,6 @@
file->private_data = as;
as->open_mode |= file->f_mode & (FMODE_READ | FMODE_WRITE);
s->count++;
- as->remove_pending=0;
MOD_INC_USE_COUNT;
up(&open_sem);
return 0;
@@ -2515,19 +2495,14 @@
}
static /*const*/ struct file_operations usb_audio_fops = {
- &usb_audio_llseek,
- &usb_audio_read,
- &usb_audio_write,
- NULL, /* readdir */
- &usb_audio_poll,
- &usb_audio_ioctl,
- &usb_audio_mmap,
- &usb_audio_open,
- NULL, /* flush */
- &usb_audio_release,
- NULL, /* fsync */
- NULL, /* fasync */
- NULL, /* lock */
+ llseek: usb_audio_llseek,
+ read: usb_audio_read,
+ write: usb_audio_write,
+ poll: usb_audio_poll,
+ ioctl: usb_audio_ioctl,
+ mmap: usb_audio_mmap,
+ open: usb_audio_open,
+ release: usb_audio_release,
};
/* --------------------------------------------------------------------- */
@@ -3143,14 +3118,20 @@
}
if (state->nrchannels > 2)
printk(KERN_WARNING "usbaudio: feature unit %u: OSS mixer interface does not support more than 2 channels\n", ftr[3]);
- if (ftr[0] < 7+ftr[5]*(1+state->nrchannels)) {
- printk(KERN_ERR "usbaudio: unit %u: invalid FEATURE_UNIT descriptor\n", ftr[3]);
- return;
+ if (state->nrchannels == 1 && ftr[0] == 7+ftr[5]) {
+ printk(KERN_WARNING "usbaudio: workaround for broken Philips Camera Microphone descriptor enabled\n");
+ mchftr = ftr[6];
+ chftr = 0;
+ } else {
+ if (ftr[0] < 7+ftr[5]*(1+state->nrchannels)) {
+ printk(KERN_ERR "usbaudio: unit %u: invalid FEATURE_UNIT descriptor\n", ftr[3]);
+ return;
+ }
+ mchftr = ftr[6];
+ chftr = ftr[6+ftr[5]];
+ if (state->nrchannels > 1)
+ chftr &= ftr[6+2*ftr[5]];
}
- mchftr = ftr[6];
- chftr = ftr[6+ftr[5]];
- if (state->nrchannels > 1)
- chftr &= ftr[6+2*ftr[5]];
/* volume control */
if (chftr & 2) {
ch = getmixchannel(state, getvolchannel(state));
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)