Boss RC-300 loopstation (no audio)

Talk about your MIDI interfaces, microphones, keyboards...

Moderators: khz, MattKingUSA

ohli
Established Member
Posts: 9
Joined: Tue Jan 02, 2018 12:40 pm

Re: Boss RC-300 loopstation (no audio)

Post by ohli »

Permanent solution

Well, this depends on your distro ("your installation") etc. AFAIK you would have to recompile your kernel on every kernel update.
Maybe something advanced like kernel live patching, not worth the effort...

For my setup I just compiled the kernel with the patch included, gave it another name and boot it when I need it.
Otherwise I use the Arch standard kernel
roland_pcm.patch.tar
More info: https://wiki.archlinux.org/index.php/Ke ... ompilation

Kernel

Short version: The "bad fix" occured the first time with Linux 3.11-rc1, so you should be safe with Kernel 3.10 and below.

I had a look at the kernel commits:
The one regarding the "half-decent workaround"

Code: Select all

commit ba7c2be114243fa4cfcbc66a81db18e1d55abf4b
Author: Clemens Ladisch <clemens@ladisch.de>
Date:   Sun Feb 3 22:31:20 2013 +0100

    ALSA: usb-audio: detect implicit feedback on Roland devices
    
    All the Roland/Edirol/BOSS USB audio devices that need implicit feedback
    show this unambiguously in their descriptors, so it might be a good idea
    to let the driver detect this.
    
    This should make playback work correctly (at least with Jack) withour  the
    following devices:
    - BOSS GT-100
    - BOSS JS-8 Jam Station
    - Edirol M-16DX
    - Roland GAIA SH-01
    
    Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Followed by another one to support even more Roland devices (namely the BOSS RC-300!)

Code: Select all

commit aafe77cc45a595ca1d4536f2412ddf671ea9108c
Author: Clemens Ladisch <clemens@ladisch.de>
Date:   Sun Mar 31 23:43:12 2013 +0200

    ALSA: usb-audio: add support for many Roland/Yamaha devices
    
    Add quirks to detect the various vendor-specific descriptors used by
    Roland and Yamaha in most of their recent USB audio and MIDI devices.
    
    Together with the previous patch, this should add audio/MIDI support for
    the following USB devices:
    - Edirol motion dive .tokyo performance package
    - Roland MC-808 Synthesizer
    - Roland BK-7m Synthesizer
    - Roland VIMA JM-5/8 Synthesizer
    - Roland SP-555 Sequencer
    - Roland V-Synth GT Synthesizer
    - Roland Music Atelier AT-75/100/300/350C/500/800/900/900C Organ
    - Edirol V-Mixer M-200i/300/380/400/480/R-1000
    - BOSS GT-10B Effects Processor
    - Roland Fantom G6/G7/G8 Keyboard
    - Cakewalk Sonar V-Studio 20/100/700 Audio Interface
    - Roland GW-8 Keyboard
    - Roland AX-Synth Keyboard
    - Roland JUNO-Di/STAGE/Gi Keyboard
    - Roland VB-99 Effects Processor
    - Cakewalk UM-2G MIDI Interface
    - Roland A-500S Keyboard
    - Roland SD-50 Synthesizer
    - Roland OCTAPAD SPD-30 Controller
    - Roland Lucina AX-09 Synthesizer
    - BOSS BR-800 Digital Recorder
    - Roland DUO/TRI-CAPTURE (EX) Audio Interface
    - BOSS RC-300 Loop Station
    - Roland JUPITER-50/80 Keyboard
    - Roland R-26 Recorder
    - Roland SPD-SX Controller
    - BOSS JS-10 Audio Player
    - Roland TD-11/15/30 Drum Module
    - Roland A-49/88 Keyboard
    - Roland INTEGRA-7 Synthesizer
    - Roland R-88 Recorder
    
    Signed-off-by: Clemens Ladisch <clemens@ladisch.de>

You do not have the required permissions to view the files attached to this post.
Last edited by ohli on Thu Jan 04, 2018 10:49 pm, edited 1 time in total.
Ardour + Arch = <3

My band: https://crimsonrain.de/

Jack Winter
Established Member
Posts: 381
Joined: Sun May 28, 2017 3:52 pm

Re: Boss RC-300 loopstation (no audio)

Post by Jack Winter »

