В Пн, 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@gmail.com
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 */ {