Skip to content

Commit

Permalink
ALSA: scarlett2: Add Focusrite Clarett+ 2Pre and 4Pre support
Browse files Browse the repository at this point in the history
The Focusrite Clarett+ series uses the same protocol as the Scarlett
Gen 2 and Gen 3 series. This patch adds support for the Clarett+ 2Pre
and Clarett+ 4Pre similarly to the existing 8Pre support by adding
appropriate entries to the scarlett2 driver.

The Clarett 2Pre USB and 4Pre USB presumably use the same protocol as
well, so support for them can easily be added if someone can test.

Signed-off-by: Geoffrey D. Bennett <g@b4.vu>
Link: https://lore.kernel.org/r/ZRL7qjC3tYQllT3H@m.b4.vu
Signed-off-by: Takashi Iwai <tiwai@suse.de>
  • Loading branch information
geoffreybennett authored and tiwai committed Oct 6, 2023
1 parent 17dc03e commit b61a3ac
Show file tree
Hide file tree
Showing 2 changed files with 98 additions and 1 deletion.
2 changes: 2 additions & 0 deletions sound/usb/mixer_quirks.c
Original file line number Diff line number Diff line change
Expand Up @@ -3421,6 +3421,8 @@ int snd_usb_mixer_apply_create_quirk(struct usb_mixer_interface *mixer)
case USB_ID(0x1235, 0x8214): /* Focusrite Scarlett 18i8 3rd Gen */
case USB_ID(0x1235, 0x8215): /* Focusrite Scarlett 18i20 3rd Gen */
case USB_ID(0x1235, 0x8208): /* Focusrite Clarett 8Pre USB */
case USB_ID(0x1235, 0x820a): /* Focusrite Clarett+ 2Pre */
case USB_ID(0x1235, 0x820b): /* Focusrite Clarett+ 4Pre */
case USB_ID(0x1235, 0x820c): /* Focusrite Clarett+ 8Pre */
err = snd_scarlett_gen2_init(mixer);
break;
Expand Down
97 changes: 96 additions & 1 deletion sound/usb/mixer_scarlett_gen2.c
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
* - 6i6/18i8/18i20 Gen 2
* - Solo/2i2/4i4/8i6/18i8/18i20 Gen 3
* - Clarett 8Pre USB
* - Clarett+ 8Pre
* - Clarett+ 2Pre/4Pre/8Pre
*
* Copyright (c) 2018-2023 by Geoffrey D. Bennett <g at b4.vu>
* Copyright (c) 2020-2021 by Vladimir Sadovnikov <sadko4u@gmail.com>
Expand Down Expand Up @@ -60,6 +60,10 @@
* Support for Clarett 8Pre USB added in Sep 2023 (thanks to Philippe
* Perrot for confirmation).
*
* Support for Clarett+ 4Pre and 2Pre added in Sep 2023 (thanks to
* Gregory Rozzo for donating a 4Pre, and David Sherwood and Patrice
* Peterson for usbmon output).
*
* This ALSA mixer gives access to (model-dependent):
* - input, output, mixer-matrix muxes
* - mixer-matrix gain stages
Expand Down Expand Up @@ -832,6 +836,95 @@ static const struct scarlett2_device_info s18i20_gen3_info = {
} },
};

