USB Sound Card on Type-C Connector

The volume on the Rock Pi S is too low, even when on max.

  1. Is there any way to make it louder?
  2. Is it possible to play sound another way (to increase volume)?
  3. Is it possible to connect a USB sound-card to the Type-C connector?

@RadxaYuntian - Any help is most appreciated.

Nadav

@ken please take a look at above questions.

Does the ROCK PI S POE HAT increase audio volume?

So, I purchased the HAT, and no, it does not increase volume.

@ken - any tips to help increase audio volume will be much appreciated!

@RadxaYuntian, I have not heard back from Ken.
I followed the instructions here, but could not get sound card to work on USB-C.
Is it possible to connect a USB sound-card to the Type-C connector?

You cannot follow those instruction since you need the USB-C to work as host instead of device mode.

Please first check when a powered USB hub is connected on ROCK S, can it recognize the USB devices on the hub. You can see connected USB devices via lsusb command.

@RadxaYuntian,
I tried two things:

  1. I powered the ROCK S via the 5V pin, and connected multiple USB-C sound-cards.
    None of them appear via the lsusb command.
  2. I connected a USB-C powered hub (that works on another machine), and connected multiple USB-C sound-card.
    No new devices/hubs appear via the lsusb command.

The USB C doesn’t support OTG mode detection, you need to enable HOST mode on the USB C port of the Pi S by change the device tree, something like this:

dr_mode = "host"

refer this:
https://www.kernel.org/doc/Documentation/devicetree/bindings/usb/generic.txt

1 Like

@jack, you’re amazing!
Here is the overlay dtbo: rockpi-s-usb-c-sound.zip.

Detailed instruction to create the overlay (based on USB Device in FullSpeed):

  1. decompile existing dtb to rk3308-rock-pi-s.dts:

cd /boot/dtb/rockchip/
dtc -I dtb -O dts -o rk3308-rock-pi-s.dts rk3308-rock-pi-s.dtb

  1. Find the usb@ff400000, and change dr_mode to host:

usb@ff400000{

dr_mode = “host”

  1. recompile dts to rk3308-rock-pi-s_2

dtc -I dts -O dtb -o rk3308-rock-pi-s_2.dtb rk3308-rock-pi-s.dts

  1. edit /boot/armbianEnv.txt to use rk3308-rock-pi-s_2

fdtfile=rockchip/rk3308-rock-pi-s_2.dtb

1 Like

Hi @jack and @nzak ;
Do you have specific instructions on how to switch the USB-C connector on the RockPi-S to host mode? I’m running Armbian Linux.
I’m not really able to follow the procedure laid out here, if that’s what you’re trying to accomplish.

Looks like this should do it, but unfortunately, it doesn’t seem to work?

@Mr.X, yes, I guess my instructions can use improvement.

  1. Download rockpi-s-usb-c-sound.zip
  2. Extract the contents. You should now have a file called usb-sound.dts
  3. Run the following command: armbian-add-overlay usb-sound.dts

TY, @nzak. That zip folder has a .dtbo file, not the .dts.
If I had the .dts, would I need to move it to the /boot/overlay-user folder before running armbian-add-overlay ?
Also, have you tried this specific method, rather than editing original rk3308-rock-pi-s.dts file? I have tried a few things (I’d rather not edit the original file, but add just this small usb-sound.dts file), and I’ve yet to have the USB-C file become a host port.
I’m running Armbian Bookworm 24.8.1, btw.

Spent a LOT of time on this, with help from chatGPT, not sure if it’s leading me in the right direction, but I did finally get it working with it’s help.
Seems that the ONLY way I can get the USB-C to work as host is by decompiling rk3308-rock-pi-s.dtb, editing the dr_mode line, then recompiling it back to rk3308-rock-pi-s-2.dtb and pointing ftdfile to the edited version in /boot/armbianEnv.txt

Creating user_overlay or even adding an overlay to overlays= does not seem to work. It MAY be that the version of Armbian isn’t loading ANY overlays at all! It certainly appears that way, anyway…

I have no idea what I’m doing, but should I not see any overlays I’ve added referenced in /proc/device-tree?
I have the line overlays=s0-ext-antenna bs bs@1.3ghz sdio@10mhz in /boot/armbianEnv.txt but I do not see any of those items when running ls /proc/device-tree. Should I see them if they’re being loaded?