element14 Community
element14 Community
    Register Log In
  • Site
  • Search
  • Log In Register
  • Community Hub
    Community Hub
    • What's New on element14
    • Feedback and Support
    • Benefits of Membership
    • Personal Blogs
    • Members Area
    • Achievement Levels
  • Learn
    Learn
    • Ask an Expert
    • eBooks
    • element14 presents
    • Learning Center
    • Tech Spotlight
    • STEM Academy
    • Webinars, Training and Events
    • Learning Groups
  • Technologies
    Technologies
    • 3D Printing
    • FPGA
    • Industrial Automation
    • Internet of Things
    • Power & Energy
    • Sensors
    • Technology Groups
  • Challenges & Projects
    Challenges & Projects
    • Design Challenges
    • element14 presents Projects
    • Project14
    • Arduino Projects
    • Raspberry Pi Projects
    • Project Groups
  • Products
    Products
    • Arduino
    • Avnet & Tria Boards Community
    • Dev Tools
    • Manufacturers
    • Multicomp Pro
    • Product Groups
    • Raspberry Pi
    • RoadTests & Reviews
  • About Us
  • Store
    Store
    • Visit Your Store
    • Choose another store...
      • Europe
      •  Austria (German)
      •  Belgium (Dutch, French)
      •  Bulgaria (Bulgarian)
      •  Czech Republic (Czech)
      •  Denmark (Danish)
      •  Estonia (Estonian)
      •  Finland (Finnish)
      •  France (French)
      •  Germany (German)
      •  Hungary (Hungarian)
      •  Ireland
      •  Israel
      •  Italy (Italian)
      •  Latvia (Latvian)
      •  
      •  Lithuania (Lithuanian)
      •  Netherlands (Dutch)
      •  Norway (Norwegian)
      •  Poland (Polish)
      •  Portugal (Portuguese)
      •  Romania (Romanian)
      •  Russia (Russian)
      •  Slovakia (Slovak)
      •  Slovenia (Slovenian)
      •  Spain (Spanish)
      •  Sweden (Swedish)
      •  Switzerland(German, French)
      •  Turkey (Turkish)
      •  United Kingdom
      • Asia Pacific
      •  Australia
      •  China
      •  Hong Kong
      •  India
      • Japan
      •  Korea (Korean)
      •  Malaysia
      •  New Zealand
      •  Philippines
      •  Singapore
      •  Taiwan
      •  Thailand (Thai)
      • Vietnam
      • Americas
      •  Brazil (Portuguese)
      •  Canada
      •  Mexico (Spanish)
      •  United States
      Can't find the country/region you're looking for? Visit our export site or find a local distributor.
  • Translate
  • Profile
  • Settings
Raspberry Pi
  • Products
  • More
Raspberry Pi
Raspberry Pi Forum Cirrus Logic Audio Card working on the Raspberry Pi 2
  • Blog
  • Forum
  • Documents
  • Quiz
  • Events
  • Polls
  • Files
  • Members
  • Mentions
  • Sub-Groups
  • Tags
  • More
  • Cancel
  • New
Join Raspberry Pi to participate - click to join for free!
Featured Articles
Announcing Pi
Technical Specifications
Raspberry Pi FAQs
Win a Pi
Raspberry Pi Wishlist
Actions
  • Share
  • More
  • Cancel
Forum Thread Details
  • Replies 165 replies
  • Subscribers 684 subscribers
  • Views 22719 views
  • Users 0 members are here
  • wolfson
  • raspberry
  • audio
  • pi
  • cirrus
  • raspberry_pi
  • rpi2
  • raspeberry_pi_accessories
  • pi2
Related

Cirrus Logic Audio Card working on the Raspberry Pi 2

Former Member
Former Member over 10 years ago

Hi all!

 

As you might know, Cirrus Logic's main kernel source branch recently switched to 3.18.

My first thought was "Hmm, that means the Cirrus Logic card could finally work on the RPi2..."

I have built a couple of 3.18 kernels for my B+ and RPi2 and I have managed to get both models to produce sound image

 

It's still early days, i.e. there are possibly bugs and glitches to fix, but for those of you who would like to try it out I've made an image file that you can download here:

