diff mbox series

quirk for Pioneer DJ DJM-250MK2 usb sound card

Message ID e1e0dbc4-7fd0-ac7a-9b15-1f89172257e5@frantovo.cz (mailing list archive)
State New, archived
Headers show
Series quirk for Pioneer DJ DJM-250MK2 usb sound card | expand

Commit Message

František Kučera Feb. 24, 2020, 4:29 p.m. UTC
Hello,

I have created a quirk that adds support for the Pioneer DJ DJM-250MK2 mixer (acts like a USB sound card, but Vendor Specific Class).

Output (from computer to card) is working: 8 channels, 48 000 Hz, S24_3LE.

Input is not working. I tried, but I was unable to make it working even under an officially supported OS with Pioneer drivers - Audacity or Mixxx see the channels, but there is no signal. It probably works only with Pioneer proprietary application. But I hope that even mere output support will be useful for someone. (it is usable for playback, just not for DVS)

Franta

Signed-off-by: František Kučera <franta-linux@frantovo.cz>
---
 sound/usb/quirks-table.h | 42 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 42 insertions(+)

Comments

František Kučera March 4, 2020, 4:03 p.m. UTC | #1
Dne 24. 02. 20 v 17:29 František Kučera napsal(a):
> Hello,
>
> I have created a quirk that adds support for the Pioneer DJ DJM-250MK2 mixer (acts like a USB sound card, but Vendor Specific Class).
>
> Output (from computer to card) is working: 8 channels, 48 000 Hz, S24_3LE.
>
> Input is not working. I tried, but I was unable to make it working even under an officially supported OS with Pioneer drivers - Audacity or Mixxx see the channels, but there is no signal. It probably works only with Pioneer proprietary application. But I hope that even mere output support will be useful for someone. (it is usable for playback, just not for DVS)
>
> Franta
>
> Signed-off-by: František Kučera <franta-linux@frantovo.cz>
> ---
>  sound/usb/quirks-table.h | 42 ++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 42 insertions(+)
>
> diff --git a/sound/usb/quirks-table.h b/sound/usb/quirks-table.h
> index d187aa6d50db..dcaf9eed9a41 100644
> --- a/sound/usb/quirks-table.h
> +++ b/sound/usb/quirks-table.h
> @@ -3592,5 +3592,47 @@ AU0828_DEVICE(0x2040, 0x7270, "Hauppauge", "HVR-950Q"),
>                 }
>         }
>  },
> +{
> +       /*
> +        * Pioneer DJ DJM-250MK2
> +        * PCM is 8 channels out @ 48 fixed (endpoints 0x01).
> +        * The output from computer to the mixer is usable.
> +        *
> +        * The input (phono or line to computer) is not working.
> +        * It should be at endpoint 0x82 and probably also 8 channels,
> +        * but it seems that it works only with Pioneer proprietary software.
> +        * Even on officially supported OS, the Audacity was unable to record
> +        * and Mixxx to recognize the control vinyls.
> +        */
> +       USB_DEVICE_VENDOR_SPEC(0x2b73, 0x0017),
> +       .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
> +               .ifnum = QUIRK_ANY_INTERFACE,
> +               .type = QUIRK_COMPOSITE,
> +               .data = (const struct snd_usb_audio_quirk[]) {
> +                       {
> +                               .ifnum = 0,
> +                               .type = QUIRK_AUDIO_FIXED_ENDPOINT,
> +                               .data = &(const struct audioformat) {
> +                                       .formats = SNDRV_PCM_FMTBIT_S24_3LE,
> +                                       .channels = 8, // outputs
> +                                       .iface = 0,
> +                                       .altsetting = 1,
> +                                       .altset_idx = 1,
> +                                       .endpoint = 0x01,
> +                                       .ep_attr = USB_ENDPOINT_XFER_ISOC|
> +                                               USB_ENDPOINT_SYNC_ASYNC,
> +                                       .rates = SNDRV_PCM_RATE_48000,
> +                                       .rate_min = 48000,
> +                                       .rate_max = 48000,
> +                                       .nr_rates = 1,
> +                                       .rate_table = (unsigned int[]) { 48000 }
> +                               }
> +                       },
> +                       {
> +                               .ifnum = -1
> +                       }
> +               }
> +       }
> +},
>  
>  #undef USB_DEVICE_VENDOR_SPEC
>
Can anyone review this patch please?

