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
    About the element14 Community
  • 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 New reworked driver for Wolfson/Cirrus Logic audio card
  • 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 390 replies
  • Subscribers 767 subscribers
  • Views 50320 views
  • Users 0 members are here
  • raspberry_pi
  • raspeberry_pi_accessories
Related

New reworked driver for Wolfson/Cirrus Logic audio card

hiassoft
hiassoft over 9 years ago

I've been working on a driver rework, mainly to get rid of the requirement to carry around a bunch of patches to upstream driver code, and also to fix some outstanding issues and introduce some new features.

 

Most issues have been ironed out so here's the first public release.

 

Edit: the driver has been included in official RPi kernels. Just run sudo rpi-update to install it.

You still have to install the mixer scripts and add the /etc/modprobe.d file. See my website for details

RPi Linux driver for Wolfson / Cirrus Logic Audio Card

 

Source: https://github.com/HiassofT/rpi-linux/tree/cirrus-ng-4.9.0

Precompiled kernel: http://www.horus.com/~hias/tmp/cirrus/cirrus-ng-linux-4.9.0.tgz

New mixer scripts: http://www.horus.com/~hias/tmp/cirrus/cirrus-ng-scripts.tgz

 

Important notes:

  • The new driver bases on the rather fresh kernel 4.9.0 which means there's some risk of (yet unknown) issues. Use it at your own risk and please run "rpi-update" to get the latest firmware before installing the new driver.
  • The soundcard name has been changed from "snd_rpi_wsp" to "RPi-Cirrus", also several ALSA controls have been removed and new ones were added. This means the old usecase scripts and any custom-made scripts will no longer work. Use the new mixer scripts instead of the old usecase/listen scripts.
  • The new driver supports setting (and receiving) of the S/PDIF channel status bits (aka AES bits). If you add an ALSA card configuration file this means applications like Kodi can do proper AC3/DTS passthrough. A sample card configuration file (plus the mixer scripts) can be found here: https://github.com/HiassofT/rpi-cirrus-config
  • I haven't fully updated the documentation on my website RPi Linux driver for Wolfson / Cirrus Logic Audio Card  yet, will do that during the next weeks/months. But except for the things noted above most stuff should still work as in previous driver versions.

 

Please report back if you tested the driver (either successfully or unsuccessfully), any feedback will help me!

 

so long,

 

Hias

  • Sign in to reply
  • Cancel
Parents
  • gerbrand
    gerbrand over 9 years ago

    About the organisation in the new rpi-functions.sh

     

    two functions are defined but not used:

    reset_rpi_out() and reset_spdif_in()

     

    in reset_rpi_cirrus()

    reset_rpi_in is organised under #reset output mixers and filters

     

    under #reset input signals I would expect reset_spdif_in because of symmetry, not based on my understanding...

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

    Hi Gert!

    About the organisation in the new rpi-functions.sh

     

    two functions are defined but not used:

    reset_rpi_out() and reset_spdif_in()

    Good catch! These functions are useless (the digital inputs to the wm5102 don't have any controls), looks like I added them by mistake. I've removed them now.

     

    As for infos about the mixers: have a look at the datasheet https://www.cirrus.com/cn/pubs/proDatasheet/WM5102_v4.2.pdf

     

    Page 44 contains an overview how the (analog) input blocks work. Basically you have one analog volume control (this is eg IN3L Volume), before the ADC, and one digital volume control after the ADC (eg IN3L Digital Volume), before the digital signal is put onto the internal switching matrix.

     

    It's best to try setting the digital control to 0db (value 128) and use the analog control to tune the input volume. On the DMIC inputs there's no analog control so you have to use the digital one. Better use the digital control only to attenuate the signal - if you use it to bosst the signal any (sampling-) noise present on the signal will be amplified as well.

     

    The filters and output mixers are explained in the digital core section (starting at page 58). Basically each mixer stage consists of 4 selectable inputs (eg HPOUT1 Input 1-4), each with a volume control (eg HPOUT1 Input 1 Volume). Adjust the volume controls when mixing 2 or more signals together (eg RPi sound out together with line-in).

     

    The output stage is explained in the output signal path section (starting at page 153). Each (analog) output has another digital volume control (eg HPOUT1 Digital Volume), bevore the DAC, plus an enable/mute switch (eg HPOUT1 Digital Switch). Use these to control the volume of the outputs.

     

    As for your microphone problem: try increasing the analog input gain (IN3L/R Volume if using line-in, or IN1R if using headset in).

     

    It could also be that the microphone requires a bias voltage (so that the soundcard powers the microphone), if you connected it to line-in try running Record_from_Linein_Micbias.sh or change the "Line Input Micbias" control from off to on.

     

    The headset input has micbias always enabled, but double-check that the pinout of your microphone connector matches the one on the headset jack (there are several incompatible TRRS "standards").

     

    so long,

     

    Hias

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

    Hi Gert!

    About the organisation in the new rpi-functions.sh

     

    two functions are defined but not used:

    reset_rpi_out() and reset_spdif_in()

    Good catch! These functions are useless (the digital inputs to the wm5102 don't have any controls), looks like I added them by mistake. I've removed them now.

     

    As for infos about the mixers: have a look at the datasheet https://www.cirrus.com/cn/pubs/proDatasheet/WM5102_v4.2.pdf

     

    Page 44 contains an overview how the (analog) input blocks work. Basically you have one analog volume control (this is eg IN3L Volume), before the ADC, and one digital volume control after the ADC (eg IN3L Digital Volume), before the digital signal is put onto the internal switching matrix.

     

    It's best to try setting the digital control to 0db (value 128) and use the analog control to tune the input volume. On the DMIC inputs there's no analog control so you have to use the digital one. Better use the digital control only to attenuate the signal - if you use it to bosst the signal any (sampling-) noise present on the signal will be amplified as well.

     

    The filters and output mixers are explained in the digital core section (starting at page 58). Basically each mixer stage consists of 4 selectable inputs (eg HPOUT1 Input 1-4), each with a volume control (eg HPOUT1 Input 1 Volume). Adjust the volume controls when mixing 2 or more signals together (eg RPi sound out together with line-in).

     

    The output stage is explained in the output signal path section (starting at page 153). Each (analog) output has another digital volume control (eg HPOUT1 Digital Volume), bevore the DAC, plus an enable/mute switch (eg HPOUT1 Digital Switch). Use these to control the volume of the outputs.

     

    As for your microphone problem: try increasing the analog input gain (IN3L/R Volume if using line-in, or IN1R if using headset in).

     

    It could also be that the microphone requires a bias voltage (so that the soundcard powers the microphone), if you connected it to line-in try running Record_from_Linein_Micbias.sh or change the "Line Input Micbias" control from off to on.

     

    The headset input has micbias always enabled, but double-check that the pinout of your microphone connector matches the one on the headset jack (there are several incompatible TRRS "standards").

     

    so long,

     

    Hias

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Cancel
Children
No Data
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.

Follow element14

  • X
  • Facebook
  • linkedin
  • YouTube