]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
ALSA: usb-audio: Add extra PID for RME Digiface USB
authorAsahi Lina <lina@asahilina.net>
Mon, 2 Dec 2024 13:17:15 +0000 (22:17 +0900)
committerTakashi Iwai <tiwai@suse.de>
Mon, 2 Dec 2024 15:31:35 +0000 (16:31 +0100)
It seems there is an alternate version of the hardware with a different
PID. User testing reveals this still works with the same interface as far
as the kernel is concerned, so just add the extra PID. Thanks to Heiko
Engemann for testing with this version.

Due to the way quirks-table.h is structured, that means we have to turn
the entire quirk struct into a macro to avoid duplicating it...

Cc: stable@vger.kernel.org
Signed-off-by: Asahi Lina <lina@asahilina.net>
Link: https://patch.msgid.link/20241202-rme-digiface-usb-id-v1-1-50f730d7a46e@asahilina.net
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/usb/mixer_quirks.c
sound/usb/quirks-table.h
sound/usb/quirks.c

index 8bbf070b367622ee0e925d4096f2c1320ac7ce05..23fcd680167d02988fd6b6f90a4946c3ba7e55ce 100644 (file)
@@ -4116,6 +4116,7 @@ int snd_usb_mixer_apply_create_quirk(struct usb_mixer_interface *mixer)
                err = snd_bbfpro_controls_create(mixer);
                break;
        case USB_ID(0x2a39, 0x3f8c): /* RME Digiface USB */
+       case USB_ID(0x2a39, 0x3fa0): /* RME Digiface USB (alternate) */
                err = snd_rme_digiface_controls_create(mixer);
                break;
        case USB_ID(0x2b73, 0x0017): /* Pioneer DJ DJM-250MK2 */
index c49383e64678c761bb6c2119af7316f0c5eae7bb..8954be23325c500660c420828558ebfddaafc7cd 100644 (file)
@@ -3673,176 +3673,181 @@ YAMAHA_DEVICE(0x7010, "UB99"),
                }
        }
 },
