Takashi Iwai e0c425
From 265d1a90e4fb6d3264d8122fbd10760e5e733be6 Mon Sep 17 00:00:00 2001
Takashi Iwai e0c425
From: "Geoffrey D. Bennett" <g@b4.vu>
Takashi Iwai e0c425
Date: Fri, 21 May 2021 17:50:13 +0930
Takashi Iwai e0c425
Subject: [PATCH] ALSA: usb-audio: scarlett2: Improve driver startup messages
Takashi Iwai e0c425
Git-commit: 265d1a90e4fb6d3264d8122fbd10760e5e733be6
Takashi Iwai e0c425
Patch-mainline: v5.13-rc4
Takashi Iwai e0c425
References: git-fixes
Takashi Iwai e0c425
Takashi Iwai e0c425
Add separate init function to call the existing controls_create
Takashi Iwai e0c425
function so a custom error can be displayed if initialisation fails.
Takashi Iwai e0c425
Takashi Iwai e0c425
Use info level instead of error for notifications.
Takashi Iwai e0c425
Takashi Iwai e0c425
Display the VID/PID so device_setup is targeted to the right device.
Takashi Iwai e0c425
Takashi Iwai e0c425
Display "enabled" message to easily confirm that the driver is loaded.
Takashi Iwai e0c425
Takashi Iwai e0c425
Signed-off-by: Geoffrey D. Bennett <g@b4.vu>
Takashi Iwai e0c425
Cc: <stable@vger.kernel.org>
Takashi Iwai e0c425
Link: https://lore.kernel.org/r/b5d140c65f640faf2427e085fbbc0297b32e5fce.1621584566.git.g@b4.vu
Takashi Iwai e0c425
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Takashi Iwai e0c425
Takashi Iwai e0c425
---
Takashi Iwai e0c425
 sound/usb/mixer_quirks.c        |  2 +-
Takashi Iwai e0c425
 sound/usb/mixer_scarlett_gen2.c | 79 +++++++++++++++++++++------------
Takashi Iwai e0c425
 sound/usb/mixer_scarlett_gen2.h |  2 +-
Takashi Iwai e0c425
 3 files changed, 52 insertions(+), 31 deletions(-)
Takashi Iwai e0c425
Takashi Iwai e0c425
diff --git a/sound/usb/mixer_quirks.c b/sound/usb/mixer_quirks.c
Takashi Iwai e0c425
index fda66b2dbb01..37ad77524c0b 100644
Takashi Iwai e0c425
--- a/sound/usb/mixer_quirks.c
Takashi Iwai e0c425
+++ b/sound/usb/mixer_quirks.c
Takashi Iwai e0c425
@@ -3060,7 +3060,7 @@ int snd_usb_mixer_apply_create_quirk(struct usb_mixer_interface *mixer)
Takashi Iwai e0c425
 	case USB_ID(0x1235, 0x8203): /* Focusrite Scarlett 6i6 2nd Gen */
Takashi Iwai e0c425
 	case USB_ID(0x1235, 0x8204): /* Focusrite Scarlett 18i8 2nd Gen */
Takashi Iwai e0c425
 	case USB_ID(0x1235, 0x8201): /* Focusrite Scarlett 18i20 2nd Gen */
Takashi Iwai e0c425
-		err = snd_scarlett_gen2_controls_create(mixer);
Takashi Iwai e0c425
+		err = snd_scarlett_gen2_init(mixer);
Takashi Iwai e0c425
 		break;
Takashi Iwai e0c425
 
Takashi Iwai e0c425
 	case USB_ID(0x041e, 0x323b): /* Creative Sound Blaster E1 */
