Commit d98cc489 authored by Geoffrey D. Bennett's avatar Geoffrey D. Bennett Committed by Takashi Iwai
Browse files

ALSA: scarlett2: Move USB IDs out from device_info struct



By moving the USB IDs from the device_info struct into
scarlett2_devices[], that will allow for devices with different
USB IDs to share the same device_info.

Tested-by: default avatarPhilippe Perrot <philippe@perrot-net.fr>
Signed-off-by: default avatarGeoffrey D. Bennett <g@b4.vu>
Link: https://lore.kernel.org/r/8263368e8d49e6fcebc709817bd82ab79b404468.1694705811.git.g@b4.vu


Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent bc83058f
Loading
Loading
Loading
Loading
+23 −40
Original line number Diff line number Diff line
@@ -317,8 +317,6 @@ struct scarlett2_mux_entry {
};

struct scarlett2_device_info {
	u32 usb_id; /* USB device identifier */

	/* Gen 3 devices have an internal MSD mode switch that needs
	 * to be disabled in order to access the full functionality of
	 * the device.
@@ -440,8 +438,6 @@ struct scarlett2_data {
/*** Model-specific data ***/

static const struct scarlett2_device_info s6i6_gen2_info = {
	.usb_id = USB_ID(0x1235, 0x8203),

	.config_set = SCARLETT2_CONFIG_SET_GEN_2,
	.level_input_count = 2,
	.pad_input_count = 2,
@@ -486,8 +482,6 @@ static const struct scarlett2_device_info s6i6_gen2_info = {
};

static const struct scarlett2_device_info s18i8_gen2_info = {
	.usb_id = USB_ID(0x1235, 0x8204),

	.config_set = SCARLETT2_CONFIG_SET_GEN_2,
	.level_input_count = 2,
	.pad_input_count = 4,
@@ -535,8 +529,6 @@ static const struct scarlett2_device_info s18i8_gen2_info = {
};

static const struct scarlett2_device_info s18i20_gen2_info = {
	.usb_id = USB_ID(0x1235, 0x8201),

	.config_set = SCARLETT2_CONFIG_SET_GEN_2,
	.line_out_hw_vol = 1,

@@ -589,8 +581,6 @@ static const struct scarlett2_device_info s18i20_gen2_info = {
};

static const struct scarlett2_device_info solo_gen3_info = {
	.usb_id = USB_ID(0x1235, 0x8211),

	.has_msd_mode = 1,
	.config_set = SCARLETT2_CONFIG_SET_NO_MIXER,
	.level_input_count = 1,
@@ -602,8 +592,6 @@ static const struct scarlett2_device_info solo_gen3_info = {
};

static const struct scarlett2_device_info s2i2_gen3_info = {
	.usb_id = USB_ID(0x1235, 0x8210),

	.has_msd_mode = 1,
	.config_set = SCARLETT2_CONFIG_SET_NO_MIXER,
	.level_input_count = 2,
@@ -614,8 +602,6 @@ static const struct scarlett2_device_info s2i2_gen3_info = {
};

static const struct scarlett2_device_info s4i4_gen3_info = {
	.usb_id = USB_ID(0x1235, 0x8212),

	.has_msd_mode = 1,
	.config_set = SCARLETT2_CONFIG_SET_GEN_3,
	.level_input_count = 2,
@@ -660,8 +646,6 @@ static const struct scarlett2_device_info s4i4_gen3_info = {
};

static const struct scarlett2_device_info s8i6_gen3_info = {
	.usb_id = USB_ID(0x1235, 0x8213),

	.has_msd_mode = 1,
	.config_set = SCARLETT2_CONFIG_SET_GEN_3,
	.level_input_count = 2,
@@ -713,8 +697,6 @@ static const struct scarlett2_device_info s8i6_gen3_info = {
};

static const struct scarlett2_device_info s18i8_gen3_info = {
	.usb_id = USB_ID(0x1235, 0x8214),

	.has_msd_mode = 1,
	.config_set = SCARLETT2_CONFIG_SET_GEN_3,
	.line_out_hw_vol = 1,
@@ -783,8 +765,6 @@ static const struct scarlett2_device_info s18i8_gen3_info = {
};

static const struct scarlett2_device_info s18i20_gen3_info = {
	.usb_id = USB_ID(0x1235, 0x8215),

	.has_msd_mode = 1,
	.config_set = SCARLETT2_CONFIG_SET_GEN_3,
	.line_out_hw_vol = 1,
@@ -848,8 +828,6 @@ static const struct scarlett2_device_info s18i20_gen3_info = {
};

static const struct scarlett2_device_info clarett_8pre_info = {
	.usb_id = USB_ID(0x1235, 0x820c),

	.config_set = SCARLETT2_CONFIG_SET_CLARETT,
	.line_out_hw_vol = 1,
	.level_input_count = 2,
@@ -902,25 +880,30 @@ static const struct scarlett2_device_info clarett_8pre_info = {
	} },
};

static const struct scarlett2_device_info *scarlett2_devices[] = {
struct scarlett2_device_entry {
	const u32 usb_id; /* USB device identifier */
	const struct scarlett2_device_info *info;
};

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

	/* Supported Gen 3 devices */
	&solo_gen3_info,
	&s2i2_gen3_info,
	&s4i4_gen3_info,
	&s8i6_gen3_info,
	&s18i8_gen3_info,
	&s18i20_gen3_info,
	{ 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 },

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

	/* End of list */
	NULL
	{ 0, NULL },
};

/* get the starting port index number for a given port type/direction */
@@ -4072,17 +4055,17 @@ static int scarlett2_init_notify(struct usb_mixer_interface *mixer)

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

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

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