Franta
Jaroslav Kysela March 26, 2020, 9:20 a.m. UTC | #2
Dne 04. 03. 20 v 17:03 František Kučera napsal(a):
> Dne 24. 02. 20 v 17:29 František Kučera napsal(a):
>> Hello,
>>
>> I have created a quirk that adds support for the Pioneer DJ DJM-250MK2 mixer (acts like a USB sound card, but Vendor Specific Class).
>>
>> Output (from computer to card) is working: 8 channels, 48 000 Hz, S24_3LE.
>>
>> Input is not working. I tried, but I was unable to make it working even under an officially supported OS with Pioneer drivers - Audacity or Mixxx see the channels, but there is no signal. It probably works only with Pioneer proprietary application. But I hope that even mere output support will be useful for someone. (it is usable for playback, just not for DVS)
>>
>> Franta
>>
>> Signed-off-by: František Kučera <franta-linux@frantovo.cz>
>> ---
>>   sound/usb/quirks-table.h | 42 ++++++++++++++++++++++++++++++++++++++++++
>>   1 file changed, 42 insertions(+)
>>
>> diff --git a/sound/usb/quirks-table.h b/sound/usb/quirks-table.h
>> index d187aa6d50db..dcaf9eed9a41 100644
>> --- a/sound/usb/quirks-table.h
>> +++ b/sound/usb/quirks-table.h
>> @@ -3592,5 +3592,47 @@ AU0828_DEVICE(0x2040, 0x7270, "Hauppauge", "HVR-950Q"),
>>                  }
>>          }
>>   },
>> +{
>> +       /*
>> +        * Pioneer DJ DJM-250MK2
>> +        * PCM is 8 channels out @ 48 fixed (endpoints 0x01).
>> +        * The output from computer to the mixer is usable.
>> +        *
>> +        * The input (phono or line to computer) is not working.
>> +        * It should be at endpoint 0x82 and probably also 8 channels,
>> +        * but it seems that it works only with Pioneer proprietary software.
>> +        * Even on officially supported OS, the Audacity was unable to record
>> +        * and Mixxx to recognize the control vinyls.
>> +        */
>> +       USB_DEVICE_VENDOR_SPEC(0x2b73, 0x0017),
>> +       .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
>> +               .ifnum = QUIRK_ANY_INTERFACE,
>> +               .type = QUIRK_COMPOSITE,
>> +               .data = (const struct snd_usb_audio_quirk[]) {
>> +                       {
>> +                               .ifnum = 0,
>> +                               .type = QUIRK_AUDIO_FIXED_ENDPOINT,
>> +                               .data = &(const struct audioformat) {
>> +                                       .formats = SNDRV_PCM_FMTBIT_S24_3LE,
>> +                                       .channels = 8, // outputs
>> +                                       .iface = 0,
>> +                                       .altsetting = 1,
>> +                                       .altset_idx = 1,
>> +                                       .endpoint = 0x01,
>> +                                       .ep_attr = USB_ENDPOINT_XFER_ISOC|
>> +                                               USB_ENDPOINT_SYNC_ASYNC,
>> +                                       .rates = SNDRV_PCM_RATE_48000,
>> +                                       .rate_min = 48000,
>> +                                       .rate_max = 48000,
>> +                                       .nr_rates = 1,
>> +                                       .rate_table = (unsigned int[]) { 48000 }
>> +                               }
>> +                       },
>> +                       {
>> +                               .ifnum = -1
>> +                       }
>> +               }
>> +       }
>> +},
>>   
>>   #undef USB_DEVICE_VENDOR_SPEC
>>
> Can anyone review this patch please?

