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 Driver fixes and updates to kernel 3.18.16 and 4.0.5
  • 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 180 replies
  • Subscribers 689 subscribers
  • Views 23037 views
  • Users 0 members are here
  • raspberry_pi
  • raspeberry_pi_accessories
Related

Driver fixes and updates to kernel 3.18.16 and 4.0.5

hiassoft
hiassoft over 10 years ago

Edit: Current kernel versions and install/config instructions are also available from my webpage http://www.horus.com/~hias/cirrus-driver.html

 

During the last few weeks I fixed various issues in the Wolfson/Cirrus driver and rebased it so it works with the current RPi kernel versions (3.18.16 and 4.0.5).

 

You can download the patches from my GitHub repository. The 3.18 kernel with Cirrus drivers is in the cirrus-3.18.y branch, the 4.0 kernel with Cirrus drivers is in the cirrus-4.0.y branch. I'll rebase and update these branches from time to time so that the Cirrus driver and my changes will stay on top of the commit list.

 

If you just want to have an updated 3.18.16 kernel you can download precompiled binaries from here. Just unpack the tarball in the root directory. Before you do that it might be a good idea to update the firmware files (bootcode.bin, start*.elf and fixup*.dat in the boot directory) to the latest version.

 

Here's a list of my changes:

- Added the FLL1 setup back so that switching between 44.1kHz and 48kHz (and other sample rates) works fine.

- Don't register Arizona IRQ if it's set to 0. The Cirrus driver uses polling here and if we register an interrupt handler for irq 0 we get lots of "spurious interrupt" messages spamming dmesg in kernel 3.19 and newer. IRQ 0 is wrong anyway.

- Include DCVDD patches from the Cirrus linux-drivers repository. These patches make sure the WM8804 chip is initialized properly. Without this patch I sometimes had SPDIF audio out only on the right channel.

- Disable spidev0 in Cirrus device tree overlay. That's mainly a safety precaution so that userspace programs trying to access spi0.0 won't interfere with the WM8804 reset line. I'm not 100% sure this is needed at all, so maybe I'll remove it some time later.

 

And some important notes:

I haven't included the mmap patch, this is already supported in the upstream kernels but currently disabled by default. To enable mmap support add the following line to config.txt:

dtoverlay=i2s-mmap

 

If you compile the kernel on your own please note that the devicetree overlays have now been moved to arch/arm/boot/dts/overlays.

 

Kernel 4.0 now uses spi_bcm2835 by default (the older spi_bcm2708 module is available via a devicetree overlay) so you have to extend your /etc/modprobe.d conf file and add a pre-depend for spi_bcm2835 as well. It's safe to have both the old and the new module in here, so just use this configuration:

softdep arizona-spi pre: arizona-ldo1
softdep spi-bcm2708 pre: fixed
softdep spi-bcm2835 pre: fixed

 

so long,

 

Hias

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

    Hi,Hias

    Thanks for your hard work producing these kernel patches. I used your precompiled 4.4.6+ kernel (tested with original Wolfson card on RPi B and Cirrus card on RPi 3):

    just do the following as you said:

    • Do a standard raspbian installation
    • Do a "sudo apt-mark hold raspberrypi-bootloader"
    • Download the precompiled Cirrus kernel 4.4.6 and install them (unpack the kernel in the root directory and unpack the usescase script tarball  /home/pi/bin)
    • Edit /boot/config.txt and create the /etc/modprobe.d/cirrus.conf file as described

    All above is done and everything seems wonderful. The output of command aplay -l is okay. However, when I plugged in the speakers and tried to play a song using mplayer, I heard nothing. I want to know what's the problem. Thanks for your help!

    aplay -l http://paste.debian.net/693318/

    vcdbg log msg 2>&1 http://paste.debian.net/693320/

    dmesg http://paste.debian.net/693321/

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

    Your logs look fine.

     

    Have you run the appropriate usecase script (eg Playback_to_Lineout.sh) at least once?

     

    Also better disable the RPi on-board sound (remove dtparam=audio=on from config.txt), otherwise you might have that one registered as the default sound device and playback might be using that instead of the Cirrus card.

     

    so long,

     

    Hias

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

    Thank you very much!

    I have tried all the methods you mentioned above, but it still doesn't work.

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

    Thank you very much!

    I have tried all the methods you mentioned above, but it still doesn't work.

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

    志飞 姜 schrieb:

     

    Thank you very much!

    I have tried all the methods you mentioned above, but it still doesn't work.

    OK, lets do this step-by-step.

     

    First make sure you've disabled onboard sound and that "aplay -l" lists only the Cirrus card:

    pi@rpi3:~ $ 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
    pi@rpi3:~ $

     

    Then enter these 3 commands to configure output to Lineout and Headset out.

    Reset_paths.sh -q
    Playback_to_Lineout.sh -q
    Playback_to_Headset.sh -q

     

    Make sure that you don't get any error messages printed on the console, entering these commands should just return to the command prompt. It has to look like this:

    pi@rpi3:~ $ Reset_paths.sh -q
    pi@rpi3:~ $ Playback_to_Lineout.sh -q
    pi@rpi3:~ $ Playback_to_Headset.sh -q
    pi@rpi3:~ $

     

    Now run "speaker-test -c 2 -t sine", this produce a 440Hz sine tone alternating on the left and right channel. The output should look like this:

    pi@rpi3:~ $ speaker-test -c 2 -t sine
    
    speaker-test 1.0.28
    
    Playback device is default
    Stream parameters are 48000Hz, S16_LE, 2 channels
    Sine wave rate is 440.0000Hz
    Rate set to 48000Hz (requested 48000Hz)
    Buffer size range from 16 to 131072
    Period size range from 8 to 16383
    Using max buffer size 131072
    Periods = 4
    was set period_size = 8192
    was set buffer_size = 131072
     0 - Front Left
     1 - Front Right
    Time per period = 3.141148
     0 - Front Left
     1 - Front Right

     

    If you still can't hear anything make sure everything's plugged in correctly. Also try connecting a headphone to the headphone out connector and check if you get sound there.

     

    If you get any error messages on the console or the output looks different please post it here.

     

    so long,

     

    Hias

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Cancel
  • gare-bear
    gare-bear over 9 years ago in reply to hiassoft

    Is one to assume that if the steps in post 137 work then the card is working?

    Re: Driver fixes and updates to kernel 3.18.16 and 4.0.5

     

    While it may sound like a stupid question, I was under the impression my card was not working because the usecase-scripts were not outputting audio? Am I wrong to assume these files should output sound?

     

    I want to thank everyone in this discussion for their contributions especially Hias. Saved me lots of time and headache (although I do think what it took for us to get to a working card on Pi3 is pretty ridiculous). On a side note, does anyone a good API/Library I could use to send audio out through the Cirrus? What i'd like to do is setup the RPi 3 as an A2DP server using Bluetooth, connect another device and send the audio out through the Cirrus.

    • 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 © 2026 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