* [PATCH v2] ALSA: usb-audio: Re-add sample rate quirk for Pioneer DJM-750
@ 2021-01-24 18:42 Olivia Mackintosh
2021-01-24 20:50 ` Olivia Mackintosh
0 siblings, 1 reply; 2+ messages in thread
From: Olivia Mackintosh @ 2021-01-24 18:42 UTC (permalink / raw)
To: alsa-devel; +Cc: dmitry, franta-linux
Re-add the sample-rate quirk originally implemented by Dmitry
Panchenko for the DJM-900NXS2 but for the DJM-750. This commit only
adds it again for the DJM-750 since I can only verify that it is
absolutely required for this device. Other models may need this patch
but I'm hesitant to add them as I cannot test.
The 'wIndex' is passed literally in the function call as we cannot
derive this from 'fmt->sync_ep' due to it not being set. We can change
this if and when we revisit implicit FB.
Signed-off-by: Olivia Mackintosh <livvy@base.nu>
---
sound/usb/quirks.c | 20 ++++++++++++++++++++
1 file changed, 20 insertions(+)
diff --git a/sound/usb/quirks.c b/sound/usb/quirks.c
index e196e364cef1..b49a66f863f3 100644
--- a/sound/usb/quirks.c
+++ b/sound/usb/quirks.c
@@ -1470,6 +1470,23 @@ static void set_format_emu_quirk(struct snd_usb_substream *subs,
subs->pkt_offset_adj = (emu_samplerate_id >= EMU_QUIRK_SR_176400HZ) ? 4 : 0;
}
+static int pioneer_djm_set_format_quirk(struct snd_usb_substream *subs,
+ u16 windex)
+{
+ unsigned int cur_rate = subs->data_endpoint->cur_rate;
+ u8 sr[3];
+ // Convert to little endian
+ sr[0] = cur_rate&0xff;
+ sr[1] = (cur_rate>>8)&0xff;
+ sr[2] = (cur_rate>>16)&0xff;
+ usb_set_interface(subs->dev, 0, 1);
+ // we should derive windex from fmt-sync_ep but it's not set
+ snd_usb_ctl_msg(subs->stream->chip->dev,
+ usb_rcvctrlpipe(subs->stream->chip->dev, 0),
+ 0x01, 0x22, 0x0100, windex, &sr, 0x0003);
+ return 0;
+}
+
void snd_usb_set_format_quirk(struct snd_usb_substream *subs,
const struct audioformat *fmt)
{
@@ -1483,6 +1500,9 @@ void snd_usb_set_format_quirk(struct snd_usb_substream *subs,
case USB_ID(0x534d, 0x2109): /* MacroSilicon MS2109 */
subs->stream_offset_adj = 2;
break;
+ case USB_ID(0x08e4, 0x017f): /* Pioneer DJM-750 */
+ pioneer_djm_set_format_quirk(subs, 0x0086);
+ break;
}
}
--
2.30.0
^ permalink raw reply related [flat|nested] 2+ messages in thread* Re: [PATCH v2] ALSA: usb-audio: Re-add sample rate quirk for Pioneer DJM-750
2021-01-24 18:42 [PATCH v2] ALSA: usb-audio: Re-add sample rate quirk for Pioneer DJM-750 Olivia Mackintosh
@ 2021-01-24 20:50 ` Olivia Mackintosh
0 siblings, 0 replies; 2+ messages in thread
From: Olivia Mackintosh @ 2021-01-24 20:50 UTC (permalink / raw)
To: alsa-devel; +Cc: franta-linux
After dialogue with František Kučera I determined that this was
(originally) removed in 87cb9af9f8a2 in favour of using the UAC1 sample
rate setup function. Between that commit and removing the implicit FB
in 532a208ad610, there seems to have either been a regression or it was
never working in the first-place. It's hard for me to determine since
implicit FB never worked for the DJM-750 so I cannot test 87cb9af9f8a2.
It should be noted that I'm still unsure if the DJM-750 is even
compliant to the spec in relation to setting the sample rate. If it is,
this should be fixed, otherwise I think we'll need this patch.
Hope that makes sense and I haven't created any unnecessary confusion.
Kind Regards,
Olivia
On Sun, Jan 24, 2021 at 06:42:09PM +0000, Olivia Mackintosh wrote:
> Re-add the sample-rate quirk originally implemented by Dmitry
> Panchenko for the DJM-900NXS2 but for the DJM-750. This commit only
> adds it again for the DJM-750 since I can only verify that it is
> absolutely required for this device. Other models may need this patch
> but I'm hesitant to add them as I cannot test.
>
> The 'wIndex' is passed literally in the function call as we cannot
> derive this from 'fmt->sync_ep' due to it not being set. We can change
> this if and when we revisit implicit FB.
>
> Signed-off-by: Olivia Mackintosh <livvy@base.nu>
> ---
> sound/usb/quirks.c | 20 ++++++++++++++++++++
> 1 file changed, 20 insertions(+)
>
> diff --git a/sound/usb/quirks.c b/sound/usb/quirks.c
> index e196e364cef1..b49a66f863f3 100644
> --- a/sound/usb/quirks.c
> +++ b/sound/usb/quirks.c
> @@ -1470,6 +1470,23 @@ static void set_format_emu_quirk(struct snd_usb_substream *subs,
> subs->pkt_offset_adj = (emu_samplerate_id >= EMU_QUIRK_SR_176400HZ) ? 4 : 0;
> }
>
> +static int pioneer_djm_set_format_quirk(struct snd_usb_substream *subs,
> + u16 windex)
> +{
> + unsigned int cur_rate = subs->data_endpoint->cur_rate;
> + u8 sr[3];
> + // Convert to little endian
> + sr[0] = cur_rate&0xff;
> + sr[1] = (cur_rate>>8)&0xff;
> + sr[2] = (cur_rate>>16)&0xff;
> + usb_set_interface(subs->dev, 0, 1);
> + // we should derive windex from fmt-sync_ep but it's not set
> + snd_usb_ctl_msg(subs->stream->chip->dev,
> + usb_rcvctrlpipe(subs->stream->chip->dev, 0),
> + 0x01, 0x22, 0x0100, windex, &sr, 0x0003);
> + return 0;
> +}
> +
> void snd_usb_set_format_quirk(struct snd_usb_substream *subs,
> const struct audioformat *fmt)
> {
> @@ -1483,6 +1500,9 @@ void snd_usb_set_format_quirk(struct snd_usb_substream *subs,
> case USB_ID(0x534d, 0x2109): /* MacroSilicon MS2109 */
> subs->stream_offset_adj = 2;
> break;
> + case USB_ID(0x08e4, 0x017f): /* Pioneer DJM-750 */
> + pioneer_djm_set_format_quirk(subs, 0x0086);
> + break;
> }
> }
>
> --
> 2.30.0
>
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2021-01-24 20:51 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-01-24 18:42 [PATCH v2] ALSA: usb-audio: Re-add sample rate quirk for Pioneer DJM-750 Olivia Mackintosh
2021-01-24 20:50 ` Olivia Mackintosh
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.