https://drive.google.com/file/d/0BzIaxMH3N5O1cmJ1bFhMcG1hc0E/view?usp=sharing

The file is a 1.3 GB zip. Uncompressed size is 3.1 GB, so it fits comfortably on a 4 GB card.


The image is based on the standard 2015-02-16-raspbian-wheezy image from the Foundation that you flash to a SD card for a fresh install.

I have only added my kernels and set up the configuration files to get the card going.

It should work on the older B model  with a Wolfson Audio Card too, but I haven't tested that yet.

 

Have fun!

--

Ragnar

  • Sign in to reply
  • Cancel
Parents
  • Former Member
    Former Member over 10 years ago

    I tried the patched kernel with Ubuntu MATE Beta 15.04 and it worked.

    But with the new stable release of Ubuntu the kernel breaks all network connections and input devices even bluetooth keyboard image

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Cancel
  • Former Member
    Former Member over 10 years ago in reply to Former Member

    Hello,

    thank you for the provided image. The audio works fine.

    However, I am trying to compile the kernel with cirrus driver and RT patch without success. I assume it already fails with the cirrus part.

    I followed the cirrus instructions from here: https://github.com/CirrusLogic/rpi-linux/wiki/Building-the-code

    and added the RT patch from https://www.kernel.org/pub/linux/kernel/projects/rt/3.18/older/patch-3.18.9-rt5.patch.gz

    How did you build your image, Ragnar?

    Martin

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Cancel
Reply
  • Former Member
    Former Member over 10 years ago in reply to Former Member

    Hello,

    thank you for the provided image. The audio works fine.

    However, I am trying to compile the kernel with cirrus driver and RT patch without success. I assume it already fails with the cirrus part.

    I followed the cirrus instructions from here: https://github.com/CirrusLogic/rpi-linux/wiki/Building-the-code

    and added the RT patch from https://www.kernel.org/pub/linux/kernel/projects/rt/3.18/older/patch-3.18.9-rt5.patch.gz

    How did you build your image, Ragnar?

    Martin

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Cancel
Children
  • Former Member
    Former Member over 10 years ago in reply to Former Member

    Without success? Do you get any error message? Btw compiling takes several hours so maybe just wait longer? What was your last stap you did  following the guide?

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Cancel
  • Former Member
    Former Member over 10 years ago in reply to Former Member

    Sorry, I should have been more specific. The kernel compiled fine but there was no audio. The provided image worked though.

    aplay -l
    aplay: device_list:252: no soundcards found...

    I used the flash image as basis, compiled the kernel with cirrus and just copied the kernel and .dts file (even though it already existed of course). The reason was to see if my own compilation worked, so I could blame the rt patch if did not later on.

    I went through the entire cross compilation guide using Xubuntu on a virtual machine and using scp to copy the file onto the pi2.

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Cancel
  • Former Member
    Former Member over 10 years ago in reply to Former Member

    I wouldn't compile the kernel on another computer. Compiling on the pi is slower but easier You can simple let the kernel compile at night and the next morning it's ready. Also that way you can use other OS's like Ubuntu MATE

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Cancel
  • Former Member
    Former Member over 10 years ago in reply to Former Member

    I'd very much recommend cross-compiling on a fast computer. On my notebook compiling a RPi kernel takes minutes. Cross-compiling a kernel for the RPi is very well documented and is relatively easy, not much more difficult then compiling on the RPi itself. Just my 2¢ image

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Cancel
  • Former Member
    Former Member over 10 years ago in reply to Former Member

    I have only built the Cirrus 3.18 kernel once by cross-compiling. My cross-compiling environment is a Virtual-Boxed Lubuntu 14.04LTS, 64-bit machine on a fairly slow Windows XP host. Nowadays I use a build cluster comprising four RPi2B running distcc. The RPi cluster builds a kernel from scratch about four times faster than the old laptop.

     

    Anyway, I have dredged up the bash history files from the one cross-compilation I did. That was for an RPi2B kernel. I followed the build instructions from Cirrus' Wiki pretty much to the letter.

    NOTE: This is cobbled together from several different history files and partly from memory. I might have missed things...

     

    Set up the build environment.

    mkdir bin
    cd ~/bin
    mkdir raspberrypi
    cd raspberrypi
    git clone --depth 1 https://github.com/raspberrypi/tools
    cd ~
    mkdir code
    cd code
    git clone --depth 1 https://github.com/CirrusLogic/rpi-linux.git
    export CCPREFIX=~/bin/raspberrypi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf-

     

    Build the kernel.

    cd rpi-linux
    make ARCH=arm bcm2709_defconfig
    make ARCH=arm menuconfig # I add a couple of drivers I need.
    ARCH=arm CROSS_COMPILE=${CCPREFIX} make -j4
    ARCH=arm CROSS_COMPILE=${CCPREFIX} make -j4 modules

     

    Put the kernel modules into a correct directory structure, but in a temporary directory.

    mkdir -p ../modules_tmp
    export INSTALL_MOD_PATH=../modules_tmp/
    ARCH=arm CROSS_COMPILE=${CCPREFIX} make modules_install

     

    Copy the kernel modules to the target machine. I use rsync, but scp -r works as well.

    cd ../modules_tmp
    rsync -av . target_machine:/
    cd ../rpi-linux

     

    Put the "This kernel is Device Tree enabled" signature on the kernel file and copy it to the target machine. Without the DT signature, the overlay file and hence the drivers will not load.

    pushd arch/arm/boot/
    mv zImage zImage.org
    ~/bin/raspberrypi/tools/mkimage/mkknlimg zImage.org zImage
    scp zImage target_machine:/boot/kernel7.img
    rm zImage.org
    popd

     

    Copy the overlay file to the target machine. NOTE: It's the .dtb file, not the .dts.

    scp arch/arm/boot/dts/rpi-cirrus-wm5102-overlay.dtb target_machine:/boot/overlays/

     

    Optionally, build a deb package. It will contain the kernel and modules, but not the overlay file.

    ARCH=arm CROSS_COMPILE=${CCPREFIX} KBUILD_DEBARCH=armhf make deb-pkg

     

    I hope you find something useful in the above.

     

     

     

    As to how I built the image file itself:

    I started out with a bog standard Raspbian image from the Foundation that I renamed to 2015-02-16-raspbian-wheezyW_CL.img.

    I loopback mounted the partitions of the image file and then just copied and edited files manually.

     

    First, I create mount points for the two partitions of the image.

    mkdir -p /mnt/newboot /mnt/newroot

     

    Then, I use fdisk to find out where the image file's partitions start.

    root@quadripi# fdisk -l 2015-02-16-raspbian-wheezyW_CL.img
    
    Disk 2015-02-16-raspbian-wheezyW_CL.img: 3276 MB, 3276800000 bytes
    255 heads, 63 sectors/track, 398 cylinders, total 6400000 sectors
    Units = sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disk identifier: 0x0009bf4f
    
                                 Device Boot      Start         End      Blocks   Id  System
    2015-02-16-raspbian-wheezyW_CL.img1            8192      122879       57344    c  W95 FAT32 (LBA)
    2015-02-16-raspbian-wheezyW_CL.img2          122880     6399999     3138560   83  Linux

     

    And finally, I mount the image's partitions to /mnt/newboot and /mnt/newroot respectively.

    root@quadripi# mount -o loop,offset=$((8192 * 512)) 2015-02-16-raspbian-wheezyW_CL.img /mnt/newboot
    root@quadripi# mount -o loop,offset=$((122880 * 512)) 2015-02-16-raspbian-wheezyW_CL.img /mnt/newroot

     

    Then, it's just a matter of copying files to and editing files in the right places.

    When done, unmount /mnt/newboot and /mnt/newroot and you have an image file ready to be flashed to an SD card.

     

    Simple, really image

    --

    Ragnar

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Cancel
  • Former Member
    Former Member over 10 years ago in reply to Former Member

    I did cross-compile it on a fast Ubuntu computer, compiling is not the issue. It has to miss some configuration. I agree with Jeremy on this one.

     

    Edit:

    ragnar.jensen, thank you very much for the detailed instructions. I did follow it (hopefully to the letter) as well. But I will check your post step by step again, I might have missed something.

    If everything works out, I should end up with your working image. image

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Cancel
  • Former Member
    Former Member over 10 years ago in reply to Former Member

    ragnar.jensen, looks like I missed this one

    ARCH=arm CROSS_COMPILE=${CCPREFIX} make -j4 modules 

    and I might missed reexecuting

    ./Playback_to_Lineout.sh

    Are these settings stored permanently?

    What do you mean by

    Put the "This kernel is Device Tree enabled" signature on the kernel file and copy it to the target machine.

    ?

    I used your image "2015-02-16-raspbian-wheezyW_CL.img" as base, installed sox, executed Playback_to_Lineout.sh and audio was working with .wav und .flac fine.

    But after following the steps and copying my own compiled kernel I get this:

    pi@raspberrypi ~ $ play testfile.wav 
    play WARN alsa: can't encode 0-bit Unknown or not applicable
    play FAIL sox: Sorry, there is no default audio device configured
    pi@raspberrypi ~ $ aplay -l
    **** List of PLAYBACK Hardware Devices ****
    card 0: sndrpiwsp [snd_rpi_wsp], device 0: WM5102 AiFi wm5102-aif1-0 []
      Subdevices: 1/1
      Subdevice #0: subdevice #0

     

    Thank you very much for your help!

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Cancel
  • Former Member
    Former Member over 10 years ago in reply to Former Member

    The Cirrus Logic drivers are loaded by means of the Device Tree mechanism, controlled by the overlay file /boot/overlays/rpi-cirrus-wm5102-overlay.dtb.

    You have to mark the kernel as Device Tree capable, otherwise the DT mechanism will be turned off. If it's not marked, it won't even try to load the overlay file and as a consequence the drivers aren't loaded either.

    That's what these commands do:

    mv zImage zImage.org 
    ~/bin/raspberrypi/tools/mkimage/mkknlimg zImage.org zImage

     

    zImage is the compressed kernel image. Rename it to zImage.org and then run the command mkknlimg on it to create a new zImage with a Device-Tree-Capable stamp on it.

    There's another command - knlinfo - to check if a kernel file has a DT stamp on it.

    E.g.

    $  ~/bin/raspberrypi/tools/mkimage/knlinfo zImage  # This kernel image is DT capable.
    Kernel trailer found at 3946712/0x3c38d8:
      KVer: "Linux version 3.18.9-v7cludlmmapfllirq (ragnar@quadripi) (gcc version 4.8.3 (Raspbian 4.8.3-13) ) #5 SMP PREEMPT Fri May 1 18:06:15 CEST 2015"
      DTOK: true
    
    $ ~/bin/raspberrypi/tools/mkimage/knlinfo zImage.org # This kernel image does not have the DT stamp.
    * no trailer

     

     

    Are these settings stored permanently?

    Yes. The script /etc/init.d/alsa-utils saves all ALSA settings at shutdown and restores them at boot.

    --

    Ragnar

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Cancel
  • Former Member
    Former Member over 10 years ago in reply to Former Member

    Thank you for the explanation.

    Since I followed your guide and checked the image with knlinfo, the kernel should be DT capable.

    Thus I should end up with an exact copy of your kernel. How come the audio card is not working? Even though aplay -l looks the fine.

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Cancel
  • Former Member
    Former Member over 10 years ago in reply to Former Member

    I think it might be a problem with sox.

    Try these

    export AUDIODEV=hw:0,0

    export AUDIODRIVER=alsa

    before running sox.

     

    Can you play the file with aplay?

    --

    Ragnar

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Cancel
element14 Community

element14 is the first online community specifically for engineers. Connect with your peers and get expert answers to your questions.

  • Members
  • Learn
  • Technologies
  • Challenges & Projects
  • Products
  • Store
  • About Us
  • Feedback & Support
  • FAQs
  • Terms of Use
  • Privacy Policy
  • Legal and Copyright Notices
  • Sitemap
  • Cookies

An Avnet Company © 2025 Premier Farnell Limited. All Rights Reserved.

Premier Farnell Ltd, registered in England and Wales (no 00876412), registered office: Farnell House, Forge Lane, Leeds LS12 2NE.

ICP 备案号 10220084.

Follow element14

  • X
  • Facebook
  • linkedin
  • YouTube