Takashi, could you put this patch to sound-next ? A partial support is better 
than no support.

						Jaroslav
Takashi Iwai March 26, 2020, 9:29 a.m. UTC | #3
On Thu, 26 Mar 2020 10:20:39 +0100,
Jaroslav Kysela wrote:
> 
> Dne 04. 03. 20 v 17:03 František Kučera napsal(a):
> > Dne 24. 02. 20 v 17:29 František Kučera napsal(a):
> >> Hello,
> >>
> >> I have created a quirk that adds support for the Pioneer DJ DJM-250MK2 mixer (acts like a USB sound card, but Vendor Specific Class).
> >>
> >> Output (from computer to card) is working: 8 channels, 48 000 Hz, S24_3LE.
> >>
> >> Input is not working. I tried, but I was unable to make it working even under an officially supported OS with Pioneer drivers - Audacity or Mixxx see the channels, but there is no signal. It probably works only with Pioneer proprietary application. But I hope that even mere output support will be useful for someone. (it is usable for playback, just not for DVS)
> >>
> >> Franta
> >>
> >> Signed-off-by: František Kučera <franta-linux@frantovo.cz>
> >> ---
> >>   sound/usb/quirks-table.h | 42 ++++++++++++++++++++++++++++++++++++++++++
> >>   1 file changed, 42 insertions(+)
> >>
> >> diff --git a/sound/usb/quirks-table.h b/sound/usb/quirks-table.h
> >> index d187aa6d50db..dcaf9eed9a41 100644
> >> --- a/sound/usb/quirks-table.h
> >> +++ b/sound/usb/quirks-table.h
> >> @@ -3592,5 +3592,47 @@ AU0828_DEVICE(0x2040, 0x7270, "Hauppauge", "HVR-950Q"),
> >>                  }
> >>          }
> >>   },
> >> +{
> >> +       /*
> >> +        * Pioneer DJ DJM-250MK2
> >> +        * PCM is 8 channels out @ 48 fixed (endpoints 0x01).
> >> +        * The output from computer to the mixer is usable.
> >> +        *
> >> +        * The input (phono or line to computer) is not working.
> >> +        * It should be at endpoint 0x82 and probably also 8 channels,
> >> +        * but it seems that it works only with Pioneer proprietary software.
> >> +        * Even on officially supported OS, the Audacity was unable to record
> >> +        * and Mixxx to recognize the control vinyls.
> >> +        */
> >> +       USB_DEVICE_VENDOR_SPEC(0x2b73, 0x0017),
> >> +       .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
> >> +               .ifnum = QUIRK_ANY_INTERFACE,
> >> +               .type = QUIRK_COMPOSITE,
> >> +               .data = (const struct snd_usb_audio_quirk[]) {
> >> +                       {
> >> +                               .ifnum = 0,
> >> +                               .type = QUIRK_AUDIO_FIXED_ENDPOINT,
> >> +                               .data = &(const struct audioformat) {
> >> +                                       .formats = SNDRV_PCM_FMTBIT_S24_3LE,
> >> +                                       .channels = 8, // outputs
> >> +                                       .iface = 0,
> >> +                                       .altsetting = 1,
> >> +                                       .altset_idx = 1,
> >> +                                       .endpoint = 0x01,
> >> +                                       .ep_attr = USB_ENDPOINT_XFER_ISOC|
> >> +                                               USB_ENDPOINT_SYNC_ASYNC,
> >> +                                       .rates = SNDRV_PCM_RATE_48000,
> >> +                                       .rate_min = 48000,
> >> +                                       .rate_max = 48000,
> >> +                                       .nr_rates = 1,
> >> +                                       .rate_table = (unsigned int[]) { 48000 }
> >> +                               }
> >> +                       },
> >> +                       {
> >> +                               .ifnum = -1
> >> +                       }
> >> +               }
> >> +       }
> >> +},
> >>     #undef USB_DEVICE_VENDOR_SPEC
> >>
> > Can anyone review this patch please?
> 
> Takashi, could you put this patch to sound-next ? A partial support is
> better than no support.

