Skip to content

Commit

Permalink
ALSA: usb-audio: Add quirk for Focusrite Scarlett 2i2
Browse files Browse the repository at this point in the history
Force it to use asynchronous playback.

Same quirk has already been added for Focusrite Scarlett Solo (2nd gen)
with a commit 46f5710 ("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.

Moved both quirks to snd_usb_audioformat_attributes_quirk() as suggested.

Signed-off-by: Gregor Pintar <[email protected]>
Reviewed-by: Alexander Tsoy <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
Signed-off-by: Takashi Iwai <[email protected]>
  • Loading branch information
LightBit authored and tiwai committed Apr 21, 2020
1 parent a43c1c4 commit 6f4ea20
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 84 deletions.
84 changes: 0 additions & 84 deletions sound/usb/quirks-table.h
Original file line number Diff line number Diff line change
Expand Up @@ -2756,90 +2756,6 @@ YAMAHA_DEVICE(0x7010, "UB99"),
.type = QUIRK_MIDI_NOVATION
}
},
{
/*
* Focusrite Scarlett Solo 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, 0x8205),
.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_IMPLICIT_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 */
{
Expand Down
13 changes: 13 additions & 0 deletions sound/usb/quirks.c
Original file line number Diff line number Diff line change
Expand Up @@ -1806,6 +1806,19 @@ void snd_usb_audioformat_attributes_quirk(struct snd_usb_audio *chip,
*/
fp->attributes &= ~UAC_EP_CS_ATTR_FILL_MAX;
break;
case USB_ID(0x1235, 0x8202): /* Focusrite Scarlett 2i2 2nd gen */
case USB_ID(0x1235, 0x8205): /* Focusrite Scarlett Solo 2nd gen */
/*
* 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.
*/
if (stream == SNDRV_PCM_STREAM_PLAYBACK) {
fp->ep_attr &= ~USB_ENDPOINT_SYNCTYPE;
fp->ep_attr |= USB_ENDPOINT_SYNC_ASYNC;
}
break;
}
}

Expand Down

0 comments on commit 6f4ea20

Please sign in to comment.