element14 Community
element14 Community
    Register Log In
  • Site
  • Search
  • Log In Register
  • Members
    Members
    • Benefits of Membership
    • Achievement Levels
    • Members Area
    • Personal Blogs
    • Feedback and Support
    • What's New on element14
  • Learn
    Learn
    • Learning Center
    • eBooks
    • STEM Academy
    • Webinars, Training and Events
    • More
  • Technologies
    Technologies
    • 3D Printing
    • FPGA
    • Industrial Automation
    • Internet of Things
    • Power & Energy
    • Sensors
    • More
  • Challenges & Projects
    Challenges & Projects
    • Design Challenges
    • element14 presents
    • Project14
    • Arduino Projects
    • Raspberry Pi Projects
    • More
  • Products
    Products
    • Arduino
    • Dev Tools
    • Manufacturers
    • Raspberry Pi
    • RoadTests & Reviews
    • Avnet Boards Community
    • More
  • 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
      •  Korea (Korean)
      •  Malaysia
      •  New Zealand
      •  Philippines
      •  Singapore
      •  Taiwan
      •  Thailand (Thai)
      • 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
Raspberry Pi
  • Products
  • More
Raspberry Pi
Forum Driver fixes and updates to kernel 3.18.16 and 4.0.5
  • Blog
  • Forum
  • Documents
  • Events
  • Members
  • Mentions
  • Sub-Groups
  • Tags
  • More
  • Cancel
  • New
Raspberry Pi requires membership for participation - click to join
Actions
  • Share
  • More
  • Cancel
Forum Thread Details
  • Replies 180 replies
  • Subscribers 148 subscribers
  • Views 3486 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 6 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

  • Reply
  • Cancel
  • Cancel

Top Replies

  • hiassoft
    hiassoft over 5 years ago in reply to Former Member +3

    I just had a look at volumio 2 (RC2 hotfix):

     

    It's setup is a quite different to Raspbian, it uses an initrd which sets up squashfs+overlayfs for the root partition. If you update the kernel, the modules…

  • hiassoft
    hiassoft over 6 years ago +2

    I've uploaded a new kernel build, based upon 4.1.19:

    http://www.horus.com/~hias/tmp/cirrus/cirrus-linux-4.1.19.tgz

     

    I finally found out what was causing the issues on the new RPi3 (other soundcards where…

  • markzed
    markzed over 6 years ago +1

    Thanks a bunch for doing this. For those of us who are really noobs (like me) here are detailed instructions.

     

    For 3.18.16

     

    • Get the 3.18.16 raspbian image. I used the Raspbian image provided by Raspberry Pi…
Parents
  • hiassoft
    hiassoft over 6 years ago

    I've uploaded a new kernel build, based upon 4.1.19:

    http://www.horus.com/~hias/tmp/cirrus/cirrus-linux-4.1.19.tgz

     

    I finally found out what was causing the issues on the new RPi3 (other soundcards where effected as well), this kernel build contains all the needed patches. Note: be sure you have a very recent Raspbian installation or update the GPU firmware if you are using a RPi3.

     

    Other changes in this build:

    • Add missing .owner field in snd_soc_card
      This prevents module unloading while the card is in use (which leads to a kernel crash) and makes ALSA slot ordering working.
    • Silence probe deferral messages from register card

     

    I've updated the docs on my webpage and added instructions how to use the slot ordering and how to disable the RPi on-board audio device

    http://www.horus.com/~hias/cirrus-driver.html

     

    so long,

     

    Hias

    • Cancel
    • Up +2 Down
    • Reply
    • Cancel
  • Former Member
    Former Member over 6 years ago in reply to hiassoft

    Hi,

     

    Today I acquired a Cirrus Audio Card and tested it with the kernel build 4.1.19. Everything works great until I load the experimental OpenGL support by adding dtoverlay=vc4-kms-v3d to /boot/config.txt -- The Cirrus card is nowhere to be found.

     

    Combing through dmesg I found this:

    bcm2708-i2s 3f203000.i2s: can't request region for resource [mem 0x3f101098-0x3f10109f]

    bcm2708-i2s: probe of 3f203000.i2s failed with error -16

     

    vc4-kms-v3d-overlay.dts doesn't seem to mention anything about using i2s so I'm stumped on what's the issue.

     

    Any hope or hints for further debugging?

    • Cancel
    • Up 0 Down
    • Reply
    • Cancel
  • clem57
    clem57 over 6 years ago in reply to Former Member

    This overlays the device tree not adds to it. Check it out.

    • Cancel
    • Up 0 Down
    • Reply
    • Cancel
  • hiassoft
    hiassoft over 6 years ago in reply to Former Member

    Currently I2S soundcards and the VC4 drm driver can't be used at the same time.

     

    The vc4 driver uses the clock framework (which manages all clocks of the SoC) but the I2S driver hasn't yet been converted to use the clock framework. So what's happening here is that the clock framework grabs the memory locations of all the clocks, bcm2708-i2s tries to grab the locations of the PCM clock as well, but fails because they are already used by the clock framework.

     

    There's already been some work to convert the bcm I2S driver to use the clock framework, but it's not that simple and it hasn't been included in the upstream kerrnel yet. Read this (rather lengthy) discussion on github for details:

    https://github.com/raspberrypi/linux/issues/1231

     

    so long,

     

    Hias

    • Cancel
    • Up 0 Down
    • Reply
    • Cancel
Reply
  • hiassoft
    hiassoft over 6 years ago in reply to Former Member

    Currently I2S soundcards and the VC4 drm driver can't be used at the same time.

     

    The vc4 driver uses the clock framework (which manages all clocks of the SoC) but the I2S driver hasn't yet been converted to use the clock framework. So what's happening here is that the clock framework grabs the memory locations of all the clocks, bcm2708-i2s tries to grab the locations of the PCM clock as well, but fails because they are already used by the clock framework.

     

    There's already been some work to convert the bcm I2S driver to use the clock framework, but it's not that simple and it hasn't been included in the upstream kerrnel yet. Read this (rather lengthy) discussion on github for details:

    https://github.com/raspberrypi/linux/issues/1231

     

    so long,

     

    Hias

    • Cancel
    • Up 0 Down
    • Reply
    • Cancel
Children
  • Former Member
    Former Member over 6 years ago in reply to hiassoft

    Thanks for the quick and accurate answer. So there's hope that some day it will work...

    • Cancel
    • Up 0 Down
    • Reply
    • Cancel
Element14

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 © 2022 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

  • Facebook
  • Twitter
  • linkedin
  • YouTube