static const struct scarlett2_device_info clarett_2pre_info = {
.config_set = SCARLETT2_CONFIG_SET_CLARETT,
.line_out_hw_vol = 1,
.level_input_count = 2,
.air_input_count = 2,

.line_out_descrs = {
"Monitor L",
"Monitor R",
"Headphones L",
"Headphones R",
},

.port_count = {
[SCARLETT2_PORT_TYPE_NONE] = { 1, 0 },
[SCARLETT2_PORT_TYPE_ANALOGUE] = { 2, 4 },
[SCARLETT2_PORT_TYPE_SPDIF] = { 2, 0 },
[SCARLETT2_PORT_TYPE_ADAT] = { 8, 0 },
[SCARLETT2_PORT_TYPE_MIX] = { 10, 18 },
[SCARLETT2_PORT_TYPE_PCM] = { 4, 12 },
},

.mux_assignment = { {
{ SCARLETT2_PORT_TYPE_PCM, 0, 12 },
{ SCARLETT2_PORT_TYPE_ANALOGUE, 0, 4 },
{ SCARLETT2_PORT_TYPE_MIX, 0, 18 },
{ SCARLETT2_PORT_TYPE_NONE, 0, 8 },
{ 0, 0, 0 },
}, {
{ SCARLETT2_PORT_TYPE_PCM, 0, 8 },
{ SCARLETT2_PORT_TYPE_ANALOGUE, 0, 4 },
{ SCARLETT2_PORT_TYPE_MIX, 0, 18 },
{ SCARLETT2_PORT_TYPE_NONE, 0, 8 },
{ 0, 0, 0 },
}, {
{ SCARLETT2_PORT_TYPE_PCM, 0, 2 },
{ SCARLETT2_PORT_TYPE_ANALOGUE, 0, 4 },
{ SCARLETT2_PORT_TYPE_NONE, 0, 26 },
{ 0, 0, 0 },
} },
};

static const struct scarlett2_device_info clarett_4pre_info = {
.config_set = SCARLETT2_CONFIG_SET_CLARETT,
.line_out_hw_vol = 1,
.level_input_count = 2,
.air_input_count = 4,

.line_out_descrs = {
"Monitor L",
"Monitor R",
"Headphones 1 L",
"Headphones 1 R",
"Headphones 2 L",
"Headphones 2 R",
},

.port_count = {
[SCARLETT2_PORT_TYPE_NONE] = { 1, 0 },
[SCARLETT2_PORT_TYPE_ANALOGUE] = { 8, 6 },
[SCARLETT2_PORT_TYPE_SPDIF] = { 2, 2 },
[SCARLETT2_PORT_TYPE_ADAT] = { 8, 0 },
[SCARLETT2_PORT_TYPE_MIX] = { 10, 18 },
[SCARLETT2_PORT_TYPE_PCM] = { 8, 18 },
},

.mux_assignment = { {
{ SCARLETT2_PORT_TYPE_PCM, 0, 18 },
{ SCARLETT2_PORT_TYPE_ANALOGUE, 0, 6 },
{ SCARLETT2_PORT_TYPE_SPDIF, 0, 2 },
{ SCARLETT2_PORT_TYPE_MIX, 0, 18 },
{ SCARLETT2_PORT_TYPE_NONE, 0, 8 },
{ 0, 0, 0 },
}, {
{ SCARLETT2_PORT_TYPE_PCM, 0, 14 },
{ SCARLETT2_PORT_TYPE_ANALOGUE, 0, 6 },
{ SCARLETT2_PORT_TYPE_SPDIF, 0, 2 },
{ SCARLETT2_PORT_TYPE_MIX, 0, 18 },
{ SCARLETT2_PORT_TYPE_NONE, 0, 8 },
{ 0, 0, 0 },
}, {
{ SCARLETT2_PORT_TYPE_PCM, 0, 12 },
{ SCARLETT2_PORT_TYPE_ANALOGUE, 0, 6 },
{ SCARLETT2_PORT_TYPE_SPDIF, 0, 2 },
{ SCARLETT2_PORT_TYPE_NONE, 0, 24 },
{ 0, 0, 0 },
} },
};

static const struct scarlett2_device_info clarett_8pre_info = {
.config_set = SCARLETT2_CONFIG_SET_CLARETT,
.line_out_hw_vol = 1,
Expand Down Expand Up @@ -907,6 +1000,8 @@ static const struct scarlett2_device_entry scarlett2_devices[] = {

/* Supported Clarett USB/Clarett+ devices */
{ USB_ID(0x1235, 0x8208), &clarett_8pre_info, "Clarett USB" },
{ USB_ID(0x1235, 0x820a), &clarett_2pre_info, "Clarett+" },
{ USB_ID(0x1235, 0x820b), &clarett_4pre_info, "Clarett+" },
{ USB_ID(0x1235, 0x820c), &clarett_8pre_info, "Clarett+" },

/* End of list */
Expand Down

0 comments on commit b61a3ac

Please sign in to comment.