[Buildroot] Driver for C-Media Electronics, Inc. CM106 based usb audio device?

Peter Seiderer ps.report at gmx.net
Thu Feb 26 20:54:21 UTC 2015


Hello Lou,

On Wed, Feb 25, 2015 at 07:53:01PM -0600, Lou Crittenden wrote:
> >I was able to compile and run a rockbox version on RPi/buildroot, but still
> > without audio file playing...
> 
> Awesome! Can I see it?

See buildroot patch at end of e-mail (very early, very hackisch version)...

> 
> I was able to run mplayer with no options in a terminal within the raspbian
> image that came with my waveshare device and it didn't have a bit of
> problems with the audio. It sounded great actually.
> 

Do you have audio distortions too in case of leds blinking etc.?
If no its definitely not a pure electric problem..., if yes try another
sound device...

> You're probably right on the resource part, and I believe the buildroot
> kernel has a lot to do with it, but the raspbian kernel didn't have that
> issue at all, but of course it just takes a long time to boot compared to
> buildroot. I want to use the isolator to isolate the usb sound device from
> the background zipper noises, pops, buzzes, whining, and other garbage from
> the main computer board that happens when for example you are scrolling a
> page or leds on the board blink.
> 

Sounds strange...

> I have included a sample of what I am running into as far as the audio.
> This was with the commands:
> 
> # cd /media/usb0 (this thumbdrive is where my music is located)
> # mplayer *
> 
> and with my usb sound device plugged in. It doesn't do that with the
> onboard card, though (even though it sounds like poo, as I have heard it
> was only 11-bit audio). When I'm running:
> 
> # mplayer -quiet *
> 
> it plays normally through the usb card even with other processes running,
> but still doesn't sound near as good as either my ubuntu system or the
> raspbian image.
>
> [-- Attachment #2: garbled mplayer no flags switching songs.mp3 --]
> [-- Type: audio/mpeg, Encoding: base64, Size: 743K --]

Strange, but I would suspect some kernel/driver problem, try to copy
the sound files to the local filesystem, unplug your usb-memory and
try with only the usb-soundcard attached (just guessing, not much
help without hardware to test)...

Try to find out the difference between raspbian and buildroot
kernel version/config...

> I also found out that the snd-usb-audio driver indeed does work with all of
> the channels when I input the command
> 
> # speaker-test -Dplug:surround51 -c6
> 
> to test all of the speaker channels. The woman's voice came through on all
> the appropriate channels, plus they are adjustable in alsamixer. I just
> can't get mplayer to use them all when using alsa as the backend (I haven't
> gotten pulseaudio to work in buildroot) and it outputs through the front
> only. I have the same issue when using alsa as the backend on this card in
> the raspbian image as well (but good sound) yet it uses the same
> snd-usb-audio driver, same with my ubuntu system.
> 
> Would you recommend pulseaudio in my situation?
> 

Should work with alsasound directly....but you can never know..., sorry I am
no alsa-/pulse sound expert...

Regards,
Peter

> 
> On Wed, Feb 25, 2015 at 1:42 PM, Peter Seiderer <ps.report at gmx.net> wrote:
> 
> > Hello Lou,
> >
> > On Tue, Feb 24, 2015 at 05:58:45PM -0600, Lou Crittenden wrote:
> > > Good news, I found a workaround to the garbled audio issue on use of
> > > mplayer when using my USB card. What I have to do is pass the -quiet
> > option
> > > when running mplayer. For example: mplayer -quiet test.mp3. It turns out
> > > that activity on the lcd screen was the culprit, and it interferes with
> > the
> > > audio and it ONLY does that when using the usb audio card. When no
> > options
> > > are passed, the display continually scrolls the time and whatnot of the
> > > audio playback every millisecond.
> > >
> > > mpg123 has much less terminal activity, and thus doesn't have the issue.
> > >
> > > I was wondering if this is a power issue and if it would work if I used
> > an
> > > isolator that allowed the device to receive its own power independent of
> > > the Raspberry Pi board? Something like this:
> > >
> > >
> > http://www.ebay.com/itm/ADUM4160-USB-Isolator-Board-ADI-USB-Port-Isolator-Protection-/191303685123?pt=LH_DefaultDomain_0&hash=item2c8a969403
> > >
> > > that electronically isolates the usb audio and power from the pi, but
> > > allows the pi to talk to the device so the sound improves and improves
> > > power stability.
> > >
> >
> > Hard to tell without hearing a sample of what you describe as 'garbled
> > audio',
> > but I would less suspect a electrical/decouple problem, more suspect a pure
> > resource problem of the mplayer aplication doing audio and display
> > updates...
> >
> > Maybe you can stress mplayer -quiet and/or mpg123 doing some concurrent
> > work/
> > testbench running (e.g. untar a huge file (kernel source)), etc. and get
> > the
> > same audio defects?
> >
> > I was able to compile and run a rockbox version on RPi/buildroot, but still
> > without audio file playing...
> >
> > Regards,
> > Peter
> >

---begin---
>From 218e06519422ec6923ec0b6bb068bee65ef39e6e Mon Sep 17 00:00:00 2001
From: Peter Seiderer <ps.report at gmx.net>
Date: Sat, 7 Feb 2015 14:53:17 +0100
Subject: [PATCH] rockbox: new package (erly draft - hack version)


diff --git a/package/Config.in b/package/Config.in
index fe3d3d0..30eed47 100644
--- a/package/Config.in
+++ b/package/Config.in
@@ -30,6 +30,7 @@ menu "Audio and video applications"
 	source "package/on2-8170-libs/Config.in"
 	source "package/opus-tools/Config.in"
 	source "package/pulseaudio/Config.in"
