Tiny Core Linux
Tiny Core Base => Raspberry Pi => Topic started by: sbp on February 10, 2014, 01:49:45 PM
-
Hi
I have managed to make e new version of piCore build on kernel 3.12.9 and piCore 5.2 alpha.
It is working fine, I have updated the Alsa-package and both the analog output (ALSA bcm2835) as well as HiFiBerry DAC I2S and USB audio is working fine as before.
However, the reason for using the 3.12.9 kernel was an attempt to support the HiFiBerry Digi, so that our Raspberry could get a digital audio out.
The modules are present and seems to be loading, according to the author of the modules the following need to be there for the digital card to function:
snd_soc_bcm2708_i2s
bcm2708_dmaengine
snd_soc_wm8804
snd_soc_hifiberry_digi
He also mentioned that it might need I2C modules??
I have a few errors when booting that seems important:
[ 19.361317] bcm2708-i2s bcm2708-i2s.0: Failed to create debugfs directory
[ 20.642630] usbcore: registered new interface driver snd-usb-audio
[ 23.651908] FAT-fs (sda1): Volume was not properly unmounted. Some data may be corrupt. Please run fsck.
[ 23.723027] usbcore: deregistering interface driver snd-usb-audio
[ 23.940820] usbcore: registered new interface driver snd-usb-audio
[ 24.265022] wm8804 1-003b: Failed to read device ID: -1
[ 24.265060] wm8804 1-003b: ASoC: failed to probe CODEC -1
[ 24.265146] snd-hifiberry-digi snd-hifiberry-digi.0: ASoC: failed to instantiate card -1
[ 24.265235] snd-hifiberry-digi snd-hifiberry-digi.0: snd_soc_register_card() failed: -1
[ 24.265276] snd-hifiberry-digi: probe of snd-hifiberry-digi.0 failed with error -1
However this is the output from lsmod:
tc@piCorePlayer:~$ lsmod
Module Size Used by Not tainted
snd_soc_hifiberry_digi 2572 0
bcm2708_dmaengine 5104 0
virt_dma 2021 1 bcm2708_dmaengine
snd_usb_audio 116218 0
snd_usbmidi_lib 18720 1 snd_usb_audio
snd_rawmidi 20133 1 snd_usbmidi_lib
snd_seq_device 6034 1 snd_rawmidi
snd_hwdep 5917 1 snd_usb_audio
snd_bcm2835 16116 1
snd_soc_wm8804 7692 0
snd_soc_bcm2708_i2s 5486 0
snd_soc_core 115066 3 snd_soc_hifiberry_digi,snd_soc_wm8804,snd_soc_bcm2708_i2s
snd_pcm_dmaengine 4564 1 snd_soc_core
snd_pcm 74840 5 snd_usb_audio,snd_bcm2835,snd_soc_core,snd_pcm_dmaengine
snd_page_alloc 4680 1 snd_pcm
snd_timer 19270 1 snd_pcm
snd_compress 7974 1 snd_soc_core
snd 56397 11 snd_usb_audio,snd_usbmidi_lib,snd_rawmidi,snd_seq_device,snd_hwdep,snd_bcm2835,snd_soc_core,snd_pcm,snd_timer,snd_compress
regmap_i2c 1522 2 snd_soc_wm8804,snd_soc_core
regmap_spi 1778 2 snd_soc_wm8804,snd_soc_core
regmap_mmio 2673 1 snd_soc_bcm2708_i2s
But no HiFiBerry Digi card is to be seen:
tc@piCorePlayer:~$ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: ALSA [bcm2835 ALSA], device 0: bcm2835 ALSA [bcm2835 ALSA]
Subdevices: 7/8
Subdevice #0: subdevice #0
Subdevice #1: subdevice #1
Subdevice #2: subdevice #2
Subdevice #3: subdevice #3
Subdevice #4: subdevice #4
Subdevice #5: subdevice #5
Subdevice #6: subdevice #6
Subdevice #7: subdevice #7
tc@piCorePlayer:~$
Can anybody see what is wrong?
Steen
-
Hi
I got an answer from the author of the modules. He wrote that I probably needed:
i2c-bcm2708
i2c-dev
So Now I'm searching for these modules.
I don't know if they are produced (I used the .config file from bmarkus piCore5.2 alpha build).
Steen
-
i2c-bcm2708 and i2c-dev are built into the kernel, not modules, see modules.builtin
-
Thanks.
Is there a Way to test if they are loaded/available?
Or is that a stupid question?
The reason for asking is that when you read about these modules on raspberry forums, they are always mentioned as blacklisted and not loaded.
Steen
-
Thanks.
Is there a Way to test if they are loaded/available?
Or is that a stupid question?
The reason for asking is that when you read about these modules on raspberry forums, they are always mentioned as blacklisted and not loaded.
Steen
i2c works fine, I'm using 4 different i2c modules on bus 1 and the hifiberry analog dac on bus 0.
but to make you feel better. look at the kernel config in the /proc directory.
When you compile a kernel, you have 3 options
y - Means the driver is compiled directly into the kernel, and is always present.
m - The driver is compiled as a module that will be loaded after the kernel is booted.
n - the driver is not built or available to be used later.
starting with piCore 5.1. these 2 drivers are now marked "y" in the kernel .config. They are there. Run
i2cdetect 0 or i2cdetect 1 (i2cdetect is in the i2ctools extension)
-
Make sure you are loading the drivers in the correct order. If you load them in the wrong order, it will fail.
I have 3.12.9 built as well, I'll try to load the driver tonight and see if it works for me.
-
I get the same error on my system. And this system has a hifiberry_dac(analog), so I know the i2c is working.
I know the analog dac is a only a client on the i2c bus, the rpi has no idea that it is there, and the drivers will load without the card.
I have not searched for information on the Digi version, will the drivers load without the card present?
-
I get the same error on my system. And this system has a hifiberry_dac(analog), so I know the i2c is working.
I know the analog dac is a only a client on the i2c bus, the rpi has no idea that it is there, and the drivers will load without the card.
I have not searched for information on the Digi version, will the drivers load without the card present?
Just got an answer from Daniel, the author of the HiFiBerry modules:
DAC and Digi drivers are different. The DAC driver has no idea about the hardware itself. The Digi driver has to initialize the hardware by I2C. This does not seem to work in your setup.
.
So now I'm testing whether the card is dead or not. Next I will need to figure out what to do.
Steen
-
Just got an answer from Daniel, the author of the HiFiBerry modules:
DAC and Digi drivers are different. The DAC driver has no idea about the hardware itself. The Digi driver has to initialize the hardware by I2C. This does not seem to work in your setup.
.
So now I'm testing whether the card is dead or not. Next I will need to figure out what to do.
Steen
I looked at the driver during lunch today, it is definitely probing the card. Do you have a Hifiberry_Dac that you could put on to test your i2c bus on the RPi. If the RPi is working, then it must be something witht he Digi board.
-
I definitely think the card is dead. I just downloaded a test image with a full raspbian from the hifiberry digi web page, and it produces the same errors during booting.
So I will need a replacement card.
Thanks for looking into this
Steen
-
I definitely think the card is dead. I just downloaded a test image with a full raspbian from the hifiberry digi web page, and it produces the same errors during booting.
So I will need a replacement card.
Thanks for looking into this
Steen
I'm assuming that you inspected your solder connections. I've done quite a bit of soldering, and these cards were a little trickier to solder than most.
-
Hi all.
I have got a new HiFiBerry Digi card and therefore would like to be able to use it in microcore (piCorePlayer). The first card I received was faulty, but the new one is working fine in raspbian, but unfortunately it is not working in microcore.
This is what is loaded at start:
sudo modprobe snd_soc_bcm2708
sudo modprobe snd_soc_bcm2708_i2s
sudo modprobe bcm2708_dmaengine
sudo modprobe snd_soc_wm8804
sudo modprobe snd_soc_hifiberry_digi
This is lsmod:
tc@piCorePlayer:~$ lsmod
Module Size Used by Not tainted
bcm2708_dmaengine 5104 0
virt_dma 2021 1 bcm2708_dmaengine
snd_soc_hifiberry_digi 2572 0
snd_usb_audio 116218 0
snd_usbmidi_lib 18720 1 snd_usb_audio
snd_rawmidi 20133 1 snd_usbmidi_lib
snd_seq_device 6034 1 snd_rawmidi
snd_hwdep 5917 1 snd_usb_audio
snd_bcm2835 16116 0
8192cu 550984 0
snd_soc_bcm2708_i2s 5486 0
snd_soc_wm8804 7692 0
snd_soc_core 115066 3 snd_soc_hifiberry_digi,snd_soc_bcm2708_i2s,snd_soc_wm8804
snd_pcm_dmaengine 4564 1 snd_soc_core
snd_pcm 74840 4 snd_usb_audio,snd_bcm2835,snd_soc_core,snd_pcm_dmaengine
snd_page_alloc 4680 1 snd_pcm
snd_timer 19270 1 snd_pcm
snd_compress 7974 1 snd_soc_core
snd 56397 10 snd_usb_audio,snd_usbmidi_lib,snd_rawmidi,snd_seq_device,snd_hwdep,snd_bcm2835,snd_soc_core,snd_pcm,snd_timer,snd_compress
regmap_i2c 1522 2 snd_soc_wm8804,snd_soc_core
regmap_spi 1778 2 snd_soc_wm8804,snd_soc_core
regmap_mmio 2673 1 snd_soc_bcm2708_i2s
This is the output from dmesg in the interesting area:
[ 30.550406] wm8804 1-003b: revision E
[ 30.551879] bcm2708-i2s bcm2708-i2s.0: Missing dma channel for stream: 0
[ 30.551914] bcm2708-i2s bcm2708-i2s.0: ASoC: pcm constructor failed: -22
[ 30.551936] snd-hifiberry-digi snd-hifiberry-digi.0: ASoC: can't create pcm HifiBerry Digi HiFi :-22
[ 30.551953] snd-hifiberry-digi snd-hifiberry-digi.0: ASoC: failed to instantiate card -22
[ 30.552213] snd-hifiberry-digi snd-hifiberry-digi.0: snd_soc_register_card() failed: -22
[ 30.552249] snd-hifiberry-digi: probe of snd-hifiberry-digi.0 failed with error -22
And no digital soundcard is found:
tc@piCorePlayer:~$ aplay -L
null
Discard all samples (playback) or generate zero samples (capture)
sysdefault:CARD=ALSA
bcm2835 ALSA, bcm2835 ALSA
Default Audio Device
*******************************************
The following is from Raspbian were it is working:
This is dmesg from a working raspbian
5.046655] bcm2708_i2c_init_pinmode(0,0)
[ 5.189238] bcm2708_i2c_init_pinmode(0,1)
[ 5.198487] bcm2708_i2c bcm2708_i2c.0: BSC0 Controller at 0x20205000 (irq 79) (baudrate 100000)
[ 5.565192] bcm2708_i2c_init_pinmode(1,2)
[ 5.683164] bcm2708_i2c_init_pinmode(1,3)
[ 5.759676] bcm2708_i2c bcm2708_i2c.1: BSC1 Controller at 0x20804000 (irq 79) (baudrate 100000)
[ 6.592136] bcm2708-i2s bcm2708-i2s.0: Failed to create debugfs directory
[ 17.463406] EXT4-fs (mmcblk0p2): re-mounted. Opts: (null)
[ 17.979715] EXT4-fs (mmcblk0p2): re-mounted. Opts: (null)
[ 19.047572] wm8804 1-003b: revision E
[ 19.061571] snd-hifiberry-digi snd-hifiberry-digi.0: wm8804-spdif <-> bcm2708-i2s.0 mapping ok
And it finds the digital card:
aplay -L
null
Discard all samples (playback) or generate zero samples (capture)
default:CARD=sndrpihifiberry
snd_rpi_hifiberry_digi,
Default Audio Device
sysdefault:CARD=sndrpihifiberry
snd_rpi_hifiberry_digi,
Default Audio Device
And this is the loaded modules:
pi@raspberrypi ~ $ lsmod
Module Size Used by
snd_soc_hifiberry_digi 2556 0
bcm2708_dmaengine 5108 2
virt_dma 2273 1 bcm2708_dmaengine
snd_soc_wm8804 7821 1
snd_soc_bcm2708_i2s 5474 2
regmap_mmio 2806 1 snd_soc_bcm2708_i2s
snd_soc_core 131268 3 snd_soc_wm8804,snd_soc_hifiberry_digi,snd_soc_bcm2708_i2s
snd_compress 8076 1 snd_soc_core
regmap_i2c 1645 2 snd_soc_wm8804,snd_soc_core
regmap_spi 1897 2 snd_soc_wm8804,snd_soc_core
snd_pcm 81593 1 snd_soc_core
snd_page_alloc 5156 1 snd_pcm
snd_seq 53769 0
snd_seq_device 6473 1 snd_seq
snd_timer 20133 2 snd_pcm,snd_seq
leds_gpio 2059 0
evdev 9419 1
led_class 3688 1 leds_gpio
snd 61291 6 snd_soc_core,snd_timer,snd_pcm,snd_seq,snd_seq_device,snd_compress
i2c_bcm2708 3997 0
I have tried to load the modules in different order, but somehow microcore can't use the digital sound card. I'm suspecting that it might have something to do with the i2c modules, but I really don't know??
Steen
-
Which piCore version are you using? Also please share the complete dmesg files, not only parts.
-
With piCore you have the bcm_2835 and usb audio modulos loaded, with Raspbian they are not loaded. Is there any change if they are not loaded?
-
Good morning bmarcus.
Thank you for your thoughts about the problem. Based on this I tried various things and with your newest piCore5.2 I think that I can get it to work. I need to try a few times more in order to get it right, but it seems possible.
But now I have a really silly question. Somehow I defined /mnt/sda1/tce as my tce directory. But I want it to be /mnt/mmcblk0p2/tce, and I can't figure out how to change that?
Using tce-setdrive state that it is already defined.
Steen
-
cd /mnt/mmcblk0p2
mkdir tce
Than copy content from sda1/tce, delete tce dir and reboot.
-
bmarkus - thanks I did that and it worked.
I'm now able to play 192kHz 24b via piCorePlayer and the HiFiBerry Digi card - the sound is very good.
I had to make some small hacks to make it work.
in bootlocal I needed to add:
sudo modprobe -r snd_soc_wm8731
sudo modprobe -r snd_soc_hifiberry_digi
Both of the modules are loaded and therefore the hifiberry digi card can't load properly.
Then I load the following modules (and have to load once again the hifiberry digi module)
sudo modprobe snd_soc_bcm2708_i2s
sudo modprobe bcm2708_dmaengine
#sudo modprobe snd_soc_pcm5102a
sudo modprobe snd_soc_wm8804
sudo modprobe snd_soc_hifiberry_digi
And then the HiFiBerry digi card shows up.
tc@piCorePlayer:~$ aplay -L
null
Discard all samples (playback) or generate zero samples (capture)
sysdefault:CARD=ALSA
bcm2835 ALSA, bcm2835 ALSA
Default Audio Device
sysdefault:CARD=sndrpihifiberry
snd_rpi_hifiberry_digi,
Default Audio Device
So my question now is. Why are snd_soc_wm8731 and the snd_soc_hifiberry_digi modules automatically loaded.
This must be defined somewhere, so where is the loading of modules defined. In other distros it seems to be in /etc/modules.conf but such a file is not found in micrcore.
Steen
-
Sound module tcz has an autostart scripts, which looks unneded.