Takashi Iwai e0c425
diff --git a/sound/usb/mixer_scarlett_gen2.c b/sound/usb/mixer_scarlett_gen2.c
Takashi Iwai e0c425
index dcff3e3a49f3..3ad8f61a2095 100644
Takashi Iwai e0c425
--- a/sound/usb/mixer_scarlett_gen2.c
Takashi Iwai e0c425
+++ b/sound/usb/mixer_scarlett_gen2.c
Takashi Iwai e0c425
@@ -1997,38 +1997,11 @@ static int scarlett2_mixer_status_create(struct usb_mixer_interface *mixer)
Takashi Iwai e0c425
 	return usb_submit_urb(mixer->urb, GFP_KERNEL);
Takashi Iwai e0c425
 }
Takashi Iwai e0c425
 
Takashi Iwai e0c425
-/* Entry point */
Takashi Iwai e0c425
-int snd_scarlett_gen2_controls_create(struct usb_mixer_interface *mixer)
Takashi Iwai e0c425
+int snd_scarlett_gen2_controls_create(struct usb_mixer_interface *mixer,
Takashi Iwai e0c425
+				      const struct scarlett2_device_info *info)
Takashi Iwai e0c425
 {
Takashi Iwai e0c425
-	const struct scarlett2_device_info *info;
Takashi Iwai e0c425
 	int err;
Takashi Iwai e0c425
 
Takashi Iwai e0c425
-	/* only use UAC_VERSION_2 */
Takashi Iwai e0c425
-	if (!mixer->protocol)
Takashi Iwai e0c425
-		return 0;
Takashi Iwai e0c425
-
Takashi Iwai e0c425
-	switch (mixer->chip->usb_id) {
Takashi Iwai e0c425
-	case USB_ID(0x1235, 0x8203):
Takashi Iwai e0c425
-		info = &s6i6_gen2_info;
Takashi Iwai e0c425
-		break;
Takashi Iwai e0c425
-	case USB_ID(0x1235, 0x8204):
Takashi Iwai e0c425
-		info = &s18i8_gen2_info;
Takashi Iwai e0c425
-		break;
Takashi Iwai e0c425
-	case USB_ID(0x1235, 0x8201):
Takashi Iwai e0c425
-		info = &s18i20_gen2_info;
Takashi Iwai e0c425
-		break;
Takashi Iwai e0c425
-	default: /* device not (yet) supported */
Takashi Iwai e0c425
-		return -EINVAL;
Takashi Iwai e0c425
-	}
Takashi Iwai e0c425
-
Takashi Iwai e0c425
-	if (!(mixer->chip->setup & SCARLETT2_ENABLE)) {
Takashi Iwai e0c425
-		usb_audio_err(mixer->chip,
Takashi Iwai e0c425
-			"Focusrite Scarlett Gen 2 Mixer Driver disabled; "
Takashi Iwai e0c425
-			"use options snd_usb_audio device_setup=1 "
Takashi Iwai e0c425
-			"to enable and report any issues to g@b4.vu");
Takashi Iwai e0c425
-		return 0;
Takashi Iwai e0c425
-	}
Takashi Iwai e0c425
-
Takashi Iwai e0c425
 	/* Initialise private data, routing, sequence number */
Takashi Iwai e0c425
 	err = scarlett2_init_private(mixer, info);
Takashi Iwai e0c425
 	if (err < 0)
Takashi Iwai e0c425
@@ -2073,3 +2046,51 @@ int snd_scarlett_gen2_controls_create(struct usb_mixer_interface *mixer)
Takashi Iwai e0c425
 
Takashi Iwai e0c425
 	return 0;
Takashi Iwai e0c425
 }
