* [PATCH v2 0/2] usb: add native DSD support for Denon/Marantz @ 2014-11-28 13:04 Jurgen Kramer 2014-11-28 13:04 ` [PATCH 1/2] usb: Add native DSD support for Denon/Marantz DACs Jurgen Kramer 2014-11-28 13:04 ` [PATCH 2/2] usb: Add mode select quirk " Jurgen Kramer 0 siblings, 2 replies; 6+ messages in thread From: Jurgen Kramer @ 2014-11-28 13:04 UTC (permalink / raw) To: alsa-devel; +Cc: Jurgen Kramer This patchset adds native DSD support for Denon/Marantz devices. A specific vendor command is needed to switch between PCM and DSD mode. This is implemented as a new quirk function. Changes from v1: - fix compare in err check - remove unneeded brackets Jurgen Kramer (2): usb: Add native DSD support for Denon/Marantz DACs usb: Add mode select quirk for Denon/Marantz DACs sound/usb/pcm.c | 5 +++++ sound/usb/quirks.c | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ sound/usb/quirks.h | 3 +++ 3 files changed, 61 insertions(+) -- 1.9.3 ^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH 1/2] usb: Add native DSD support for Denon/Marantz DACs 2014-11-28 13:04 [PATCH v2 0/2] usb: add native DSD support for Denon/Marantz Jurgen Kramer @ 2014-11-28 13:04 ` Jurgen Kramer 2014-11-28 13:04 ` [PATCH 2/2] usb: Add mode select quirk " Jurgen Kramer 1 sibling, 0 replies; 6+ messages in thread From: Jurgen Kramer @ 2014-11-28 13:04 UTC (permalink / raw) To: alsa-devel; +Cc: Jurgen Kramer This patch adds native DSD support for the following devices: - Marantz SA-14S1 - Marants HD-DAC1 Signed-off-by: Jurgen Kramer <gtmkramer@xs4all.nl> --- sound/usb/quirks.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/sound/usb/quirks.c b/sound/usb/quirks.c index bc9ebb6..cc07388 100644 --- a/sound/usb/quirks.c +++ b/sound/usb/quirks.c @@ -1213,5 +1213,16 @@ u64 snd_usb_interface_dsd_format_quirks(struct snd_usb_audio *chip, break; } + /* Denon/Marantz devices with USB DAC functionality */ + switch(chip->usb_id) { + case USB_ID(0x154e, 0x3005): /* Marantz HD-DAC1 */ + case USB_ID(0x154e, 0x3006): /* Marantz SA-14S1 */ + if (fp->altsetting == 2) + return SNDRV_PCM_FMTBIT_DSD_U32_BE; + break; + default: + break; + } + return 0; } -- 1.9.3 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 2/2] usb: Add mode select quirk for Denon/Marantz DACs 2014-11-28 13:04 [PATCH v2 0/2] usb: add native DSD support for Denon/Marantz Jurgen Kramer 2014-11-28 13:04 ` [PATCH 1/2] usb: Add native DSD support for Denon/Marantz DACs Jurgen Kramer @ 2014-11-28 13:04 ` Jurgen Kramer 2014-11-28 13:51 ` Takashi Iwai 1 sibling, 1 reply; 6+ messages in thread From: Jurgen Kramer @ 2014-11-28 13:04 UTC (permalink / raw) To: alsa-devel; +Cc: Jurgen Kramer Denon/Marantz USB DACs need a specific vendor command to switch between PCM and DSD mode. This patch adds a new quirk function to switch between the two modes using the specific USB vendor command. This patch applies to the following devices: - Marantz SA-14S1 - Marantz HD-DAC1 Signed-off-by: Jurgen Kramer <gtmkramer@xs4all.nl> --- sound/usb/pcm.c | 5 +++++ sound/usb/quirks.c | 42 ++++++++++++++++++++++++++++++++++++++++++ sound/usb/quirks.h | 3 +++ 3 files changed, 50 insertions(+) diff --git a/sound/usb/pcm.c b/sound/usb/pcm.c index c62a165..0d8aba5 100644 --- a/sound/usb/pcm.c +++ b/sound/usb/pcm.c @@ -482,6 +482,11 @@ static int set_format(struct snd_usb_substream *subs, struct audioformat *fmt) /* set interface */ if (subs->interface != fmt->iface || subs->altset_idx != fmt->altset_idx) { + + err = snd_usb_select_mode_quirk(subs, fmt); + if (err < 0) + return -EIO; + err = usb_set_interface(dev, fmt->iface, fmt->altsetting); if (err < 0) { dev_err(&dev->dev, diff --git a/sound/usb/quirks.c b/sound/usb/quirks.c index cc07388..40fb87f 100644 --- a/sound/usb/quirks.c +++ b/sound/usb/quirks.c @@ -1111,6 +1111,48 @@ void snd_usb_set_format_quirk(struct snd_usb_substream *subs, } } + +/* Marantz/Denon USB DACs need a vendor cmd to switch + * between PCM and native DSD mode */ +int snd_usb_select_mode_quirk(struct snd_usb_substream *subs, + struct audioformat *fmt) +{ + struct usb_device *dev = subs->dev; + int err; + + switch (subs->stream->chip->usb_id) { + case USB_ID(0x154e, 0x3005): /* Marantz HD-DAC1 */ + case USB_ID(0x154e, 0x3006): /* Marantz SA-14S1 */ + + /* First switch to alt set 0, otherwise the mode switch cmd + * will not be accepted by the DAC */ + err = usb_set_interface(dev, fmt->iface, 0); + if (err < 0) + return err; + + mdelay(20); /* Delay needed after setting the interface */ + + switch(fmt->altsetting) { + case 2: /* DSD mode requested */ + err = snd_usb_ctl_msg(dev, usb_sndctrlpipe(dev, 0), 0, + USB_DIR_OUT|USB_TYPE_VENDOR|USB_RECIP_INTERFACE, + 1, 1, NULL, 0); + if (err < 0) + return err; + break; + case 1: /* PCM mode requested */ + err = snd_usb_ctl_msg(dev, usb_sndctrlpipe(dev, 0), 0, + USB_DIR_OUT|USB_TYPE_VENDOR|USB_RECIP_INTERFACE, + 0, 1, NULL, 0); + if (err < 0) + return err; + break; + } + mdelay(20); + } + return 0; +} + void snd_usb_endpoint_start_quirk(struct snd_usb_endpoint *ep) { /* diff --git a/sound/usb/quirks.h b/sound/usb/quirks.h index 665e972..1b86238 100644 --- a/sound/usb/quirks.h +++ b/sound/usb/quirks.h @@ -31,6 +31,9 @@ void snd_usb_ctl_msg_quirk(struct usb_device *dev, unsigned int pipe, __u8 request, __u8 requesttype, __u16 value, __u16 index, void *data, __u16 size); +int snd_usb_select_mode_quirk(struct snd_usb_substream *subs, + struct audioformat *fmt); + u64 snd_usb_interface_dsd_format_quirks(struct snd_usb_audio *chip, struct audioformat *fp, unsigned int sample_bytes); -- 1.9.3 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH 2/2] usb: Add mode select quirk for Denon/Marantz DACs 2014-11-28 13:04 ` [PATCH 2/2] usb: Add mode select quirk " Jurgen Kramer @ 2014-11-28 13:51 ` Takashi Iwai 2014-11-28 16:08 ` Jurgen Kramer 0 siblings, 1 reply; 6+ messages in thread From: Takashi Iwai @ 2014-11-28 13:51 UTC (permalink / raw) To: Jurgen Kramer; +Cc: alsa-devel At Fri, 28 Nov 2014 14:04:31 +0100, Jurgen Kramer wrote: > > Denon/Marantz USB DACs need a specific vendor command to switch between PCM and > DSD mode. This patch adds a new quirk function to switch between the two modes > using the specific USB vendor command. > > This patch applies to the following devices: > - Marantz SA-14S1 > - Marantz HD-DAC1 > > Signed-off-by: Jurgen Kramer <gtmkramer@xs4all.nl> > --- > sound/usb/pcm.c | 5 +++++ > sound/usb/quirks.c | 42 ++++++++++++++++++++++++++++++++++++++++++ > sound/usb/quirks.h | 3 +++ > 3 files changed, 50 insertions(+) > > diff --git a/sound/usb/pcm.c b/sound/usb/pcm.c > index c62a165..0d8aba5 100644 > --- a/sound/usb/pcm.c > +++ b/sound/usb/pcm.c > @@ -482,6 +482,11 @@ static int set_format(struct snd_usb_substream *subs, struct audioformat *fmt) > /* set interface */ > if (subs->interface != fmt->iface || > subs->altset_idx != fmt->altset_idx) { > + > + err = snd_usb_select_mode_quirk(subs, fmt); > + if (err < 0) > + return -EIO; > + > err = usb_set_interface(dev, fmt->iface, fmt->altsetting); > if (err < 0) { > dev_err(&dev->dev, > diff --git a/sound/usb/quirks.c b/sound/usb/quirks.c > index cc07388..40fb87f 100644 > --- a/sound/usb/quirks.c > +++ b/sound/usb/quirks.c > @@ -1111,6 +1111,48 @@ void snd_usb_set_format_quirk(struct snd_usb_substream *subs, > } > } > > + > +/* Marantz/Denon USB DACs need a vendor cmd to switch > + * between PCM and native DSD mode */ > +int snd_usb_select_mode_quirk(struct snd_usb_substream *subs, > + struct audioformat *fmt) > +{ > + struct usb_device *dev = subs->dev; > + int err; > + > + switch (subs->stream->chip->usb_id) { > + case USB_ID(0x154e, 0x3005): /* Marantz HD-DAC1 */ > + case USB_ID(0x154e, 0x3006): /* Marantz SA-14S1 */ > + > + /* First switch to alt set 0, otherwise the mode switch cmd > + * will not be accepted by the DAC */ > + err = usb_set_interface(dev, fmt->iface, 0); > + if (err < 0) > + return err; > + > + mdelay(20); /* Delay needed after setting the interface */ > + > + switch(fmt->altsetting) { Put a space between switch and '('. Found in another patch, too. > + case 2: /* DSD mode requested */ > + err = snd_usb_ctl_msg(dev, usb_sndctrlpipe(dev, 0), 0, > + USB_DIR_OUT|USB_TYPE_VENDOR|USB_RECIP_INTERFACE, > + 1, 1, NULL, 0); > + if (err < 0) > + return err; > + break; > + case 1: /* PCM mode requested */ > + err = snd_usb_ctl_msg(dev, usb_sndctrlpipe(dev, 0), 0, > + USB_DIR_OUT|USB_TYPE_VENDOR|USB_RECIP_INTERFACE, > + 0, 1, NULL, 0); > + if (err < 0) > + return err; > + break; These two cases can combined one by passing fmt->altsetting-1 as the argument, right? thanks, Takashi ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 2/2] usb: Add mode select quirk for Denon/Marantz DACs 2014-11-28 13:51 ` Takashi Iwai @ 2014-11-28 16:08 ` Jurgen Kramer 0 siblings, 0 replies; 6+ messages in thread From: Jurgen Kramer @ 2014-11-28 16:08 UTC (permalink / raw) To: Takashi Iwai; +Cc: alsa-devel On Fri, 2014-11-28 at 14:51 +0100, Takashi Iwai wrote: > At Fri, 28 Nov 2014 14:04:31 +0100, > Jurgen Kramer wrote: > > > > Denon/Marantz USB DACs need a specific vendor command to switch between PCM and > > DSD mode. This patch adds a new quirk function to switch between the two modes > > using the specific USB vendor command. > > > > This patch applies to the following devices: > > - Marantz SA-14S1 > > - Marantz HD-DAC1 > > > > Signed-off-by: Jurgen Kramer <gtmkramer@xs4all.nl> > > --- > > sound/usb/pcm.c | 5 +++++ > > sound/usb/quirks.c | 42 ++++++++++++++++++++++++++++++++++++++++++ > > sound/usb/quirks.h | 3 +++ > > 3 files changed, 50 insertions(+) > > > > diff --git a/sound/usb/pcm.c b/sound/usb/pcm.c > > index c62a165..0d8aba5 100644 > > --- a/sound/usb/pcm.c > > +++ b/sound/usb/pcm.c > > @@ -482,6 +482,11 @@ static int set_format(struct snd_usb_substream *subs, struct audioformat *fmt) > > /* set interface */ > > if (subs->interface != fmt->iface || > > subs->altset_idx != fmt->altset_idx) { > > + > > + err = snd_usb_select_mode_quirk(subs, fmt); > > + if (err < 0) > > + return -EIO; > > + > > err = usb_set_interface(dev, fmt->iface, fmt->altsetting); > > if (err < 0) { > > dev_err(&dev->dev, > > diff --git a/sound/usb/quirks.c b/sound/usb/quirks.c > > index cc07388..40fb87f 100644 > > --- a/sound/usb/quirks.c > > +++ b/sound/usb/quirks.c > > @@ -1111,6 +1111,48 @@ void snd_usb_set_format_quirk(struct snd_usb_substream *subs, > > } > > } > > > > + > > +/* Marantz/Denon USB DACs need a vendor cmd to switch > > + * between PCM and native DSD mode */ > > +int snd_usb_select_mode_quirk(struct snd_usb_substream *subs, > > + struct audioformat *fmt) > > +{ > > + struct usb_device *dev = subs->dev; > > + int err; > > + > > + switch (subs->stream->chip->usb_id) { > > + case USB_ID(0x154e, 0x3005): /* Marantz HD-DAC1 */ > > + case USB_ID(0x154e, 0x3006): /* Marantz SA-14S1 */ > > + > > + /* First switch to alt set 0, otherwise the mode switch cmd > > + * will not be accepted by the DAC */ > > + err = usb_set_interface(dev, fmt->iface, 0); > > + if (err < 0) > > + return err; > > + > > + mdelay(20); /* Delay needed after setting the interface */ > > + > > + switch(fmt->altsetting) { > > Put a space between switch and '('. > Found in another patch, too. > > > + case 2: /* DSD mode requested */ > > + err = snd_usb_ctl_msg(dev, usb_sndctrlpipe(dev, 0), 0, > > + USB_DIR_OUT|USB_TYPE_VENDOR|USB_RECIP_INTERFACE, > > + 1, 1, NULL, 0); > > + if (err < 0) > > + return err; > > + break; > > + case 1: /* PCM mode requested */ > > + err = snd_usb_ctl_msg(dev, usb_sndctrlpipe(dev, 0), 0, > > + USB_DIR_OUT|USB_TYPE_VENDOR|USB_RECIP_INTERFACE, > > + 0, 1, NULL, 0); > > + if (err < 0) > > + return err; > > + break; > > These two cases can combined one by passing fmt->altsetting-1 as the > argument, right? > Thanks, will fix the missing spaces and use the fmt->altsetting-1 suggestion in v3. Jurgen ^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH v3 0/2] usb: Add native DSD support for Denon/Marantz @ 2014-11-28 16:32 Jurgen Kramer 2014-11-28 16:32 ` [PATCH 1/2] usb: Add native DSD support for Denon/Marantz DACs Jurgen Kramer 0 siblings, 1 reply; 6+ messages in thread From: Jurgen Kramer @ 2014-11-28 16:32 UTC (permalink / raw) To: alsa-devel; +Cc: Jurgen Kramer This patchset adds native DSD support for Denon/Marantz devices. A specific vendor command is needed to switch between PCM and DSD mode. This is implemented as a new quirk function. Changes from v2: - switch) -> switch ( - combine PCM and DSD mode select to a single USB ctrl msg Changes from v1: - fix compare in err check - remove unneeded brackets Jurgen Kramer (2): usb: Add native DSD support for Denon/Marantz DACs usb: Add mode select quirk for Denon/Marantz DACs sound/usb/pcm.c | 5 +++++ sound/usb/quirks.c | 47 +++++++++++++++++++++++++++++++++++++++++++++++ sound/usb/quirks.h | 3 +++ 3 files changed, 55 insertions(+) -- 1.9.3 ^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH 1/2] usb: Add native DSD support for Denon/Marantz DACs 2014-11-28 16:32 [PATCH v3 0/2] usb: Add native DSD support for Denon/Marantz Jurgen Kramer @ 2014-11-28 16:32 ` Jurgen Kramer 0 siblings, 0 replies; 6+ messages in thread From: Jurgen Kramer @ 2014-11-28 16:32 UTC (permalink / raw) To: alsa-devel; +Cc: Jurgen Kramer This patch adds native DSD support for the following devices: - Marantz SA-14S1 - Marants HD-DAC1 Signed-off-by: Jurgen Kramer <gtmkramer@xs4all.nl> --- sound/usb/quirks.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/sound/usb/quirks.c b/sound/usb/quirks.c index bc9ebb6..7cb75e6 100644 --- a/sound/usb/quirks.c +++ b/sound/usb/quirks.c @@ -1213,5 +1213,16 @@ u64 snd_usb_interface_dsd_format_quirks(struct snd_usb_audio *chip, break; } + /* Denon/Marantz devices with USB DAC functionality */ + switch (chip->usb_id) { + case USB_ID(0x154e, 0x3005): /* Marantz HD-DAC1 */ + case USB_ID(0x154e, 0x3006): /* Marantz SA-14S1 */ + if (fp->altsetting == 2) + return SNDRV_PCM_FMTBIT_DSD_U32_BE; + break; + default: + break; + } + return 0; } -- 1.9.3 ^ permalink raw reply related [flat|nested] 6+ messages in thread
end of thread, other threads:[~2014-11-28 16:33 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2014-11-28 13:04 [PATCH v2 0/2] usb: add native DSD support for Denon/Marantz Jurgen Kramer 2014-11-28 13:04 ` [PATCH 1/2] usb: Add native DSD support for Denon/Marantz DACs Jurgen Kramer 2014-11-28 13:04 ` [PATCH 2/2] usb: Add mode select quirk " Jurgen Kramer 2014-11-28 13:51 ` Takashi Iwai 2014-11-28 16:08 ` Jurgen Kramer -- strict thread matches above, loose matches on Subject: below -- 2014-11-28 16:32 [PATCH v3 0/2] usb: Add native DSD support for Denon/Marantz Jurgen Kramer 2014-11-28 16:32 ` [PATCH 1/2] usb: Add native DSD support for Denon/Marantz DACs Jurgen Kramer
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).