[alsa-devel] Help needed to develop quirks for USB Sound device for Roland Edirol PC-80 MIDI controller
Heloo I just bought a Roland Edirol PC-80 MIDI controller and found out that it was not supported on LINUX. I looked on the web and found the /usr/src/alsa/alsa-driver-xxx/usbquirks.h file to be the place to change some code to support it.
I have tried many things but I don't enough info to get it right once and for all.
Here is what I did :
{ /* PC-80 Wave */ USB_DEVICE(0x0582, 0x0092), .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { /* .vendor_name = "EDIROL", */ /* .product_name = "PC-80", */ .ifnum = QUIRK_ANY_INTERFACE, .type = QUIRK_COMPOSITE, .data = (const struct snd_usb_audio_quirk[]) { { .ifnum = 0, .type = QUIRK_AUDIO_EDIROL_UAXX }, { .ifnum = 1, .type = QUIRK_AUDIO_FIXED_ENDPOINT, .data = & (const struct audioformat) { .format = SNDRV_PCM_FORMAT_S24_3LE, .channels = 2, .iface = 0, .altsetting = 1, .altset_idx = 1, .attributes = 0, .endpoint = 0x81, .ep_attr = 0x01, .rates = SNDRV_PCM_RATE_CONTINUOUS, .rate_min = 48000, .rate_max = 48000, //(96?) } }, { .ifnum = 2, .type = QUIRK_MIDI_FIXED_ENDPOINT, .data = & (const struct snd_usb_midi_endpoint_info) { .out_cables = 0x0007, .in_cables = 0x0007 } }, { .ifnum = -1 } } }
What I got working is the audio out but cannot have the audio working.
Is there some resources somewhere that I could read to understand what I need to do?
Thank you, Alain Lauzon
-- To unsubscribe from this list: send the line "unsubscribe alsa-devel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Alain Lauzon wrote:
Heloo I just bought a Roland Edirol PC-80 MIDI controller and found out that it was not supported on LINUX.
Please show the output of "lsusb -v" for this device.
Best regards, Clemens -- To unsubscribe from this list: send the line "unsubscribe alsa-devel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Here is the part about Edirol: #lsusb -v
Bus 001 Device 014: ID 0582:0092 Roland Corp. EDIROL PC-80 WAVE Device Descriptor: bLength 18 bDescriptorType 1 bcdUSB 1.10 bDeviceClass 255 Vendor Specific Class bDeviceSubClass 0 bDeviceProtocol 255 bMaxPacketSize0 8 idVendor 0x0582 Roland Corp. idProduct 0x0092 EDIROL PC-80 WAVE bcdDevice 1.00 iManufacturer 1 EDIROL iProduct 2 PC-80 iSerial 0 bNumConfigurations 1 Configuration Descriptor: bLength 9 bDescriptorType 2 wTotalLength 59 bNumInterfaces 1 bConfigurationValue 1 iConfiguration 0 bmAttributes 0x80 (Bus Powered) MaxPower 100mA Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 0 bAlternateSetting 0 bNumEndpoints 0 bInterfaceClass 255 Vendor Specific Class bInterfaceSubClass 2 bInterfaceProtocol 0 iInterface 0 Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 0 bAlternateSetting 1 bNumEndpoints 1 bInterfaceClass 255 Vendor Specific Class bInterfaceSubClass 2 bInterfaceProtocol 0 iInterface 0 ** UNRECOGNIZED: 07 24 01 01 00 01 00 ** UNRECOGNIZED: 0b 24 02 01 02 03 18 01 00 77 01 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x01 EP 1 OUT bmAttributes 9 Transfer Type Isochronous Synch Type Adaptive Usage Type Data wMaxPacketSize 0x0258 1x 600 bytes bInterval 1 Device Status: 0x0001 Self Powered
Bus 001 Device 013: ID 0582:0093 Roland Corp. EDIROL PC-80 MIDI Device Descriptor: bLength 18 bDescriptorType 1 bcdUSB 1.10 bDeviceClass 255 Vendor Specific Class bDeviceSubClass 0 bDeviceProtocol 255 bMaxPacketSize0 64 idVendor 0x0582 Roland Corp. idProduct 0x0093 EDIROL PC-80 MIDI bcdDevice 1.00 iManufacturer 1 EDIROL iProduct 2 PC-80 iSerial 0 bNumConfigurations 1 Configuration Descriptor: bLength 9 bDescriptorType 2 wTotalLength 38 bNumInterfaces 1 bConfigurationValue 1 iConfiguration 0 bmAttributes 0x80 (Bus Powered) MaxPower 100mA Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 0 bAlternateSetting 0 bNumEndpoints 2 bInterfaceClass 255 Vendor Specific Class bInterfaceSubClass 3 bInterfaceProtocol 0 iInterface 0 ** UNRECOGNIZED: 06 24 f1 02 02 02 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x02 EP 2 OUT bmAttributes 2 Transfer Type Bulk Synch Type None Usage Type Data wMaxPacketSize 0x0040 1x 64 bytes bInterval 0 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x81 EP 1 IN bmAttributes 2 Transfer Type Bulk Synch Type None Usage Type Data wMaxPacketSize 0x0040 1x 64 bytes bInterval 0 Device Status: 0x0000 (Bus Powered)
Thanks, Alain Lauzon
Le mercredi 16 décembre 2009 à 12:34 +0100, Clemens Ladisch a écrit :
Alain Lauzon wrote:
Heloo I just bought a Roland Edirol PC-80 MIDI controller and found out that it was not supported on LINUX.
Please show the output of "lsusb -v" for this device.
Best regards, Clemens
-- To unsubscribe from this list: send the line "unsubscribe alsa-devel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
(please don't top-post)
Alain Lauzon wrote:
Bus 001 Device 014: ID 0582:0092 Roland Corp. EDIROL PC-80 WAVE ... Bus 001 Device 013: ID 0582:0093 Roland Corp. EDIROL PC-80 MIDI ...
This is implemented as two logical devices, so it will show up as two ALSA sound cards.
You didn't show the descriptors for a full-duplex mode, so I'm assuming it works like with any other Roland device.
Please try the following quirk entries:
{ /* WAVE part only; see ID 0x0093 for MIDI */ USB_DEVICE(0x0582, 0x0092), .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { /* .vendor_name = "EDIROL", */ /* .product_name = "PC-80", */ .ifnum = QUIRK_ANY_INTERFACE, .type = QUIRK_COMPOSITE, .data = (const struct snd_usb_audio_quirk[]) { { .ifnum = 0, .type = QUIRK_AUDIO_STANDARD_INTERFACE }, { .ifnum = 1, .type = QUIRK_AUDIO_STANDARD_INTERFACE }, { .ifnum = -1 } } } }, { /* MIDI part only; see ID 0x0092 for WAVE */ USB_DEVICE(0x0582, 0x0093), .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { /* .vendor_name = "EDIROL", */ /* .product_name = "PC-80", */ .ifnum = 0, .type = QUIRK_MIDI_FIXED_ENDPOINT, .data = & (const struct snd_usb_midi_endpoint_info) { .out_cables = 0x0000, .in_cables = 0x0003, } } }, -- To unsubscribe from this list: send the line "unsubscribe alsa-devel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Le vendredi 18 décembre 2009 à 15:19 +0100, Clemens Ladisch a écrit :
(please don't top-post)
Alain Lauzon wrote:
Bus 001 Device 014: ID 0582:0092 Roland Corp. EDIROL PC-80 WAVE ... Bus 001 Device 013: ID 0582:0093 Roland Corp. EDIROL PC-80 MIDI ...
This is implemented as two logical devices, so it will show up as two ALSA sound cards.
You didn't show the descriptors for a full-duplex mode, so I'm assuming it works like with any other Roland device.
Please try the following quirk entries:
{ /* WAVE part only; see ID 0x0093 for MIDI */ USB_DEVICE(0x0582, 0x0092), .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { /* .vendor_name = "EDIROL", */ /* .product_name = "PC-80", */ .ifnum = QUIRK_ANY_INTERFACE, .type = QUIRK_COMPOSITE, .data = (const struct snd_usb_audio_quirk[]) { { .ifnum = 0, .type = QUIRK_AUDIO_STANDARD_INTERFACE }, { .ifnum = 1, .type = QUIRK_AUDIO_STANDARD_INTERFACE }, { .ifnum = -1 } } } }, { /* MIDI part only; see ID 0x0092 for WAVE */ USB_DEVICE(0x0582, 0x0093), .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { /* .vendor_name = "EDIROL", */ /* .product_name = "PC-80", */ .ifnum = 0, .type = QUIRK_MIDI_FIXED_ENDPOINT, .data = & (const struct snd_usb_midi_endpoint_info) { .out_cables = 0x0000, .in_cables = 0x0003, } } }, --
Thank you for your support Clemens.
I have tried your code and it gives me this: The MIDI works control works #1 and for the sound I see Analog stereo output and this works fine too. I don't see any imput from that device.
I have tried adding 2 more interfaces for the audio just to see what it would bring with this:
{ /* WAVE part only; see ID 0x0093 for MIDI */ USB_DEVICE(0x0582, 0x0092), .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { /* .vendor_name = "EDIROL", */ /* .product_name = "PC-80", */ .ifnum = QUIRK_ANY_INTERFACE, .type = QUIRK_COMPOSITE, .data = (const struct snd_usb_audio_quirk[]) { { .ifnum = 0, .type = QUIRK_AUDIO_STANDARD_INTERFACE }, { .ifnum = 1, .type = QUIRK_AUDIO_STANDARD_INTERFACE }, { .ifnum = 2, .type = QUIRK_AUDIO_STANDARD_INTERFACE }, { .ifnum = 3, .type = QUIRK_AUDIO_STANDARD_INTERFACE }, { .ifnum = -1 } } } }, { /* MIDI part only; see ID 0x0092 for WAVE */ USB_DEVICE(0x0582, 0x0093), .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { /* .vendor_name = "EDIROL", */ /* .product_name = "PC-80", */ .ifnum = 0, .type = QUIRK_MIDI_FIXED_ENDPOINT, .data = & (const struct snd_usb_midi_endpoint_info) { .out_cables = 0x0000, .in_cables = 0x0003, } } },
What I've got is that MIDI control works just as good, but I now have two audio, namely "Analog Stereo Output" and "Digital Stereo Duplex (IEC958)" and they both work good as audio out. I still don't have any audio input device. I should have one since there are two entries on the back of my Edirol PC-80 that accepts either a microphone or a guitar. So I should be able to relay those audio inputs to my computer through my USB connection, right?
Thanks, Alain Lauzon
-- To unsubscribe from this list: send the line "unsubscribe alsa-devel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Le vendredi 18 décembre 2009 à 15:19 +0100, Clemens Ladisch a écrit :
(please don't top-post)
Alain Lauzon wrote:
Bus 001 Device 014: ID 0582:0092 Roland Corp. EDIROL PC-80 WAVE ... Bus 001 Device 013: ID 0582:0093 Roland Corp. EDIROL PC-80 MIDI ...
This is implemented as two logical devices, so it will show up as two ALSA sound cards.
You didn't show the descriptors for a full-duplex mode, so I'm assuming it works like with any other Roland device.
Please try the following quirk entries:
{ /* WAVE part only; see ID 0x0093 for MIDI */ USB_DEVICE(0x0582, 0x0092), .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { /* .vendor_name = "EDIROL", */ /* .product_name = "PC-80", */ .ifnum = QUIRK_ANY_INTERFACE, .type = QUIRK_COMPOSITE, .data = (const struct snd_usb_audio_quirk[]) { { .ifnum = 0, .type = QUIRK_AUDIO_STANDARD_INTERFACE }, { .ifnum = 1, .type = QUIRK_AUDIO_STANDARD_INTERFACE }, { .ifnum = -1 } } } }, { /* MIDI part only; see ID 0x0092 for WAVE */ USB_DEVICE(0x0582, 0x0093), .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { /* .vendor_name = "EDIROL", */ /* .product_name = "PC-80", */ .ifnum = 0, .type = QUIRK_MIDI_FIXED_ENDPOINT, .data = & (const struct snd_usb_midi_endpoint_info) { .out_cables = 0x0000, .in_cables = 0x0003, } } }, --
Another question I have is is there a way to modify the quirk and try it without having to reboot my computer? I have tried restarting ALSA but it was not giving me the changes so I keep rebooting my computer with every try I do on the quirks file.
Alain Lauzon
-- To unsubscribe from this list: send the line "unsubscribe alsa-devel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
participants (2)
-
Alain Lauzon
-
Clemens Ladisch