Takashi Iwai e0c425
+
Takashi Iwai e0c425
+int snd_scarlett_gen2_init(struct usb_mixer_interface *mixer)
Takashi Iwai e0c425
+{
Takashi Iwai e0c425
+	struct snd_usb_audio *chip = mixer->chip;
Takashi Iwai e0c425
+	const struct scarlett2_device_info *info;
Takashi Iwai e0c425
+	int err;
Takashi Iwai e0c425
+
Takashi Iwai e0c425
+	/* only use UAC_VERSION_2 */
Takashi Iwai e0c425
+	if (!mixer->protocol)
Takashi Iwai e0c425
+		return 0;
Takashi Iwai e0c425
+
Takashi Iwai e0c425
+	switch (chip->usb_id) {
Takashi Iwai e0c425
+	case USB_ID(0x1235, 0x8203):
Takashi Iwai e0c425
+		info = &s6i6_gen2_info;
Takashi Iwai e0c425
+		break;
Takashi Iwai e0c425
+	case USB_ID(0x1235, 0x8204):
Takashi Iwai e0c425
+		info = &s18i8_gen2_info;
Takashi Iwai e0c425
+		break;
Takashi Iwai e0c425
+	case USB_ID(0x1235, 0x8201):
Takashi Iwai e0c425
+		info = &s18i20_gen2_info;
Takashi Iwai e0c425
+		break;
Takashi Iwai e0c425
+	default: /* device not (yet) supported */
Takashi Iwai e0c425
+		return -EINVAL;
Takashi Iwai e0c425
+	}
Takashi Iwai e0c425
+
Takashi Iwai e0c425
+	if (!(chip->setup & SCARLETT2_ENABLE)) {
Takashi Iwai e0c425
+		usb_audio_info(chip,
Takashi Iwai e0c425
+			"Focusrite Scarlett Gen 2 Mixer Driver disabled; "
Takashi Iwai e0c425
+			"use options snd_usb_audio vid=0x%04x pid=0x%04x "
Takashi Iwai e0c425
+			"device_setup=1 to enable and report any issues "
Takashi Iwai e0c425
+			"to g@b4.vu",
Takashi Iwai e0c425
+			USB_ID_VENDOR(chip->usb_id),
Takashi Iwai e0c425
+			USB_ID_PRODUCT(chip->usb_id));
Takashi Iwai e0c425
+		return 0;
Takashi Iwai e0c425
+	}
Takashi Iwai e0c425
+
Takashi Iwai e0c425
+	usb_audio_info(chip,
Takashi Iwai e0c425
+		"Focusrite Scarlett Gen 2 Mixer Driver enabled pid=0x%04x",
Takashi Iwai e0c425
+		USB_ID_PRODUCT(chip->usb_id));
Takashi Iwai e0c425
+
Takashi Iwai e0c425
+	err = snd_scarlett_gen2_controls_create(mixer, info);
Takashi Iwai e0c425
+	if (err < 0)
Takashi Iwai e0c425
+		usb_audio_err(mixer->chip,
Takashi Iwai e0c425
+			      "Error initialising Scarlett Mixer Driver: %d",
Takashi Iwai e0c425
+			      err);
Takashi Iwai e0c425
+
Takashi Iwai e0c425
+	return err;
Takashi Iwai e0c425
+}
Takashi Iwai e0c425
diff --git a/sound/usb/mixer_scarlett_gen2.h b/sound/usb/mixer_scarlett_gen2.h
Takashi Iwai e0c425
index 52e1dad77afd..668c6b0cb50a 100644
Takashi Iwai e0c425
--- a/sound/usb/mixer_scarlett_gen2.h
Takashi Iwai e0c425
+++ b/sound/usb/mixer_scarlett_gen2.h
Takashi Iwai e0c425
@@ -2,6 +2,6 @@
Takashi Iwai e0c425
 #ifndef __USB_MIXER_SCARLETT_GEN2_H
Takashi Iwai e0c425
 #define __USB_MIXER_SCARLETT_GEN2_H
Takashi Iwai e0c425
 
Takashi Iwai e0c425
-int snd_scarlett_gen2_controls_create(struct usb_mixer_interface *mixer);
Takashi Iwai e0c425
+int snd_scarlett_gen2_init(struct usb_mixer_interface *mixer);
Takashi Iwai e0c425
 
Takashi Iwai e0c425
 #endif /* __USB_MIXER_SCARLETT_GEN2_H */
Takashi Iwai e0c425
-- 
Takashi Iwai e0c425
2.26.2
Takashi Iwai e0c425