ALSA: scarlett2: Move USB IDs out from device_info struct
authorGeoffrey D. Bennett <g@b4.vu>
Thu, 14 Sep 2023 17:32:16 +0000 (03:02 +0930)
committerTakashi Iwai <tiwai@suse.de>
Mon, 18 Sep 2023 15:47:03 +0000 (17:47 +0200)
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: Philippe Perrot <philippe@perrot-net.fr>
Signed-off-by: Geoffrey D. Bennett <g@b4.vu>
Link: https://lore.kernel.org/r/8263368e8d49e6fcebc709817bd82ab79b404468.1694705811.git.g@b4.vu
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/usb/mixer_scarlett_gen2.c

index f48a678b246315ce1243c478c5b25dd80784de4c..1bb6a238b366f3a94fa7508ede1b2edfc4e2c1c2 100644 (file)
@@ -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;