RME Digiface USB

Has anyone already experience with the RME Digiface USB Interface under Linux?
I have ordered one and am looking for a long time no longer sure whether it runs under Linux / Ardour properly.

Hopefully I do not have to switch to Windows or MacOS because of the drivers.

It runs in class compliant mode.

Good to hear.
I am looking forward to the 32 inputs and 34 outputs and will report on the result here.
Thank you

please do post your experience with the digiface USB. this interface is exactly what I need for my audio work, but only if it works under Linux. I emailed RME about it and they just gave me a one-line response saying that it does not operate in class compliant mode, despite the mode being referenced in the manual…

anyway, not sure if class compliant mode isn’t fully functional, or if they just don’t want to support it… either way, would really appreciate a report :slight_smile:

@gabeos: RME told you the truth.

Unfortunately the interface under Linux is not recognized.
Bus 001 Device 007: ID 2a39: 3fa0

I will probably have to change my operating system …

Can anyone tell me which organization I need to contact to get a Linux driver for the RME Digiface USB in the near future?

Somehow I do not find the right information and contacts.

Currently I’m using Ardor with this interface on MacOS which makes me very unhappy because it comes to xruns constantly.
I would really like to use Linux again, but I need this interface.

Thank you in advance for the help.

If there is no class compliant mode, then you would need to convince (a) RME to provide the specifications for writing a device to work in non-class compliant mode (b) find someone to write it. (a) is quite unlikely to happen based on past experience working with RME regarding their USB devices. Until it does, there is no point even thinking about (b).

My first question is, why is it causing xruns in OS X?

RME is known for rock solid drivers among other things, so if there are dropouts happening, something is wrong.

           Seablade

@paul

My impression is that they may be more open to it again now, at least based off the conversations I have had with the folks at their booths in various shows (Infocom etc.) but that may just be that there is a communication breakdown between US and EU operations and me being hopeful.

Seablade

I contacted RME Germany today and inform you as soon i get answer.

update:

Sorry because it is so late.
On the part of RME I was informed that a driver for Linux is neither planned nor planned for the future. Regarding a provision of appropriate data for a programmer who could write the driver was unfortunately unresponsive.

It is a pity that here is not a very small group of users banned by a supplier of high quality hardware.

But probably nothing will change.

Personally, I have completed with RME.
The products are out of the question for me.

The decisive answer:
“You can not find another provider that provides 32/34 channels over USB”

Should this statement actually force me to switch to MS or Apple?
NO WAY!

Is the audio pass through class compliant? Isn’t the drivers needed to run the configuration utility, which only works in Windows?

If that’s the case, run a windows VM and pass the USB through, to configure and save? And use Linux and ardour for the main utility?

The Digiface USB is not class compliant like some other RME interfaces are.

mad-isd: Do you still have the device? Even though its not class compliant, can you please plug in the device to a GNU/Linux system and pastebin the output of :

sudo lsusb -vv -d 2a39:3fa0

It would be useful to see what the device looks like, as it might be an easy quirk to make the streaming work under Linux kernel.

sudo lsusb -vv -d 2a39:3fa0

Bus 001 Device 002: ID 2a39:3fa0 RME Digiface USB (24011373)
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 2.00
bDeviceClass 255 Vendor Specific Class
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x2a39
idProduct 0x3fa0
bcdDevice 3.01
iManufacturer 1 RME
iProduct 2 Digiface USB (24011373)
iSerial 3 8D1E6F5D942EBC8
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 0x006c
bNumInterfaces 3
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 224mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 255 Vendor Specific Class
bInterfaceSubClass 0
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 1
Transfer Type Isochronous
Synch Type None
Usage Type Data
wMaxPacketSize 0x0000 1x 0 bytes
bInterval 1
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 1
Transfer Type Isochronous
Synch Type None
Usage Type Data
wMaxPacketSize 0x0000 1x 0 bytes
bInterval 1
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 1
bNumEndpoints 2
bInterfaceClass 255 Vendor Specific Class
bInterfaceSubClass 0
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 1
Transfer Type Isochronous
Synch Type None
Usage Type Data
wMaxPacketSize 0x0380 1x 896 bytes
bInterval 1
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 1
Transfer Type Isochronous
Synch Type None
Usage Type Data
wMaxPacketSize 0x03e8 1x 1000 bytes
bInterval 1
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 1
bAlternateSetting 0
bNumEndpoints 3
bInterfaceClass 255 Vendor Specific Class
bInterfaceSubClass 0
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x83 EP 3 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0008 1x 8 bytes
bInterval 1
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x84 EP 4 IN
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0200 1x 512 bytes
bInterval 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x0b EP 11 OUT
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0200 1x 512 bytes
bInterval 0
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 2
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 255 Vendor Specific Class
bInterfaceSubClass 0
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x88 EP 8 IN
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0200 1x 512 bytes
bInterval 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x09 EP 9 OUT
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0200 1x 512 bytes
bInterval 0
Device Qualifier (for other device speed):
bLength 10
bDescriptorType 6
bcdUSB 2.00
bDeviceClass 255 Vendor Specific Class
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
bNumConfigurations 0
Device Status: 0x0000
(Bus Powered)

Hi,

I just saw your post and may have a usb quirk that could help, I don’t guarantee anything but it appears that the device has only one configuration for ISO streaming mode.

If this quirk produces some sound but is all static, you can try flipping _S24_3LE with _S24_3BE.

Good luck!

/* RME Digiface USB - UNTESTED */
{
	USB_DEVICE(0x2a39, 0x3fa0),
	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
		.vendor_name = "RME",
		.product_name = "DigifaceUSB",
		.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 = 32,
					.iface = 0,
					.altsetting = 1,
					.altset_idx = 1,
					.attributes = 0x1,
					.endpoint = 0x02,
					.ep_attr = USB_ENDPOINT_XFER_ISOC,
					.maxpacksize = 0x380,
					.rates = SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_48000,
					.rate_min = 44100,
					.rate_max = 48000,
					.nr_rates = 2,
					.rate_table = (unsigned int[]) {
						44100, 48000,
					}
				}
			},
			{
				.ifnum = 0,
				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
				.data = &(const struct audioformat) {
					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
					.channels = 34,
					.iface = 0,
					.altsetting = 1,
					.altset_idx = 1,
					.attributes = 0x1,
					.endpoint = 0x81,
					.ep_attr = USB_ENDPOINT_XFER_ISOC,
					.maxpacksize = 0x3e8,
					.rates = SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_48000,
					.rate_min = 44100,
					.rate_max = 48000,
					.nr_rates = 2,
					.rate_table = (unsigned int[]) {
						44100, 48000,
					}
				}
			},
			{
				.ifnum = -1
			}
		}
	}
}

where do i have to chance it and what?

Ahh, sorry, I wasn’t very clear. This is a quirk for the snd-usb-audio driver in the Linux kernel that may make the digiface appear as an ALSA sound card. To test it, you would need to get a copy of the linux kernel source code, edit the file sound/usb/quirks-table.h, adding the above quirk near the end of the file, and then compile your own kernel, (or at least that module). I don’t have the hardware, so I can only guess if it will work or not.