František, could you resend the patch in a proper format?
The original post couldn't be applied via git-am, as it was
malformed.

Also, please try to adjust the subject line and the changelog text to
be suitable for merging to the tree.


thanks,

Takashi
Fabian Lesniak March 26, 2020, 10:03 a.m. UTC | #4
Hi František,

a few months ago, I was working on patches to support the DJM-900MK2
mixer. I guess they are using a similar format on this mixer, at least
your quirk is similar to mine. I did not submit these patches yet
because I could not figure out a proper way to support both input and
output. I'm not an expert on usb audio, but I'll share my thoughts. At
least on the 900MK2, both playback and recording use the same interface:

I:  If#= 0 Alt= 1 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=snd-usb-audio
E:  Ad=01(O) Atr=05(Isoc) MxPS=1024 Ivl=125us
E:  Ad=82(I) Atr=05(Isoc) MxPS=1024 Ivl=125us

Thus, I introduced a quirk with .ifnum=0 for both capture and playback.
The problem is that the device accepts sample rate change commands for
the capture endpoint 0x82 only. Both endpoints are then configured to
that sample rate. Contrary to that, snd-usb-audio expects that playback
and recording is on two independent interface that both accept sample
rate changes and can operate on different sample rates.

My first approach was introducing a quirk in sound/usb/clock.c,
set_sample_rate_v1(). The quirk rejected changes to the sample rate of
one interface when the other was already in use by returning EBUSY. This
did work only if the capture endpoint was started before playback, which
was not predictable when using pulseaudio. Can anyone help on that? Is
there a supported device which I can look at that only allows the same
sample rate on both endpoints?

Cheers

Fabian

Am 26.03.20 um 10:20 schrieb Jaroslav Kysela:
> Dne 04. 03. 20 v 17:03 František Kučera napsal(a):
>> Dne 24. 02. 20 v 17:29 František Kučera napsal(a):
>>> Hello,
>>>
>>> I have created a quirk that adds support for the Pioneer DJ
>>> DJM-250MK2 mixer (acts like a USB sound card, but Vendor Specific
>>> Class).
>>>
>>> Output (from computer to card) is working: 8 channels, 48 000 Hz,
>>> S24_3LE.
>>>
>>> Input is not working. I tried, but I was unable to make it working
>>> even under an officially supported OS with Pioneer drivers -
>>> Audacity or Mixxx see the channels, but there is no signal. It
>>> probably works only with Pioneer proprietary application. But I hope
>>> that even mere output support will be useful for someone. (it is
>>> usable for playback, just not for DVS)
>>>
>>> Franta
>>>
>>> Signed-off-by: František Kučera <franta-linux@frantovo.cz>
>>> ---
>>>   sound/usb/quirks-table.h | 42
>>> ++++++++++++++++++++++++++++++++++++++++++
>>>   1 file changed, 42 insertions(+)
>>>
>>> diff --git a/sound/usb/quirks-table.h b/sound/usb/quirks-table.h
>>> index d187aa6d50db..dcaf9eed9a41 100644
>>> --- a/sound/usb/quirks-table.h
>>> +++ b/sound/usb/quirks-table.h
>>> @@ -3592,5 +3592,47 @@ AU0828_DEVICE(0x2040, 0x7270, "Hauppauge",
>>> "HVR-950Q"),
>>>                  }
>>>          }
>>>   },
>>> +{
>>> +       /*
>>> +        * Pioneer DJ DJM-250MK2
>>> +        * PCM is 8 channels out @ 48 fixed (endpoints 0x01).
>>> +        * The output from computer to the mixer is usable.
>>> +        *
>>> +        * The input (phono or line to computer) is not working.
>>> +        * It should be at endpoint 0x82 and probably also 8 channels,
>>> +        * but it seems that it works only with Pioneer proprietary
>>> software.
>>> +        * Even on officially supported OS, the Audacity was unable
>>> to record
>>> +        * and Mixxx to recognize the control vinyls.
>>> +        */
>>> +       USB_DEVICE_VENDOR_SPEC(0x2b73, 0x0017),
>>> +       .driver_info = (unsigned long) &(const struct
>>> snd_usb_audio_quirk) {
>>> +               .ifnum = QUIRK_ANY_INTERFACE,
>>> +               .type = QUIRK_COMPOSITE,
>>> +               .data = (const struct snd_usb_audio_quirk[]) {
>>> +                       {
>>> +                               .ifnum = 0,
>>> +                               .type = QUIRK_AUDIO_FIXED_ENDPOINT,
>>> +                               .data = &(const struct audioformat) {
>>> +                                       .formats =
>>> SNDRV_PCM_FMTBIT_S24_3LE,
>>> +                                       .channels = 8, // outputs
>>> +                                       .iface = 0,
>>> +                                       .altsetting = 1,
>>> +                                       .altset_idx = 1,
>>> +                                       .endpoint = 0x01,
>>> +                                       .ep_attr =
>>> USB_ENDPOINT_XFER_ISOC|
>>> +                                              
>>> USB_ENDPOINT_SYNC_ASYNC,
>>> +                                       .rates = SNDRV_PCM_RATE_48000,
>>> +                                       .rate_min = 48000,
>>> +                                       .rate_max = 48000,
>>> +                                       .nr_rates = 1,
>>> +                                       .rate_table = (unsigned
>>> int[]) { 48000 }
>>> +                               }
>>> +                       },
>>> +                       {
>>> +                               .ifnum = -1
>>> +                       }
>>> +               }
>>> +       }
>>> +},
>>>     #undef USB_DEVICE_VENDOR_SPEC
>>>
>> Can anyone review this patch please?
>
> Takashi, could you put this patch to sound-next ? A partial support is
> better than no support.
>
>                         Jaroslav
>
diff mbox series

