Skip to content

Commit

Permalink
ALSA: scarlett2: Add correct product series name to messages
Browse files Browse the repository at this point in the history
[ Upstream commit 6e74378 ]

This driver was originally developed for the Focusrite Scarlett Gen 2
series, but now also supports the Scarlett Gen 3 series, the
Clarett 8Pre USB, and the Clarett+ 8Pre. The messages output by the
driver on initialisation and error include the identifying text
"Scarlett Gen 2/3", but this is no longer accurate, and writing
"Scarlett Gen 2/3/Clarett USB/Clarett+" would be unwieldy.

Add series_name field to the scarlett2_device_entry struct so that
concise and accurate messages can be output.

Signed-off-by: Geoffrey D. Bennett <g@b4.vu>
Link: https://lore.kernel.org/r/3774b9d35bf1fbdd6fdad9f3f4f97e9b82ac76bf.1694705811.git.g@b4.vu
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Stable-dep-of: b61a3ac ("ALSA: scarlett2: Add Focusrite Clarett+ 2Pre and 4Pre support")
Signed-off-by: Sasha Levin <sashal@kernel.org>
  • Loading branch information
geoffreybennett authored and gregkh committed Apr 27, 2024
1 parent 9c48e24 commit 2c57a5c
Showing 1 changed file with 54 additions and 27 deletions.
81 changes: 54 additions & 27 deletions sound/usb/mixer_scarlett_gen2.c
Expand Up @@ -391,6 +391,7 @@ struct scarlett2_data {
struct mutex data_mutex; /* lock access to this data */
struct delayed_work work;
const struct scarlett2_device_info *info;
const char *series_name;
__u8 bInterfaceNumber;
__u8 bEndpointAddress;
__u16 wMaxPacketSize;
Expand Down Expand Up @@ -887,25 +888,26 @@ static const struct scarlett2_device_info clarett_8pre_info = {
struct scarlett2_device_entry {
const u32 usb_id; /* USB device identifier */
const struct scarlett2_device_info *info;
const char *series_name;
};

static const struct scarlett2_device_entry scarlett2_devices[] = {
/* Supported Gen 2 devices */
{ USB_ID(0x1235, 0x8203), &s6i6_gen2_info },
{ USB_ID(0x1235, 0x8204), &s18i8_gen2_info },
{ USB_ID(0x1235, 0x8201), &s18i20_gen2_info },
{ USB_ID(0x1235, 0x8203), &s6i6_gen2_info, "Scarlett Gen 2" },
{ USB_ID(0x1235, 0x8204), &s18i8_gen2_info, "Scarlett Gen 2" },
{ USB_ID(0x1235, 0x8201), &s18i20_gen2_info, "Scarlett Gen 2" },

/* Supported Gen 3 devices */
{ USB_ID(0x1235, 0x8211), &solo_gen3_info },
{ USB_ID(0x1235, 0x8210), &s2i2_gen3_info },
{ USB_ID(0x1235, 0x8212), &s4i4_gen3_info },
{ USB_ID(0x1235, 0x8213), &s8i6_gen3_info },
{ USB_ID(0x1235, 0x8214), &s18i8_gen3_info },
{ USB_ID(0x1235, 0x8215), &s18i20_gen3_info },
{ USB_ID(0x1235, 0x8211), &solo_gen3_info, "Scarlett Gen 3" },
{ USB_ID(0x1235, 0x8210), &s2i2_gen3_info, "Scarlett Gen 3" },
{ USB_ID(0x1235, 0x8212), &s4i4_gen3_info, "Scarlett Gen 3" },
{ USB_ID(0x1235, 0x8213), &s8i6_gen3_info, "Scarlett Gen 3" },
{ USB_ID(0x1235, 0x8214), &s18i8_gen3_info, "Scarlett Gen 3" },
{ USB_ID(0x1235, 0x8215), &s18i20_gen3_info, "Scarlett Gen 3" },

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

/* End of list */
{ 0, NULL },
Expand Down Expand Up @@ -1205,8 +1207,8 @@ static int scarlett2_usb(
if (err != req_buf_size) {
usb_audio_err(
mixer->chip,
"Scarlett Gen 2/3 USB request result cmd %x was %d\n",
cmd, err);
"%s USB request result cmd %x was %d\n",
private->series_name, cmd, err);
err = -EINVAL;
goto unlock;
}
Expand All @@ -1222,9 +1224,8 @@ static int scarlett2_usb(
if (err != resp_buf_size) {
usb_audio_err(
mixer->chip,
"Scarlett Gen 2/3 USB response result cmd %x was %d "
"expected %zu\n",
cmd, err, resp_buf_size);
"%s USB response result cmd %x was %d expected %zu\n",
private->series_name, cmd, err, resp_buf_size);
err = -EINVAL;
goto unlock;
}
Expand All @@ -1240,9 +1241,10 @@ static int scarlett2_usb(
resp->pad) {
usb_audio_err(
mixer->chip,
"Scarlett Gen 2/3 USB invalid response; "
"%s USB invalid response; "
"cmd tx/rx %d/%d seq %d/%d size %d/%d "
"error %d pad %d\n",
private->series_name,
le32_to_cpu(req->cmd), le32_to_cpu(resp->cmd),
le16_to_cpu(req->seq), le16_to_cpu(resp->seq),
resp_size, le16_to_cpu(resp->size),
Expand Down Expand Up @@ -3798,7 +3800,7 @@ static int scarlett2_find_fc_interface(struct usb_device *dev,

/* Initialise private data */
static int scarlett2_init_private(struct usb_mixer_interface *mixer,
const struct scarlett2_device_info *info)
const struct scarlett2_device_entry *entry)
{
struct scarlett2_data *private =
kzalloc(sizeof(struct scarlett2_data), GFP_KERNEL);
Expand All @@ -3814,7 +3816,8 @@ static int scarlett2_init_private(struct usb_mixer_interface *mixer,
mixer->private_free = scarlett2_private_free;
mixer->private_suspend = scarlett2_private_suspend;

private->info = info;
private->info = entry->info;
private->series_name = entry->series_name;
scarlett2_count_mux_io(private);
private->scarlett2_seq = 0;
private->mixer = mixer;
Expand Down Expand Up @@ -4135,19 +4138,28 @@ static int scarlett2_init_notify(struct usb_mixer_interface *mixer)
return usb_submit_urb(mixer->urb, GFP_KERNEL);
}

static int snd_scarlett_gen2_controls_create(struct usb_mixer_interface *mixer)
static const struct scarlett2_device_entry *get_scarlett2_device_entry(
struct usb_mixer_interface *mixer)
{
const struct scarlett2_device_entry *entry = scarlett2_devices;
int err;

/* Find entry in scarlett2_devices */
while (entry->usb_id && entry->usb_id != mixer->chip->usb_id)
entry++;
if (!entry->usb_id)
return -EINVAL;
return NULL;

return entry;
}

static int snd_scarlett_gen2_controls_create(
struct usb_mixer_interface *mixer,
const struct scarlett2_device_entry *entry)
{
int err;

/* Initialise private data */
err = scarlett2_init_private(mixer, entry->info);
err = scarlett2_init_private(mixer, entry);
if (err < 0)
return err;

Expand Down Expand Up @@ -4231,32 +4243,47 @@ static int snd_scarlett_gen2_controls_create(struct usb_mixer_interface *mixer)
int snd_scarlett_gen2_init(struct usb_mixer_interface *mixer)
{
struct snd_usb_audio *chip = mixer->chip;
const struct scarlett2_device_entry *entry;
int err;

/* only use UAC_VERSION_2 */
if (!mixer->protocol)
return 0;

/* find entry in scarlett2_devices */
entry = get_scarlett2_device_entry(mixer);
if (!entry) {
usb_audio_err(mixer->chip,
"%s: missing device entry for %04x:%04x\n",
__func__,
USB_ID_VENDOR(chip->usb_id),
USB_ID_PRODUCT(chip->usb_id));
return 0;
}

if (chip->setup & SCARLETT2_DISABLE) {
usb_audio_info(chip,
"Focusrite Scarlett Gen 2/3 Mixer Driver disabled "
"Focusrite %s Mixer Driver disabled "
"by modprobe options (snd_usb_audio "
"vid=0x%04x pid=0x%04x device_setup=%d)\n",
entry->series_name,
USB_ID_VENDOR(chip->usb_id),
USB_ID_PRODUCT(chip->usb_id),
SCARLETT2_DISABLE);
return 0;
}

usb_audio_info(chip,
"Focusrite Scarlett Gen 2/3 Mixer Driver enabled (pid=0x%04x); "
"Focusrite %s Mixer Driver enabled (pid=0x%04x); "
"report any issues to g@b4.vu",
entry->series_name,
USB_ID_PRODUCT(chip->usb_id));

err = snd_scarlett_gen2_controls_create(mixer);
err = snd_scarlett_gen2_controls_create(mixer, entry);
if (err < 0)
usb_audio_err(mixer->chip,
"Error initialising Scarlett Mixer Driver: %d",
"Error initialising %s Mixer Driver: %d",
entry->series_name,
err);

return err;
Expand Down

0 comments on commit 2c57a5c

Please sign in to comment.