ALSA: usb-audio: Trust fields given in the quirk
authorMark Hills <mark@xwax.org>
Sun, 17 Mar 2013 11:07:54 +0000 (11:07 +0000)
committerTakashi Iwai <tiwai@suse.de>
Mon, 18 Mar 2013 07:46:37 +0000 (08:46 +0100)
The maxpacksize field is given in some quirks, but it gets ignored (in
favour of wMaxPacketSize from the first endpoint.) This patch favours
the one in the quirk.

Digidesign Mbox and Mbox 2 are the only affected quirks and the devices
are assumed to be working without this patch. So for safety against the
values in the quirk being incorrect, remove them.

The datainterval is also ignored but there are not currently any quirks
which choose to override this.

Cc: Damien Zammit <damien@zamaudio.com>
Cc: Chris J Arges <christopherarges@gmail.com>
Signed-off-by: Mark Hills <mark@xwax.org>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/usb/quirks-table.h
sound/usb/quirks.c

index a620c239caed094509b41f1cd9399d668812b3ac..86e4b8c17dadfe0f50a9785e178b48687f7d4a5b 100644 (file)
@@ -3036,7 +3036,6 @@ YAMAHA_DEVICE(0x7010, "UB99"),
                                        .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
                                        .endpoint = 0x02,
                                        .ep_attr = 0x01,
-                                       .maxpacksize = 0x130,
                                        .rates = SNDRV_PCM_RATE_44100 |
                                                 SNDRV_PCM_RATE_48000,
                                        .rate_min = 44100,
@@ -3084,7 +3083,6 @@ YAMAHA_DEVICE(0x7010, "UB99"),
                                        .attributes = 0x00,
                                        .endpoint = 0x03,
                                        .ep_attr = USB_ENDPOINT_SYNC_ASYNC,
-                                       .maxpacksize = 0x128,
                                        .rates = SNDRV_PCM_RATE_48000,
                                        .rate_min = 48000,
                                        .rate_max = 48000,
@@ -3110,7 +3108,6 @@ YAMAHA_DEVICE(0x7010, "UB99"),
                                        .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
                                        .endpoint = 0x85,
                                        .ep_attr = USB_ENDPOINT_SYNC_SYNC,
-                                       .maxpacksize = 0x128,
                                        .rates = SNDRV_PCM_RATE_48000,
                                        .rate_min = 48000,
                                        .rate_max = 48000,
index 7c4fe5a634f0feab9a48a0ceabb86f74d4e7c1ac..a2ac004bbd9a3bd689e047d61cc8937407b0e1b7 100644 (file)
@@ -165,8 +165,10 @@ static int create_fixed_stream_quirk(struct snd_usb_audio *chip,
                return -EINVAL;
        }
        alts = &iface->altsetting[fp->altset_idx];
-       fp->datainterval = snd_usb_parse_datainterval(chip, alts);
-       fp->maxpacksize = le16_to_cpu(get_endpoint(alts, 0)->wMaxPacketSize);
+       if (fp->datainterval == 0)
+               fp->datainterval = snd_usb_parse_datainterval(chip, alts);
+       if (fp->maxpacksize == 0)
+               fp->maxpacksize = le16_to_cpu(get_endpoint(alts, 0)->wMaxPacketSize);
        usb_set_interface(chip->dev, fp->iface, 0);
        snd_usb_init_pitch(chip, fp->iface, alts, fp);
        snd_usb_init_sample_rate(chip, fp->iface, alts, fp, fp->rate_max);