Patch

diff --git a/sound/usb/quirks-table.h b/sound/usb/quirks-table.h
index d187aa6d50db..dcaf9eed9a41 100644
--- a/sound/usb/quirks-table.h
+++ b/sound/usb/quirks-table.h
@@ -3592,5 +3592,47 @@  AU0828_DEVICE(0x2040, 0x7270, "Hauppauge", "HVR-950Q"),
                }
        }
 },
+{
+       /*
+        * Pioneer DJ DJM-250MK2
+        * PCM is 8 channels out @ 48 fixed (endpoints 0x01).
+        * The output from computer to the mixer is usable.
+        *
+        * The input (phono or line to computer) is not working.
+        * It should be at endpoint 0x82 and probably also 8 channels,
+        * but it seems that it works only with Pioneer proprietary software.
+        * Even on officially supported OS, the Audacity was unable to record
+        * and Mixxx to recognize the control vinyls.
+        */
+       USB_DEVICE_VENDOR_SPEC(0x2b73, 0x0017),
+       .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
+               .ifnum = QUIRK_ANY_INTERFACE,
+               .type = QUIRK_COMPOSITE,
+               .data = (const struct snd_usb_audio_quirk[]) {
+                       {
+                               .ifnum = 0,
+                               .type = QUIRK_AUDIO_FIXED_ENDPOINT,
+                               .data = &(const struct audioformat) {
+                                       .formats = SNDRV_PCM_FMTBIT_S24_3LE,
+                                       .channels = 8, // outputs
+                                       .iface = 0,
+                                       .altsetting = 1,
+                                       .altset_idx = 1,
+                                       .endpoint = 0x01,
+                                       .ep_attr = USB_ENDPOINT_XFER_ISOC|
+                                               USB_ENDPOINT_SYNC_ASYNC,
+                                       .rates = SNDRV_PCM_RATE_48000,
+                                       .rate_min = 48000,
+                                       .rate_max = 48000,
+                                       .nr_rates = 1,
+                                       .rate_table = (unsigned int[]) { 48000 }
+                               }
+                       },
+                       {
+                               .ifnum = -1
+                       }
+               }
+       }
+},
 
 #undef USB_DEVICE_VENDOR_SPEC