No soundcard detected on imx7d, Open Embedded Toradex BSP 2.8

Hi everyone,

we’re using an imx7d on a custom board and I’m not able to get the audio playback working with Toradex BSP 2.8 with Linux Kernel 4.9.87. It was working before with BSP 2.7 and 4.1.2-0 so I don’t think it’s a hardware problem. I’ve seen that there are some changes in the dtsi files regarding the sound/sgtl5000. In dmesg I can see sgtl5000 but there is no soundcard available in the system. Do I miss something in the device tree or kernel configuration or which configuration is necessary to get the soundcard working? Thanks in advance

dmesg output

[    1.981036] sgtl5000 0-000a: Looking up VDDD-supply from device tree
[    1.981155] sgtl5000 0-000a: Looking up VDDA-supply from device tree
[    1.981215] sgtl5000 0-000a: Looking up VDDIO-supply from device tree
[    1.981282] sgtl5000 0-000a: Looking up VDDD-supply from device tree
[    1.982373] sgtl5000 0-000a: sgtl5000 revision 0x11
...
[    2.234686] ALSA device list:
[    2.237716]   No soundcards found.

imx7-colibri.dtsi diff

43,53c73,85
< 		compatible = "fsl,imx7d-colibri-sgtl5000",
< 			   "fsl,imx-audio-sgtl5000";
< 		model = "imx7-colibri-sgtl5000";
< 		cpu-dai = <&sai1>;
< 		audio-codec = <&codec>;
< 		codec-master;
< 		audio-routing =
< 			"LINE_IN", "Line In Jack",
< 			"MIC_IN", "Mic Jack",
< 			"Mic Jack", "Mic Bias",
< 			"Headphone Jack", "HP_OUT";
---
> 		compatible = "simple-audio-card";
> 		simple-audio-card,name = "imx7-sgtl5000";
> 		simple-audio-card,format = "i2s";
> 		simple-audio-card,bitclock-master = <&dailink_master>;
> 		simple-audio-card,frame-master = <&dailink_master>;
> 		simple-audio-card,cpu {
> 			sound-dai = <&sai1>;
> 		};
> 
> 		dailink_master: simple-audio-card,codec {
> 			sound-dai = <&codec>;
> 			clocks = <&clks IMX7D_AUDIO_MCLK_ROOT_CLK>;
> 		};

cat /proc/devices

Character devices:
  1 mem
  4 /dev/vc/0
  4 tty
  5 /dev/tty
  5 /dev/console
  5 /dev/ptmx
  7 vcs
 10 misc
 13 input
 29 fb
 81 video4linux
 89 i2c
 90 mtd
116 alsa
128 ptm
136 pts
153 spi
166 ttyACM
180 usb
188 ttyUSB
189 usb_device
207 ttymxc
248 hidraw
249 watchdog
250 iio
251 ptp
252 pps
253 rtc
254 gpiochip

cat /proc/asound/cards

--- no soundcards ---

zcat /proc/config.gz |grep SND | grep -v “not set”

CONFIG_SND=y
CONFIG_SND_TIMER=y
CONFIG_SND_PCM=y
CONFIG_SND_DMAENGINE_PCM=y
CONFIG_SND_HWDEP=m
CONFIG_SND_RAWMIDI=m
CONFIG_SND_JACK=y
CONFIG_SND_JACK_INPUT_DEV=y
CONFIG_SND_PCM_TIMER=y
CONFIG_SND_SUPPORT_OLD_API=y
CONFIG_SND_PROC_FS=y
CONFIG_SND_VERBOSE_PROCFS=y
CONFIG_SND_DRIVERS=y
CONFIG_SND_HDA_PREALLOC_SIZE=64
CONFIG_SND_ARM=y
CONFIG_SND_SPI=y
CONFIG_SND_USB=y
CONFIG_SND_USB_AUDIO=m
CONFIG_SND_SOC=y
CONFIG_SND_SOC_GENERIC_DMAENGINE_PCM=y
CONFIG_SND_SOC_FSL_ASRC=y
CONFIG_SND_SOC_FSL_SAI=y
CONFIG_SND_SOC_FSL_SSI=y
CONFIG_SND_SOC_FSL_SPDIF=y
CONFIG_SND_SOC_FSL_ESAI=y
CONFIG_SND_SOC_IMX_PCM_DMA=y
CONFIG_SND_SOC_IMX_AUDMUX=y
CONFIG_SND_IMX_SOC=y
CONFIG_SND_SOC_IMX_SGTL5000=y
CONFIG_SND_SOC_I2C_AND_SPI=y
CONFIG_SND_SOC_CS42XX8=y
CONFIG_SND_SOC_CS42XX8_I2C=y
CONFIG_SND_SOC_SGTL5000=y

Running device tree
dtc -I fs /sys/firmware/devicetree/base

...

        sound {
                simple-audio-card,name = "imx7-sgtl5000";
                compatible = "simple-audio-card";
                simple-audio-card,frame-master = <0x5c>;
                simple-audio-card,bitclock-master = <0x5c>;
                simple-audio-card,format = "i2s";

                simple-audio-card,cpu {
                        sound-dai = <0x5d>;
                };

                simple-audio-card,codec {
                        clocks = <0x1 0x14a>;
                        phandle = <0x5c>;
                        linux,phandle = <0x5c>;
                        sound-dai = <0x5e>;
                };
        };
...

You probably face the following known issue. Just add CONFIG_SND_SIMPLE_CARD to your kernel configuration as suggested.