ALSA: usb-audio: Add support for Denon DN-X1600
authorDamien Zammit <damien@zamaudio.com>
Thu, 10 Jun 2021 08:35:28 +0000 (18:35 +1000)
committerTakashi Iwai <tiwai@suse.de>
Thu, 10 Jun 2021 08:38:33 +0000 (10:38 +0200)
This provides support for Denon DN-X1600 hardware mixer.

The device itself supports 44100, 48000 and 96000 (Hz)
sample rates, but switching rates via software is currently not working.
Therefore, this patch hardcodes the sample rate to 48000Hz which
enables all 8 channels to function correctly when the correct
sample rate is selected on the hardware itself.

MIDI also tested and works.

Signed-off-by: Damien Zammit <damien@zamaudio.com>
Tested-by: xalmoxis@gmail.com
Link: https://lore.kernel.org/r/20210610083528.603942-2-damien@zamaudio.com
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/usb/clock.c
sound/usb/quirks-table.h

index 0afae839d2953d4cc9f150c634d5501fadf403a1..52de52288e1051be41fb01d8449f8e1df24d378b 100644 (file)
@@ -534,6 +534,13 @@ static int set_sample_rate_v2v3(struct snd_usb_audio *chip,
                 * rate.
                 */
                clock = snd_usb_clock_find_source(chip, fmt, false);
+
+               /* Denon DN-X1600 hardcoded
+                * Sample rate seems to be set on the hardware itself
+                */
+               if (chip->usb_id == USB_ID(0x154e, 0x500e))
+                       return 0;
+
                if (clock < 0)
                        return clock;
        }
index bdba37d0faab063ce2aa9ed0b7036325e6c03b18..19bb499c17daa04fe9e1a071353b7bdae7e44a34 100644 (file)
@@ -3044,6 +3044,76 @@ AU0828_DEVICE(0x2040, 0x7270, "Hauppauge", "HVR-950Q"),
        }
 },
 
+/* Denon DN-X1600 */
+{
+       USB_AUDIO_DEVICE(0x154e, 0x500e),
+       .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
+               .vendor_name = "Denon",
+               .product_name = "DN-X1600",
+               .ifnum = QUIRK_ANY_INTERFACE,
+               .type = QUIRK_COMPOSITE,
+               .data = (const struct snd_usb_audio_quirk[]){
+                       {
+                               .ifnum = 0,
+                               .type = QUIRK_IGNORE_INTERFACE,
+                       },
+                       {
+                               .ifnum = 1,
+                               .type = QUIRK_AUDIO_FIXED_ENDPOINT,
+                               .data = &(const struct audioformat) {
+                                       .formats = SNDRV_PCM_FMTBIT_S24_3LE,
+                                       .channels = 8,
+                                       .iface = 1,
+                                       .altsetting = 1,
+                                       .altset_idx = 1,
+                                       .attributes = 0x0,
+                                       .endpoint = 0x01,
+                                       .ep_attr = USB_ENDPOINT_XFER_ISOC |
+                                               USB_ENDPOINT_SYNC_ADAPTIVE,
+                                       .maxpacksize = 0x138,
+                                       .rates = SNDRV_PCM_RATE_48000,
+                                       .rate_min = 48000,
+                                       .rate_max = 48000,
+                                       .nr_rates = 1,
+                                       .rate_table = (unsigned int[]) {
+                                               48000
+                                       }
+                               }
+                       },
+                       {
+                               .ifnum = 2,
+                               .type = QUIRK_AUDIO_FIXED_ENDPOINT,
+                               .data = &(const struct audioformat) {
+                                       .formats = SNDRV_PCM_FMTBIT_S24_3LE,
+                                       .channels = 8,
+                                       .iface = 2,
+                                       .altsetting = 1,
+                                       .altset_idx = 1,
+                                       .attributes = 0x0,
+                                       .endpoint = 0x85,
+                                       .ep_attr = USB_ENDPOINT_XFER_ISOC |
+                                               USB_ENDPOINT_SYNC_ADAPTIVE,
+                                       .maxpacksize = 0x138,
+                                       .rates = SNDRV_PCM_RATE_48000,
+                                       .rate_min = 48000,
+                                       .rate_max = 48000,
+                                       .nr_rates = 1,
+                                       .rate_table = (unsigned int[]) {
+                                               48000
+                                       }
+                               }
+                       },
+                       {
+                               .ifnum = 4,
+                               .type = QUIRK_MIDI_STANDARD_INTERFACE,
+                       },
+                       {
+                               .ifnum = -1
+                       }
+               }
+       }
+},
+
 /* Microsoft XboxLive Headset/Xbox Communicator */
 {
        USB_DEVICE(0x045e, 0x0283),