+	source "package/rockbox/Config.in"
 	source "package/sox/Config.in"
 	source "package/tidsp-binaries/Config.in"
 	source "package/tstools/Config.in"
diff --git a/package/rockbox/0001-hack-for-buildroot-compile.patch b/package/rockbox/0001-hack-for-buildroot-compile.patch
new file mode 100644
index 0000000..1e98854
--- /dev/null
+++ b/package/rockbox/0001-hack-for-buildroot-compile.patch
@@ -0,0 +1,58 @@
+diff --git a/tools/configure b/tools/configure
+index 2dd1bf3..999dc6c 100755
+--- a/tools/configure
++++ b/tools/configure
+@@ -158,6 +158,12 @@ findsdl(){
+   files="${CROSS_COMPILE}sdl-config:sdl-config"
+   winbuild="$1"
+ 
++  # check for overwrite via SDL_CONFIG
++  if [ -n "${SDL_CONFIG}" ]; then
++    echo ${SDL_CONFIG}
++    return;
++  fi
++
+   IFS=":"
+   for file in $files
+   do
+@@ -327,6 +333,8 @@ simcc () {
+ 
+  sdl=`findsdl $winbuild`
+ 
++ echo "sdl = $sdl"
++
+  if [ -n `echo $app_type | grep "sdl"` ]; then
+     if [ -z "$sdl" ]; then
+         echo "configure didn't find sdl-config, which indicates that you"
+@@ -416,6 +424,13 @@ EOF
+ # the gcc version should most likely match what versions we build with
+ # rockboxdev.sh
+ #
++buildroot () {
++ prefixtools arm-buildroot-linux-gnueabi-
++ GCCOPTS="$CCOPTS -mcpu=rm1176jzf-s"
++ GCCOPTIMIZE="-fomit-frame-pointer"
++ endian="little"
++}
++
+ shcc () {
+  prefixtools sh-elf-
+  GCCOPTS="$CCOPTS -m1"
+@@ -3391,6 +3406,7 @@ fi
+     app_set_paths
+     app_set_lcd_size
+     memory=8
++    buildroot
+     uname=`uname`
+     simcc "sdl-app"
+     tool="cp "
+@@ -4232,7 +4248,8 @@ if [ -z "$arch" ]; then
+     elif [ -n "$(echo $cpp_defines | grep -w __arm__)" ]; then
+         arch="arm"
+         # cpp defines like "#define __ARM_ARCH_4TE__ 1" (where we want to extract the 4)
+-        arch_version="$(echo $cpp_defines | tr ' ' '\012' | grep __ARM_ARCH | sed -e 's,.*\([0-9]\).*,\1,')"
++        # arch_version="$(echo $cpp_defines | tr ' ' '\012' | grep __ARM_ARCH | sed -e 's,.*\([0-9]\).*,\1,')"
++        arch_version="6"
+     elif [ -n "$(echo $cpp_defines | grep -w __mips__)" ]; then
+         arch="mips"
+         arch_version="$(echo $cpp_defines | tr ' ' '\012' | grep _MIPS_ARCH_MIPS | sed -e 's,.*\([0-9][0-9]\).*,\1,')"
diff --git a/package/rockbox/Config.in b/package/rockbox/Config.in
new file mode 100644
index 0000000..837ed53
--- /dev/null
+++ b/package/rockbox/Config.in
@@ -0,0 +1,6 @@
+config BR2_PACKAGE_ROCKBOX
+	bool "rockbox"
+	help
+	  Rockbox is a free replacement firmware for digital music players.
+
+	  http://www.rockbox.org/
diff --git a/package/rockbox/rockbox.mk b/package/rockbox/rockbox.mk
new file mode 100644
index 0000000..9731b54
--- /dev/null
+++ b/package/rockbox/rockbox.mk
@@ -0,0 +1,40 @@
+################################################################################
+#
+# rockbox
+#
+################################################################################
+
+ROCKBOX_VERSION = 8aa72f07f4bf38e9b898fb8d8042239861b9a423
+ROCKBOX_SITE = git://git.rockbox.org/rockbox
+# ToDo: check license and find the correct files
+#ROCKBOX_LICENSE = GPLv2+
+#ROCKBOX_LICENSE_FILES = COPYING COPYRIGHT
+ROCKBOX_DEPENDENCIES = sdl alsa-lib
+
+# $(TARGET_MAKE_ENV) $(MAKE1) $(LINUX_MAKE_FLAGS)
+
+#	BUILDDIR=$(@D)
+
+define ROCKBOX_CONFIGURE_CMDS
+	mkdir -p $(TARGET_DIR)/opt/rockbox
+	cd $(@D); \
+	CROSS_COMPILE=$(HOST_DIR)/usr/bin/arm-buildroot-linux-gnueabi- \
+	SDL_CONFIG=$(STAGING_DIR)/usr/bin/sdl-config \
+	tools/configure \
+	--target=sdlapp \
+	--lcdwidth=320 \
+	--lcdheight=240 \
+	--type=normal \
+	--prefix=$(TARGET_DIR)/opt/rockbox
+endef
+
+#	$(MAKE) -C $(@D) help
+define ROCKBOX_BUILD_CMDS
+	cd $(@D); $(MAKE)
+endef
+
+#define ROCKBOX_INSTALL_TARGET_CMDS
+#	$(MAKE) -C $(@D) fullinstall
+#endef
+
+$(eval $(generic-package))
-- 
2.1.4
---end---


More information about the buildroot mailing list