В Пн, 20/04/2020 в 22:19 +0200, Gregor Pintar пишет: > Force it to use asynchronous playback. Can we use snd_usb_audioformat_attributes_quirk() for such fixes? See the quirk for Griffin iMic as an example. > > Same quirk has already been added for Focusrite Scarlett Solo (2nd > gen) > with a commit 46f5710f0b88 ("ALSA: usb-audio: Add quirk for Focusrite > Scarlett Solo"). > > This also seems to prevent regular clicks when playing at 44100Hz > on Scarlett 2i2 (2nd gen). I did not notice any side effects. > > Signed-off-by: Gregor Pintar <grpintar@xxxxxxxxx> > --- > sound/usb/quirks-table.h | 84 > ++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 84 insertions(+) > > diff --git a/sound/usb/quirks-table.h b/sound/usb/quirks-table.h > index e009d584e..bc936bf79 100644 > --- a/sound/usb/quirks-table.h > +++ b/sound/usb/quirks-table.h > @@ -2840,6 +2840,90 @@ YAMAHA_DEVICE(0x7010, "UB99"), > } > } > }, > +{ > + /* > + * Focusrite Scarlett 2i2 2nd generation > + * Reports that playback should use Synch: Synchronous > + * while still providing a feedback endpoint. Synchronous > causes > + * snapping on some sample rates. > + * Force it to use Synch: Asynchronous. > + */ > + USB_DEVICE(0x1235, 0x8202), > + .driver_info = (unsigned long) &(const struct > snd_usb_audio_quirk) { > + .ifnum = QUIRK_ANY_INTERFACE, > + .type = QUIRK_COMPOSITE, > + .data = (const struct snd_usb_audio_quirk[]) { > + { > + .ifnum = 1, > + .type = QUIRK_AUDIO_FIXED_ENDPOINT, > + .data = &(const struct audioformat) { > + .formats = > SNDRV_PCM_FMTBIT_S32_LE, > + .channels = 2, > + .iface = 1, > + .altsetting = 1, > + .altset_idx = 1, > + .attributes = 0, > + .endpoint = 0x01, > + .ep_attr = > USB_ENDPOINT_XFER_ISOC | > + USB_ENDPOINT_SYNC_ASYNC > , > + .protocol = UAC_VERSION_2, > + .rates = SNDRV_PCM_RATE_44100 | > + SNDRV_PCM_RATE_48000 | > + SNDRV_PCM_RATE_88200 | > + SNDRV_PCM_RATE_96000 | > + SNDRV_PCM_RATE_176400 | > + SNDRV_PCM_RATE_192000, > + .rate_min = 44100, > + .rate_max = 192000, > + .nr_rates = 6, > + .rate_table = (unsigned int[]) > { > + 44100, 48000, 88200, > + 96000, 176400, 192000 > + }, > + .clock = 41 > + } > + }, > + { > + .ifnum = 2, > + .type = QUIRK_AUDIO_FIXED_ENDPOINT, > + .data = &(const struct audioformat) { > + .formats = > SNDRV_PCM_FMTBIT_S32_LE, > + .channels = 2, > + .iface = 2, > + .altsetting = 1, > + .altset_idx = 1, > + .attributes = 0, > + .endpoint = 0x82, > + .ep_attr = > USB_ENDPOINT_XFER_ISOC | > + USB_ENDPOINT_SYNC_ASYNC > | > + USB_ENDPOINT_USAGE_IMPL > ICIT_FB, > + .protocol = UAC_VERSION_2, > + .rates = SNDRV_PCM_RATE_44100 | > + SNDRV_PCM_RATE_48000 | > + SNDRV_PCM_RATE_88200 | > + SNDRV_PCM_RATE_96000 | > + SNDRV_PCM_RATE_176400 | > + SNDRV_PCM_RATE_192000, > + .rate_min = 44100, > + .rate_max = 192000, > + .nr_rates = 6, > + .rate_table = (unsigned int[]) > { > + 44100, 48000, 88200, > + 96000, 176400, 192000 > + }, > + .clock = 41 > + } > + }, > + { > + .ifnum = 3, > + .type = QUIRK_IGNORE_INTERFACE > + }, > + { > + .ifnum = -1 > + } > + } > + } > +}, > > /* Access Music devices */ > {