|
@@ -273,26 +273,28 @@ static int snd_em28xx_capture_open(struct snd_pcm_substream *substream)
|
|
|
mutex_lock(&dev->lock);
|
|
|
|
|
|
runtime->hw = snd_em28xx_hw_capture;
|
|
|
- if ((dev->alt == 0 || dev->is_audio_only) && dev->adev.users == 0) {
|
|
|
- if (dev->is_audio_only)
|
|
|
- /* vendor audio is on a separate interface */
|
|
|
- dev->alt = 1;
|
|
|
- else
|
|
|
- /* vendor audio is on the same interface as video */
|
|
|
- dev->alt = 7;
|
|
|
- /*
|
|
|
- * FIXME: The intention seems to be to select the alt
|
|
|
- * setting with the largest wMaxPacketSize for the video
|
|
|
- * endpoint.
|
|
|
- * At least dev->alt should be used instead, but we
|
|
|
- * should probably not touch it at all if it is
|
|
|
- * already >0, because wMaxPacketSize of the audio
|
|
|
- * endpoints seems to be the same for all.
|
|
|
- */
|
|
|
-
|
|
|
- dprintk("changing alternate number on interface %d to %d\n",
|
|
|
- dev->ifnum, dev->alt);
|
|
|
- usb_set_interface(dev->udev, dev->ifnum, dev->alt);
|
|
|
+
|
|
|
+ if (dev->adev.users == 0) {
|
|
|
+ if (dev->alt == 0 || dev->is_audio_only) {
|
|
|
+ if (dev->is_audio_only)
|
|
|
+ /* audio is on a separate interface */
|
|
|
+ dev->alt = 1;
|
|
|
+ else
|
|
|
+ /* audio is on the same interface as video */
|
|
|
+ dev->alt = 7;
|
|
|
+ /*
|
|
|
+ * FIXME: The intention seems to be to select
|
|
|
+ * the alt setting with the largest
|
|
|
+ * wMaxPacketSize for the video endpoint.
|
|
|
+ * At least dev->alt should be used instead, but
|
|
|
+ * we should probably not touch it at all if it
|
|
|
+ * is already >0, because wMaxPacketSize of the
|
|
|
+ * audio endpoints seems to be the same for all.
|
|
|
+ */
|
|
|
+ dprintk("changing alternate number on interface %d to %d\n",
|
|
|
+ dev->ifnum, dev->alt);
|
|
|
+ usb_set_interface(dev->udev, dev->ifnum, dev->alt);
|
|
|
+ }
|
|
|
|
|
|
/* Sets volume, mute, etc */
|
|
|
dev->mute = 0;
|