Hi,
I am trying to use the simple-card framework on a custom i.MX28 board. There are two SAIF modules (saif0 and saif1) instantiated on the cpu. A reference for the platform driver is mxs-sgtl5000. The two cpu dais saif0 and saif1 are connected to the audio codec sgtl5000. saif0 is used to playback and saif1 is used to capture.
Unfortunately, I do not have a sgtl5000 codec, but a pcm5102a, a wm8524 and wm8731 to play with.
For all those codec I copied the mxs-sgtl5000 driver, e.g. mxs- pcm5102a, mxs-wm8524, mxs-wm8731. I will refer to these drivers as mxs- <codec> later. The only difference was in setting the mclk. That's why I'm interested in using the simple-card driver for this platform.
With the help of Mans Rullgard I came up with these parts of the device tree node when using the wm8731 codec:
sound { compatible = "simple-audio-card"; simple-audio-card,name = "hbm10-wm8731"; simple-audio-card,widgets = "Headphone", "Headphone Jack", "Microphone", "Microphone Jack", "Line", "Line Jack"; simple-audio-card,routing = "Headphone Jack", "RHPOUT", "Headphone Jack", "LHPOUT", "LLINEIN", "Line Jack", "MICIN", "Mic Bias", "Mic Bias", "Microphone Jack";
simple-audio-card,dai-link@0 { format = "i2s"; bitclock-master = <&dai0_master>; frame-master = <&dai0_master>; mclk-fs = <256>;
dai0_master: cpu { sound-dai = <&saif0>; };
codec { sound-dai = <&wm8731>; clocks = <&saif0>; }; };
simple-audio-card,dai-link@1 { format = "i2s"; bitclock-master = <&dai1_master>; frame-master = <&dai1_master>; mclk-fs = <256>;
dai1_master: cpu { sound-dai = <&saif1>; };
codec { sound-dai = <&wm8731>; }; }; };
&saif0 { #sound-dai-cells = <0>; pinctrl-names = "default"; pinctrl-0 = <&saif0_pins_a>; assigned-clocks = <&clks 53>; assigned-clock-rates = <12288000>; status = "okay"; };
&saif1 { #sound-dai-cells = <0>; pinctrl-names = "default"; pinctrl-0 = <&saif1_pins_a>; fsl,saif-master = <&saif0>; status = "okay"; };
&i2c0 { pinctrl-names = "default"; pinctrl-0 = <&i2c0_pins_a>; status = "okay";
wm8731: wm8731@1a { #sound-dai-cells = <0>; compatible = "wlf,wm8731"; reg = <0x1a>; }; };
From my understanding of the simple-card framework this should connect
saif0 (cpu dai) <-> wm8731 (codec) and saif1 (cpu dai) <-> wm8731 (codec) as it is done in the probe function of the mxs-<codec> driver, right?
However, this gives me a warning while bringing up the board:
sysfs: cannot create duplicate filename '/devices/soc0/sound/mxs-saif- wm8731-hifi'.
Note, that the simple-card framework works fine for mxs-saif if using only the dai0 link (playback) and leaving the dai1 link (capture).
Am I doing something wrong here?
Is it possible to map the two dai links using the current simple-card framework?
Is anyone using the simple-card framework on mxs-saif using both playback and capture?
Best regards, Jörg Krause