[PATCH] usb-audio: Add support for Denon DN-X1600
This patch applies clean to tiwai/sound.git repo on hash 82b954a96c1550bae2cb1f1f4f084425ab237cd7 and was tested on this version.
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 --- sound/usb/clock.c | 7 +++++ sound/usb/pcm.c | 4 +++ sound/usb/quirks-table.h | 70 ++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 81 insertions(+)
diff --git a/sound/usb/clock.c b/sound/usb/clock.c index 0afae839d..52de52288 100644 --- a/sound/usb/clock.c +++ b/sound/usb/clock.c @@ -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; } diff --git a/sound/usb/pcm.c b/sound/usb/pcm.c index c66831ee1..6913a5b02 100644 --- a/sound/usb/pcm.c +++ b/sound/usb/pcm.c @@ -197,6 +197,10 @@ int snd_usb_init_pitch(struct snd_usb_audio *chip, if (!(fmt->attributes & UAC_EP_CS_ATTR_PITCH_CONTROL)) return 0;
+ /* Denon DN-X1600 doesn't properly handle this, bail out too */ + if (chip->usb_id == USB_ID(0x154e, 0x500e)) + return 0; + usb_audio_dbg(chip, "enable PITCH for EP 0x%x\n", fmt->endpoint);
switch (fmt->protocol) { diff --git a/sound/usb/quirks-table.h b/sound/usb/quirks-table.h index bdba37d0f..19bb499c1 100644 --- a/sound/usb/quirks-table.h +++ b/sound/usb/quirks-table.h @@ -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),
On Tue, 08 Jun 2021 09:15:01 +0200, Damien Zammit wrote:
--- a/sound/usb/pcm.c +++ b/sound/usb/pcm.c @@ -197,6 +197,10 @@ int snd_usb_init_pitch(struct snd_usb_audio *chip, if (!(fmt->attributes & UAC_EP_CS_ATTR_PITCH_CONTROL)) return 0;
- /* Denon DN-X1600 doesn't properly handle this, bail out too */
- if (chip->usb_id == USB_ID(0x154e, 0x500e))
return 0;
Do we need this part? If this is required, it means that the audioformat sets UAC_EP_CS_ATTR_PITCH_CONTROL incorrectly.
Also, at the next time, please put maintainers to Cc. This will avoid overlooks from maintainers side.
thanks,
Takashi
participants (2)
-
Damien Zammit
-
Takashi Iwai