ohli wrote:In other words: what would be the best way to report our (better: your) findings to someone who is capable of fixing this?
The alsa-devel mailing list http://mailman.alsa-project.org/mailman ... alsa-devel would IMO be the best place to report it.
Reaper/KDE/Archlinux. i7-2600k/16GB + i7-4700HQ/16GB, RME Multiface/Babyface, Behringer X32, WA273-EQ, 2 x WA-412, ADL-600, Tegeler TRC, etc 8) For REAPER on Linux information: https://wiki.cockos.com/wiki/index.php/REAPER_for_Linux

dal
Posts: 2
Joined: Tue Apr 09, 2019 7:02 pm

Re: Boss RC-300 loopstation (no audio)

Post by dal »

Did anything more come of this? I read in the thread that this was an ugly workaround and not a real fix that can be committed upstream.

I have a Roland Boutique SL-01a with the same type of issues.
Have not tried this patch yet so not sure if it works for me but it looks very similar as the device shows up in the system correctly already.

Code: Select all

$ dmesg
-- snip --
usb 1-1: Unable to change format on ep #8e: already in use
usb 1-1: Unable to change format on ep #8e: already in use
usb 1-1: Unable to change format on ep #8e: already in use
a million more of these :(

Code: Select all

$ lsusb -v -d 0582:01fd
Bus 001 Device 005: ID 0582:01fd Roland Corp. 
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.00
  bDeviceClass          255 Vendor Specific Class
  bDeviceSubClass         0 
  bDeviceProtocol       255 
  bMaxPacketSize0        64
  idVendor           0x0582 Roland Corp.
  idProduct          0x01fd 
  bcdDevice            1.00
  iManufacturer           1 Roland
  iProduct                2 Boutique
  iSerial                 3 BQSH332DDA054B5533322C0B0B43
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength          270
    bNumInterfaces          4
    bConfigurationValue     1
    iConfiguration          0 
    bmAttributes         0x80
      (Bus Powered)
    MaxPower              500mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           0
      bInterfaceClass       255 Vendor Specific Class
      bInterfaceSubClass    255 Vendor Specific Subclass
      bInterfaceProtocol      0 
      iInterface              0 
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        1
      bAlternateSetting       0
      bNumEndpoints           0
      bInterfaceClass       255 Vendor Specific Class
      bInterfaceSubClass      2 
      bInterfaceProtocol      2 
      iInterface              0 
      ** UNRECOGNIZED:  06 24 f1 01 00 00
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        1
      bAlternateSetting       1
      bNumEndpoints           1
      bInterfaceClass       255 Vendor Specific Class
      bInterfaceSubClass      2 
      bInterfaceProtocol      2 
      iInterface              0 
      ** UNRECOGNIZED:  07 24 01 01 00 01 00
      ** UNRECOGNIZED:  0b 24 02 01 02 04 18 01 44 ac 00
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x0d  EP 13 OUT
        bmAttributes            5
          Transfer Type            Isochronous
          Synch Type               Asynchronous
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               1
        INTERFACE CLASS:  06 24 f1 04 12 00
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        1
      bAlternateSetting       2
      bNumEndpoints           1
      bInterfaceClass       255 Vendor Specific Class
      bInterfaceSubClass      2 
      bInterfaceProtocol      2 
      iInterface              0 
      ** UNRECOGNIZED:  07 24 01 01 00 01 00
      ** UNRECOGNIZED:  0b 24 02 01 02 04 18 01 44 ac 00
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x0d  EP 13 OUT
        bmAttributes            5
          Transfer Type            Isochronous
          Synch Type               Asynchronous
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               1
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        2
      bAlternateSetting       0
      bNumEndpoints           0
      bInterfaceClass       255 Vendor Specific Class
      bInterfaceSubClass      2 
      bInterfaceProtocol      1 
      iInterface              0 
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        2
      bAlternateSetting       1
      bNumEndpoints           1
      bInterfaceClass       255 Vendor Specific Class
      bInterfaceSubClass      2 
      bInterfaceProtocol      1 
      iInterface              0 
      ** UNRECOGNIZED:  07 24 01 07 00 01 00
      ** UNRECOGNIZED:  0b 24 02 01 02 04 18 01 44 ac 00
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x8e  EP 14 IN
        bmAttributes           37
          Transfer Type            Isochronous
          Synch Type               Asynchronous
          Usage Type               Implicit feedback Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               1
        INTERFACE CLASS:  06 24 f1 04 12 00
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        2
      bAlternateSetting       2
      bNumEndpoints           1
      bInterfaceClass       255 Vendor Specific Class
      bInterfaceSubClass      2 
      bInterfaceProtocol      1 
      iInterface              0 
      ** UNRECOGNIZED:  07 24 01 07 00 01 00
      ** UNRECOGNIZED:  0b 24 02 01 02 04 18 01 44 ac 00
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x8e  EP 14 IN
        bmAttributes           37
          Transfer Type            Isochronous
          Synch Type               Asynchronous
          Usage Type               Implicit feedback Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               1
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        3
      bAlternateSetting       0
      bNumEndpoints           2
      bInterfaceClass       255 Vendor Specific Class
      bInterfaceSubClass      3 
      bInterfaceProtocol      0 
      iInterface              0 
      ** UNRECOGNIZED:  06 24 f1 02 01 01
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x03  EP 3 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 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
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        3
      bAlternateSetting       1
      bNumEndpoints           2
      bInterfaceClass       255 Vendor Specific Class
      bInterfaceSubClass      3 
      bInterfaceProtocol      0 
      iInterface              0 
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x03  EP 3 OUT
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               4
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x85  EP 5 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               4
Device Qualifier (for other device speed):
  bLength                10
  bDescriptorType         6
  bcdUSB               2.00
  bDeviceClass          255 Vendor Specific Class
  bDeviceSubClass         0 
  bDeviceProtocol       255 
  bMaxPacketSize0        64
  bNumConfigurations      1
Device Status:     0x0000
  (Bus Powered)


dal
Posts: 2
Joined: Tue Apr 09, 2019 7:02 pm

Re: Boss RC-300 loopstation (no audio)

Post by dal »

Has there been any further developments with this? I've read that the patch here is an ugly hack and not suited for upstreaming. Also there was no response on the alsa-devel list.

My Roland Boutique SL-01a seems to have a very similar issue. Have not tried if this solves it yet just wanted to know if there has been any news not posted here yet.

Code: Select all

$ uname -a
Linux KMB-PF12REG3 4.18.0-17-generic #18~18.04.1-Ubuntu SMP Fri Mar 15 15:27:12 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

$ dmesg
--snip--
[137852.731592] usb 1-1: new high-speed USB device number 6 using xhci_hcd
[137852.890319] usb 1-1: New USB device found, idVendor=0582, idProduct=01fd, bcdDevice= 1.00
[137852.890326] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[137852.890330] usb 1-1: Product: Boutique
[137852.890335] usb 1-1: Manufacturer: Roland
[137852.890339] usb 1-1: SerialNumber: BQSH332DDA054B5533322C0B0B43
[137853.615379] usb 1-1: Unable to change format on ep #8e: already in use
[137853.615461] usb 1-1: Unable to change format on ep #8e: already in use
[137853.615618] usb 1-1: Unable to change format on ep #8e: already in use
[137853.616443] usb 1-1: Unable to change format on ep #8e: already in use
[137853.617008] usb 1-1: Unable to change format on ep #8e: already in use
[137853.619453] usb 1-1: Unable to change format on ep #8e: already in use
[137853.619754] usb 1-1: Unable to change format on ep #8e: already in use

Code: Select all

$ sudo lsusb -v -d 0582:01fd

Bus 001 Device 006: ID 0582:01fd Roland Corp. 
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.00
  bDeviceClass          255 Vendor Specific Class
  bDeviceSubClass         0 
  bDeviceProtocol       255 
  bMaxPacketSize0        64
  idVendor           0x0582 Roland Corp.
  idProduct          0x01fd 
  bcdDevice            1.00
  iManufacturer           1 Roland
  iProduct                2 Boutique
  iSerial                 3 BQSH332DDA054B5533322C0B0B43
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength          270
    bNumInterfaces          4
    bConfigurationValue     1
    iConfiguration          0 
    bmAttributes         0x80
      (Bus Powered)
    MaxPower              500mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           0
      bInterfaceClass       255 Vendor Specific Class
      bInterfaceSubClass    255 Vendor Specific Subclass
      bInterfaceProtocol      0 
      iInterface              0 
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        1
      bAlternateSetting       0
      bNumEndpoints           0
      bInterfaceClass       255 Vendor Specific Class
      bInterfaceSubClass      2 
      bInterfaceProtocol      2 
      iInterface              0 
      ** UNRECOGNIZED:  06 24 f1 01 00 00
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        1
      bAlternateSetting       1
      bNumEndpoints           1
      bInterfaceClass       255 Vendor Specific Class
      bInterfaceSubClass      2 
      bInterfaceProtocol      2 
      iInterface              0 
      ** UNRECOGNIZED:  07 24 01 01 00 01 00
      ** UNRECOGNIZED:  0b 24 02 01 02 04 18 01 44 ac 00
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x0d  EP 13 OUT
        bmAttributes            5
          Transfer Type            Isochronous
          Synch Type               Asynchronous
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               1
        INTERFACE CLASS:  06 24 f1 04 12 00
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        1
      bAlternateSetting       2
      bNumEndpoints           1
      bInterfaceClass       255 Vendor Specific Class
      bInterfaceSubClass      2 
      bInterfaceProtocol      2 
      iInterface              0 
      ** UNRECOGNIZED:  07 24 01 01 00 01 00
      ** UNRECOGNIZED:  0b 24 02 01 02 04 18 01 44 ac 00
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x0d  EP 13 OUT
        bmAttributes            5
          Transfer Type            Isochronous
          Synch Type               Asynchronous
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               1
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        2
      bAlternateSetting       0
      bNumEndpoints           0
      bInterfaceClass       255 Vendor Specific Class
      bInterfaceSubClass      2 
      bInterfaceProtocol      1 
      iInterface              0 
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        2
      bAlternateSetting       1
      bNumEndpoints           1
      bInterfaceClass       255 Vendor Specific Class
      bInterfaceSubClass      2 
      bInterfaceProtocol      1 
      iInterface              0 
      ** UNRECOGNIZED:  07 24 01 07 00 01 00
      ** UNRECOGNIZED:  0b 24 02 01 02 04 18 01 44 ac 00
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x8e  EP 14 IN
        bmAttributes           37
          Transfer Type            Isochronous
          Synch Type               Asynchronous
          Usage Type               Implicit feedback Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               1
        INTERFACE CLASS:  06 24 f1 04 12 00
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        2
      bAlternateSetting       2
      bNumEndpoints           1
      bInterfaceClass       255 Vendor Specific Class
      bInterfaceSubClass      2 
      bInterfaceProtocol      1 
      iInterface              0 
      ** UNRECOGNIZED:  07 24 01 07 00 01 00
      ** UNRECOGNIZED:  0b 24 02 01 02 04 18 01 44 ac 00
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x8e  EP 14 IN
        bmAttributes           37
          Transfer Type            Isochronous
          Synch Type               Asynchronous
          Usage Type               Implicit feedback Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               1
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        3
      bAlternateSetting       0
      bNumEndpoints           2
      bInterfaceClass       255 Vendor Specific Class
      bInterfaceSubClass      3 
      bInterfaceProtocol      0 
      iInterface              0 
      ** UNRECOGNIZED:  06 24 f1 02 01 01
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x03  EP 3 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 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
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        3
      bAlternateSetting       1
      bNumEndpoints           2
      bInterfaceClass       255 Vendor Specific Class
      bInterfaceSubClass      3 
      bInterfaceProtocol      0 
      iInterface              0 
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x03  EP 3 OUT
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               4
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x85  EP 5 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               4
Device Qualifier (for other device speed):
  bLength                10
  bDescriptorType         6
  bcdUSB               2.00
  bDeviceClass          255 Vendor Specific Class
  bDeviceSubClass         0 
  bDeviceProtocol       255 
  bMaxPacketSize0        64
  bNumConfigurations      1
Device Status:     0x0000
  (Bus Powered)


ohli
Established Member
Posts: 9
Joined: Tue Jan 02, 2018 12:40 pm

Re: Boss RC-300 loopstation (no audio)

Post by ohli »

Hi dal and welcome to LinuxMusicians,

Thanks for sharing your knowledge. It seems very similar to the problems described here, so I guess you could do the same: just whitelist your usb device id.

Technically, I will have a closer look at why all the Roland USB devices got blacklisted in the first place. Furthermore it shouldn't be too hard to port my "dirty hack" to a kernel module, which eases further testing and saves time for kernel rebuilding.

Then I will try again to reach someone at the alsa mailing list. Here's my message from >1 year ago:
Dear Alsa-angels,

I hope I'm posting this to the right place.


I was not able to get my BOSS GT-1 running:

- uname -r
4.14.11-1-ARCH (occured on 4.14.10 as well)

- dmesg
...
usb 2-1: Unable to change format on ep #8e: already in use
...

- aplay -l
Karte 2: GT1 [GT-1], Gerät 0: USB Audio [USB Audio]
Sub-Geräte: 1/1
Sub-Gerät #0: subdevice #0

lsusb output attached


I found a dirty workaround there:
https://www.linuxmusicians.com/viewtopi ... =30#p83949

I added the USB ID of my device and it works (ALSA, PulseAudio, JACK).
This seems to work for the RC-300 loopstation and the Micro BR-80, too.

The affected code was changed with commit
ba7c2be114243fa4cfcbc66a81db18e1d55abf4b
about 4 years ago.

I only applied a simple patch without knowing what the reason for the
other Roland quirks were, so I just wanted to inform you about this issue.

I'm not sure what's missing at the moment, I'm no kernel developer (yet).

Thanks in advance! If you need more info, just tell me.
Ardour + Arch = <3

My band: https://crimsonrain.de/

Unicornblender
Established Member
Posts: 4
Joined: Thu Apr 18, 2019 1:11 am

Re: Boss RC-300 loopstation (no audio)

Post by Unicornblender »

I have just compiled kernel 5.1.7 (on Arch Linux) and has gotten my BOSS Micro BR-80 working perfectly. All I did was add the patch from ohli viewtopic.php?f=6&t=17180&p=107252#p89002. Had to tweak it a bit though, since it’s for kernel 4.10.

Pulseaudio can playback through the device now, jack server runs fine and all my DAWs pick up the input signal just as good as with my other usb audio interfaces.

The “quirks” thing seem to no longer be needed, I think part of the solution has already been added to the kernel. There has been a lot of rewriting and changes the the pcm.c file and it doesn’t look like the examples earlier in this thread. It took a while to figure out where to add the lines. The hardest part was to figure out that a lot of the earlier hacks people has used for Roland devices isn’t relevant any more. I still hope to see it working out of the box some time in the future.

Even though it is an old unit, It’s a neat little audio interface that fits in your pocket, which is why I was so desperate trying to make it work. My other interfaces are too bulky to carry around in my laptop back. And it has built COSM amp/effects which is just an extra little bonus. :mrgreen:

Maybe someone can use this info in the future.

Edit: Following this guide https://wiki.archlinux.org/index.php/Co ... nel_module, I have now patched and build it as a module instead. This time for kernel 5.1.8. It compiles in about 2 minutes and was actually quite easy. (A full kernel building takes about 6-7 hours on my slow laptop and it gets dangerously hot).
For all of you Roland/Boss guys out there that wants to stay on latest stable kernel and update your system regularly, but don't want to spend hours compiling a complete kerneltree every time, this is the way to go. You should be able to figure it out even if you are a "kernel-n00b" like me, or are using another distro that is not Arch.
There is no plan B..

szszoke
Established Member
Posts: 3
Joined: Wed Nov 28, 2018 8:04 am

Re: Boss RC-300 loopstation (no audio)

Post by szszoke »

I can confirm that the hacky workaround also works for the Boss Katana 100 amplifier. I tested it on Ubuntu 18.10 running kernel 4.18.0.

I had to add the code below to sound/usb/pcm.c:355

Code: Select all

	case USB_ID(0x0582, 0x01d8):
		return 0;

szszoke
Established Member
Posts: 3
Joined: Wed Nov 28, 2018 8:04 am

Re: Boss RC-300 loopstation (no audio)

Post by szszoke »

Drumfix wrote:UAAAH! No, this patch just a hack that hides the real problem. It is not a solution that should go upstream.
We have a related bug report in the Linux kernel, where a maintainer offered to apply a fix if I submit one but I don't know enough why can't we just submit this workaround.

Can you elaborate it here: https://bugzilla.kernel.org/show_bug.cgi?id=195223

Windraiders
Posts: 1
Joined: Sun Mar 29, 2020 9:41 pm

Re: Boss RC-300 loopstation (no audio)

Post by Windraiders »

Keeping the thread alive (Wakthrough and added hardware)

The "ugly hack" as drumfix calls it, also works in the Roland Boutiq series (at least for the jx03 module, I'll try it with other modules later and post the updates)

How I made it work (for linux mint 19)- eternal thanks to drumfix (mainly) and other forum members.

I'm quite a seasoned unix admin and I didn't find the instructions to be exhaustive or easy to follow, too many side sources to read, too many pieces to put together, a lot to adapt (not a critic to all those who put in their valuable time trying to help others -specially drumfix-, but even I was hesitant to try and do the change - true... seasoned admin and quite proficient at C programming, but not a lot of experience compiling kernels or kernel modules)

Here's my contribution (hoping it's not against the forum rules)

I cannot give a detailed step by step because it's all been part of the process, but I'll do my best.
Let's just say it started with me compiling a real time (RT) kernel to see if could get latency and xruns down, I compiled version 5.4.26-rt17 (the lastest with an available RT patch when I did it 2020-03-20-ish).
And then made a tiny modification in one of the kernel source files, and built it as a kernel module (to be spared of re-compiling the kernel once again).
It "should" work on you kernel of choice (low-latency or generic kernel users I'm talking to you)

My changes to file <kernel_source>/sound/usb/pcm.c were the lines commented as "Micro BR-80" up to "Roland Boutiq" at the end of the function's "static int set_sync_ep_implicit_fb_quirk" switch statement and before the return statement, the following statement is an "if statement" (reduced context printed here for your convenience)
<kernel_source> is the directory where you downloaded the kernel source, either a new one for compilation, or the one you are about to modify (about to compile the new module for - the source you download should match exactly the kernel you want to patch - output of "# uname -r")

<kernel_source>/sound/usb/pcm.c context:
...
ifnum = 1;
goto add_sync_ep_from_ifnum;
case USB_ID(0x07fd, 0x0004): /* MOTU MicroBook II */
ep = 0x84;
ifnum = 0;
goto add_sync_ep_from_ifnum;
case USB_ID(0x07fd, 0x0008): /* MOTU M Series */
ep = 0x81;
ifnum = 2;
goto add_sync_ep_from_ifnum;
case USB_ID(0x0582, 0x01d8): /* BOSS Katana */
/* BOSS Katana amplifiers do not need quirks */
case USB_ID(0x0582, 0x0130): /* Micro BR-80 */
case USB_ID(0x0582, 0x01d6): /* BOSS GT-1 */
case USB_ID(0x0582, 0x0138): /* RC-300 */
case USB_ID(0x0582, 0x01b5): /* Roland Boutiq */
return 0;
}

if (attr == USB_ENDPOINT_SYNC_ASYNC &&
altsd->bInterfaceClass == USB_CLASS_VENDOR_SPEC &&
altsd->bInterfaceProtocol == 2 &&
...

As you can gather from the previous posts, all of these: "BOSS Katana" amplifiers, "Micro BR-80" synth(?), "BOSS GT-1" pedalboard(?), "RC-300" looper, and "Roland Boutiq" line synth modules work, so I added all of those in case I get my hands on any of that hardware in the future (FYI in 5.4.26 kernel source "BOSS Katana" case is already in the code making it easier to locate the right portion of code to modify)
If you have a Roland/BOSS device with USB connection which you suspect should work as an audio interface but can't get it to work, I would try adding a case statement for it (after Roland Boutiq case) and following this procedure (my next test will be Roland GR-55 Guitar Synth), hell... I would even try it for devices from other manufacturers that were giving me a hard time
How do you get the right values for USB_ID?

- Connect your USB device
- Run # lsusb and identify your device

i.e:
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 005: ID 138a:0011 Validity Sensors, Inc. VFS5011 Fingerprint Reader
Bus 001 Device 004: ID 5986:2109 Acer, Inc
Bus 001 Device 003: ID 8087:0a2b Intel Corp.
Bus 001 Device 002: ID 058f:9540 Alcor Micro Corp. AU9540 Smartcard Reader
Bus 001 Device 009: ID 0582:01b5 Roland Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

run # lsusb -v -s 001:009| egrep 'idVendor|idProduct'
(aka "-s <Bus:Device>" for your relevant entry)
i.e.:
idVendor 0x0582 Roland Corp.
idProduct 0x01b5

Those are your hex numbers for the case in the switch statement (actually the output of lsusb also shows them but without the leading 0x, in the code they must be pre-pended with the 0x)

For kernel compilation:
- I followed some of the instructions here:
https://www.linux.com/topic/desktop/how ... -kernel-0/
Part "Installing requirements"

- downloaded sources from
https://mirrors.edge.kernel.org/pub/lin ... .26.tar.gz
https://mirrors.edge.kernel.org/pub/lin ... t17.tar.gz

- and then followed some of the instructions here:
https://gnipsel.com/linuxcnc/uspace/linuxmint19-rt.html
parts: "Now extract and patch the kernel", "Now build the kernel", "...then install the kernel", etc

Now, let's get something clear... it takes a good while to compile a kernel (3 hours on my laptop although it's a bit old but quite powerful, I've read for other guys it took 8 hours plus to compile the kernel), so I'm only pasting the link here so you can make sure you have the pre-requisite software and the sources needed (if you want to compile your kernel, go for it, hopefully these sources will help you as much as they helped me)

Naturally after compiling the kernel I dind't want to do it again to get this roland patch working, so I followed Unicornblender's tip and link on how to compile the patch as a module, adapting this link: https://wiki.archlinux.org/index.php/Co ... nel_module to my needs

Note, if you ARE planning on compiling your own kernel, just change the <kernel_source>/sound/usb/pcm.c file before compiling the whole kernel and you can skip this part about building and loading/verifying modules (since I had no experience doing any of these tasks I didn't have the strenght of heart to do it myself in one pass)

Module(s) building:

- I found my system (linux mint 19.3) don't have a /proc/config.gz file (apparently arch linux does) so I used the one that was left from my kernel compilation (if you don't plan on compiling a full kernel, maybe google where to get the current config file for your system)

- I did not use any of the EXTRAVERSION stuff
- I run (as root or using sudo and standing in the base path where the kernel image was downloaded):
In my case it was: <kernel_source>= ~/Downloads/linux-5.4.26 (That ~ is the login user home directory, not root's home directory, but it will depend where you downloaded the kernel source)
Also where it says <kernel_version> replace with your kernel version, in my case it would be <kernel_version>=5.4.26
The module(s) you are interested in is <kernel_source>/sound/usb/snd-usb-audio.ko

step by step:

- # cd <kernel_source>
- # make modules_prepare
- # make M=sound/usb
After two minutes the modules were compiled
The module you are interested in is <kernel_source>/sound/usb/snd-usb-audio.ko
- I placed the updated module in /lib/modules/<kernel_version>/updates (had to create the "updates" directory)(cp command, make sure to check permissions and keep them in line with the rest of the hierarchy)
- I noted down the version of the original module vs. the new one with modinfo to check eventually which module was loaded (specifically the line srcversion)
- # modinfo /lib/modules/<kernel_version>/kernel/sound/usb/snd-usb-audio.ko | grep srcversion
- # modinfo <kernel_source>/sound/usb/snd-usb-audio.ko | grep srcversion

The output for my newly compiled module was (Warning, I'm quite certain it's not going to be yours)
srcversion: 8EC255C68F12886B79E6B2E

I ran
# update-initramfs -u -k `uname -r`
(back quotes, or just run "# uname -r" and replace with output, in my case output was: 5.4.26-rt17)
Note: I used update-initramfs because I didn't understand the manual for mkinitcpio and how to adapt the parameters to my case, alas... it worked

- reboot
- If everything is well, your system will load and then you should connect your device via usb and the new module will get loaded automatically (I couldn't load it manually - not that I tried too hard)
- run # lsmod | grep snd_usb_audio
if the module was loaded (aka there is output from the previous command) run
# modinfo snd-usb-audio | grep srcversion
The output should match the srcversion you noted down from your compiled module a couple of steps back and not the stock module's one

I didn't hit any wall or found any problems in all the process, so "a priori" I could not help you troubleshoot if you get into trouble but my first idea would be...
- boot into a different kernel (usually old kernels are still there unless you clean up, in grub's advanced options for linux mint/Ubuntu/etc ) and
- just delete the updates folder "# rm -f /lib/modules/<kernel_version>/updates" (of course if you have othere modules updated, just delete the snd-usb-audio.ko module) and
- re-run update-initramfs with the same parameters as before

this should put you back at the starting point after a reboot into your preferred kernel

Hope it helps and hope it's not too off-topic

Post Reply