-{
-       /* Only claim interface 0 */
-       .match_flags = USB_DEVICE_ID_MATCH_VENDOR |
-                      USB_DEVICE_ID_MATCH_PRODUCT |
-                      USB_DEVICE_ID_MATCH_INT_CLASS |
-                      USB_DEVICE_ID_MATCH_INT_NUMBER,
-       .idVendor = 0x2a39,
-       .idProduct = 0x3f8c,
-       .bInterfaceClass = USB_CLASS_VENDOR_SPEC,
-       .bInterfaceNumber = 0,
-       QUIRK_DRIVER_INFO {
-               QUIRK_DATA_COMPOSITE {
+#define QUIRK_RME_DIGIFACE(pid) \
+{ \
+       /* Only claim interface 0 */ \
+       .match_flags = USB_DEVICE_ID_MATCH_VENDOR | \
+                      USB_DEVICE_ID_MATCH_PRODUCT | \
+                      USB_DEVICE_ID_MATCH_INT_CLASS | \
+                      USB_DEVICE_ID_MATCH_INT_NUMBER, \
+       .idVendor = 0x2a39, \
+       .idProduct = pid, \
+       .bInterfaceClass = USB_CLASS_VENDOR_SPEC, \
+       .bInterfaceNumber = 0, \
+       QUIRK_DRIVER_INFO { \
+               QUIRK_DATA_COMPOSITE { \
                        /*
                         * Three modes depending on sample rate band,
                         * with different channel counts for in/out
-                        */
-                       { QUIRK_DATA_STANDARD_MIXER(0) },
-                       {
-                               QUIRK_DATA_AUDIOFORMAT(0) {
-                                       .formats = SNDRV_PCM_FMTBIT_S32_LE,
-                                       .channels = 34, // outputs
-                                       .fmt_bits = 24,
-                                       .iface = 0,
-                                       .altsetting = 1,
-                                       .altset_idx = 1,
-                                       .endpoint = 0x02,
-                                       .ep_idx = 1,
-                                       .ep_attr = USB_ENDPOINT_XFER_ISOC |
-                                               USB_ENDPOINT_SYNC_ASYNC,
-                                       .rates = SNDRV_PCM_RATE_32000 |
-                                               SNDRV_PCM_RATE_44100 |
-                                               SNDRV_PCM_RATE_48000,
-                                       .rate_min = 32000,
-                                       .rate_max = 48000,
-                                       .nr_rates = 3,
-                                       .rate_table = (unsigned int[]) {
-                                               32000, 44100, 48000,
-                                       },
-                                       .sync_ep = 0x81,
-                                       .sync_iface = 0,
-                                       .sync_altsetting = 1,
-                                       .sync_ep_idx = 0,
-                                       .implicit_fb = 1,
-                               },
-                       },
-                       {
-                               QUIRK_DATA_AUDIOFORMAT(0) {
-                                       .formats = SNDRV_PCM_FMTBIT_S32_LE,
-                                       .channels = 18, // outputs
-                                       .fmt_bits = 24,
-                                       .iface = 0,
-                                       .altsetting = 1,
-                                       .altset_idx = 1,
-                                       .endpoint = 0x02,
-                                       .ep_idx = 1,
-                                       .ep_attr = USB_ENDPOINT_XFER_ISOC |
-                                               USB_ENDPOINT_SYNC_ASYNC,
-                                       .rates = SNDRV_PCM_RATE_64000 |
-                                               SNDRV_PCM_RATE_88200 |
-                                               SNDRV_PCM_RATE_96000,
-                                       .rate_min = 64000,
-                                       .rate_max = 96000,
-                                       .nr_rates = 3,
-                                       .rate_table = (unsigned int[]) {
-                                               64000, 88200, 96000,
-                                       },
-                                       .sync_ep = 0x81,
-                                       .sync_iface = 0,
-                                       .sync_altsetting = 1,
-                                       .sync_ep_idx = 0,
-                                       .implicit_fb = 1,
-                               },
-                       },
-                       {
-                               QUIRK_DATA_AUDIOFORMAT(0) {
-                                       .formats = SNDRV_PCM_FMTBIT_S32_LE,
-                                       .channels = 10, // outputs
-                                       .fmt_bits = 24,
-                                       .iface = 0,
-                                       .altsetting = 1,
-                                       .altset_idx = 1,
-                                       .endpoint = 0x02,
-                                       .ep_idx = 1,
-                                       .ep_attr = USB_ENDPOINT_XFER_ISOC |
-                                               USB_ENDPOINT_SYNC_ASYNC,
-                                       .rates = SNDRV_PCM_RATE_KNOT |
-                                               SNDRV_PCM_RATE_176400 |
-                                               SNDRV_PCM_RATE_192000,
-                                       .rate_min = 128000,
-                                       .rate_max = 192000,
-                                       .nr_rates = 3,
-                                       .rate_table = (unsigned int[]) {
-                                               128000, 176400, 192000,
-                                       },
-                                       .sync_ep = 0x81,
-                                       .sync_iface = 0,
-                                       .sync_altsetting = 1,
-                                       .sync_ep_idx = 0,
-                                       .implicit_fb = 1,
-                               },
-                       },
-                       {
-                               QUIRK_DATA_AUDIOFORMAT(0) {
-                                       .formats = SNDRV_PCM_FMTBIT_S32_LE,
-                                       .channels = 32, // inputs
-                                       .fmt_bits = 24,
-                                       .iface = 0,
-                                       .altsetting = 1,
-                                       .altset_idx = 1,
-                                       .endpoint = 0x81,
-                                       .ep_attr = USB_ENDPOINT_XFER_ISOC |
-                                               USB_ENDPOINT_SYNC_ASYNC,
-                                       .rates = SNDRV_PCM_RATE_32000 |
-                                               SNDRV_PCM_RATE_44100 |
-                                               SNDRV_PCM_RATE_48000,
-                                       .rate_min = 32000,
-                                       .rate_max = 48000,
-                                       .nr_rates = 3,
-                                       .rate_table = (unsigned int[]) {
-                                               32000, 44100, 48000,
-                                       }
-                               }
-                       },
-                       {
-                               QUIRK_DATA_AUDIOFORMAT(0) {
-                                       .formats = SNDRV_PCM_FMTBIT_S32_LE,
-                                       .channels = 16, // inputs
-                                       .fmt_bits = 24,
-                                       .iface = 0,
-                                       .altsetting = 1,
-                                       .altset_idx = 1,
-                                       .endpoint = 0x81,
-                                       .ep_attr = USB_ENDPOINT_XFER_ISOC |
-                                               USB_ENDPOINT_SYNC_ASYNC,
-                                       .rates = SNDRV_PCM_RATE_64000 |
-                                               SNDRV_PCM_RATE_88200 |
-                                               SNDRV_PCM_RATE_96000,
-                                       .rate_min = 64000,
-                                       .rate_max = 96000,
-                                       .nr_rates = 3,
-                                       .rate_table = (unsigned int[]) {
-                                               64000, 88200, 96000,
-                                       }
-                               }
-                       },
-                       {
-                               QUIRK_DATA_AUDIOFORMAT(0) {
-                                       .formats = SNDRV_PCM_FMTBIT_S32_LE,
-                                       .channels = 8, // inputs
-                                       .fmt_bits = 24,
-                                       .iface = 0,
-                                       .altsetting = 1,
-                                       .altset_idx = 1,
-                                       .endpoint = 0x81,
-                                       .ep_attr = USB_ENDPOINT_XFER_ISOC |
-                                               USB_ENDPOINT_SYNC_ASYNC,
-                                       .rates = SNDRV_PCM_RATE_KNOT |
-                                               SNDRV_PCM_RATE_176400 |
-                                               SNDRV_PCM_RATE_192000,
-                                       .rate_min = 128000,
-                                       .rate_max = 192000,
-                                       .nr_rates = 3,
-                                       .rate_table = (unsigned int[]) {
-                                               128000, 176400, 192000,
-                                       }
-                               }
-                       },
-                       QUIRK_COMPOSITE_END
-               }
-       }
-},
+                        */ \
+                       { QUIRK_DATA_STANDARD_MIXER(0) }, \
+                       { \
+                               QUIRK_DATA_AUDIOFORMAT(0) { \
+                                       .formats = SNDRV_PCM_FMTBIT_S32_LE, \
+                                       .channels = 34, /* outputs */ \
+                                       .fmt_bits = 24, \
+                                       .iface = 0, \
+                                       .altsetting = 1, \
+                                       .altset_idx = 1, \
+                                       .endpoint = 0x02, \
+                                       .ep_idx = 1, \
+                                       .ep_attr = USB_ENDPOINT_XFER_ISOC | \
+                                               USB_ENDPOINT_SYNC_ASYNC, \
+                                       .rates = SNDRV_PCM_RATE_32000 | \
+                                               SNDRV_PCM_RATE_44100 | \
+                                               SNDRV_PCM_RATE_48000, \
+                                       .rate_min = 32000, \
+                                       .rate_max = 48000, \
+                                       .nr_rates = 3, \
+                                       .rate_table = (unsigned int[]) { \
+                                               32000, 44100, 48000, \
+                                       }, \
+                                       .sync_ep = 0x81, \
+                                       .sync_iface = 0, \
+                                       .sync_altsetting = 1, \
+                                       .sync_ep_idx = 0, \
+                                       .implicit_fb = 1, \
+                               }, \
+                       }, \
+                       { \
+                               QUIRK_DATA_AUDIOFORMAT(0) { \
+                                       .formats = SNDRV_PCM_FMTBIT_S32_LE, \
+                                       .channels = 18, /* outputs */ \
+                                       .fmt_bits = 24, \
+                                       .iface = 0, \
+                                       .altsetting = 1, \
+                                       .altset_idx = 1, \
+                                       .endpoint = 0x02, \
+                                       .ep_idx = 1, \
+                                       .ep_attr = USB_ENDPOINT_XFER_ISOC | \
+                                               USB_ENDPOINT_SYNC_ASYNC, \
+                                       .rates = SNDRV_PCM_RATE_64000 | \
+                                               SNDRV_PCM_RATE_88200 | \
+                                               SNDRV_PCM_RATE_96000, \
+                                       .rate_min = 64000, \
+                                       .rate_max = 96000, \
+                                       .nr_rates = 3, \
+                                       .rate_table = (unsigned int[]) { \
+                                               64000, 88200, 96000, \
+                                       }, \
+                                       .sync_ep = 0x81, \
+                                       .sync_iface = 0, \
+                                       .sync_altsetting = 1, \
+                                       .sync_ep_idx = 0, \
+                                       .implicit_fb = 1, \
+                               }, \
+                       }, \
+                       { \
+                               QUIRK_DATA_AUDIOFORMAT(0) { \
+                                       .formats = SNDRV_PCM_FMTBIT_S32_LE, \
+                                       .channels = 10, /* outputs */ \
+                                       .fmt_bits = 24, \
+                                       .iface = 0, \
+                                       .altsetting = 1, \
+                                       .altset_idx = 1, \
+                                       .endpoint = 0x02, \
+                                       .ep_idx = 1, \
+                                       .ep_attr = USB_ENDPOINT_XFER_ISOC | \
+                                               USB_ENDPOINT_SYNC_ASYNC, \
+                                       .rates = SNDRV_PCM_RATE_KNOT | \
+                                               SNDRV_PCM_RATE_176400 | \
+                                               SNDRV_PCM_RATE_192000, \
+                                       .rate_min = 128000, \
+                                       .rate_max = 192000, \
+                                       .nr_rates = 3, \
+                                       .rate_table = (unsigned int[]) { \
+                                               128000, 176400, 192000, \
+                                       }, \
+                                       .sync_ep = 0x81, \
+                                       .sync_iface = 0, \
+                                       .sync_altsetting = 1, \
+                                       .sync_ep_idx = 0, \
+                                       .implicit_fb = 1, \
+                               }, \
+                       }, \
+                       { \
+                               QUIRK_DATA_AUDIOFORMAT(0) { \
+                                       .formats = SNDRV_PCM_FMTBIT_S32_LE, \
+                                       .channels = 32, /* inputs */ \
+                                       .fmt_bits = 24, \
+                                       .iface = 0, \
+                                       .altsetting = 1, \
+                                       .altset_idx = 1, \
+                                       .endpoint = 0x81, \
+                                       .ep_attr = USB_ENDPOINT_XFER_ISOC | \
+                                               USB_ENDPOINT_SYNC_ASYNC, \
+                                       .rates = SNDRV_PCM_RATE_32000 | \
+                                               SNDRV_PCM_RATE_44100 | \
+                                               SNDRV_PCM_RATE_48000, \
+                                       .rate_min = 32000, \
+                                       .rate_max = 48000, \
+                                       .nr_rates = 3, \
+                                       .rate_table = (unsigned int[]) { \
+                                               32000, 44100, 48000, \
+                                       } \
+                               } \
+                       }, \
+                       { \
+                               QUIRK_DATA_AUDIOFORMAT(0) { \
+                                       .formats = SNDRV_PCM_FMTBIT_S32_LE, \
+                                       .channels = 16, /* inputs */ \
+                                       .fmt_bits = 24, \
+                                       .iface = 0, \
+                                       .altsetting = 1, \
+                                       .altset_idx = 1, \
+                                       .endpoint = 0x81, \
+                                       .ep_attr = USB_ENDPOINT_XFER_ISOC | \
+                                               USB_ENDPOINT_SYNC_ASYNC, \
+                                       .rates = SNDRV_PCM_RATE_64000 | \
+                                               SNDRV_PCM_RATE_88200 | \
+                                               SNDRV_PCM_RATE_96000, \
+                                       .rate_min = 64000, \
+                                       .rate_max = 96000, \
+                                       .nr_rates = 3, \
+                                       .rate_table = (unsigned int[]) { \
+                                               64000, 88200, 96000, \
+                                       } \
+                               } \
+                       }, \
+                       { \
+                               QUIRK_DATA_AUDIOFORMAT(0) { \
+                                       .formats = SNDRV_PCM_FMTBIT_S32_LE, \
+                                       .channels = 8, /* inputs */ \
+                                       .fmt_bits = 24, \
+                                       .iface = 0, \
+                                       .altsetting = 1, \
+                                       .altset_idx = 1, \
+                                       .endpoint = 0x81, \
+                                       .ep_attr = USB_ENDPOINT_XFER_ISOC | \
+                                               USB_ENDPOINT_SYNC_ASYNC, \
+                                       .rates = SNDRV_PCM_RATE_KNOT | \
+                                               SNDRV_PCM_RATE_176400 | \
+                                               SNDRV_PCM_RATE_192000, \
+                                       .rate_min = 128000, \
+                                       .rate_max = 192000, \
+                                       .nr_rates = 3, \
+                                       .rate_table = (unsigned int[]) { \
+                                               128000, 176400, 192000, \
+                                       } \
+                               } \
+                       }, \
+                       QUIRK_COMPOSITE_END \
+               } \
+       } \
+}
+
+QUIRK_RME_DIGIFACE(0x3f8c),
+QUIRK_RME_DIGIFACE(0x3fa0),
+
 #undef USB_DEVICE_VENDOR_SPEC
 #undef USB_AUDIO_DEVICE
index 7c9d352864da0004e78548f19febb969914f5f54..00101875d9a8d57e6b17da16cd258b8b5c6ace5f 100644 (file)
@@ -1665,6 +1665,7 @@ int snd_usb_apply_boot_quirk(struct usb_device *dev,
                        return snd_usb_motu_microbookii_boot_quirk(dev);
                break;
        case USB_ID(0x2a39, 0x3f8c): /* RME Digiface USB */
+       case USB_ID(0x2a39, 0x3fa0): /* RME Digiface USB (alternate) */
                return snd_usb_rme_digiface_boot_quirk(dev);
        }
 
@@ -1878,6 +1879,7 @@ void snd_usb_set_format_quirk(struct snd_usb_substream *subs,
                mbox3_set_format_quirk(subs, fmt); /* Digidesign Mbox 3 */
                break;
        case USB_ID(0x2a39, 0x3f8c): /* RME Digiface USB */
+       case USB_ID(0x2a39, 0x3fa0): /* RME Digiface USB (alternate) */
                rme_digiface_set_format_quirk(subs);
                break;
        }