[alsa-devel] Simple-card without codec for testing purpose
arnaud.mouiche at invoxia.com
arnaud.mouiche at invoxia.com
Mon Nov 23 10:58:32 CET 2015
To answer to myself:
- there are some "virtual" codecs available : "bt-sco",
"linux,spdif-dit" and "linux,spdif-dir". but none of them is fully generic.
- a "snd-soc-dummy-dai" codec is implemented in soc-utils.c. yet, no
device-tree bindings are available, except if a patch like the following
one is applied
--- a/sound/soc/soc-utils.c
+++ b/sound/soc/soc-utils.c
@@ -19,6 +19,7 @@
#include <sound/pcm.h>
#include <sound/pcm_params.h>
#include <sound/soc.h>
+#include <linux/module.h>
int snd_soc_calc_frame_size(int sample_size, int channels, int tdm_slots)
{
@@ -151,9 +152,18 @@ static int snd_soc_dummy_remove(struct
platform_device *pdev)
return 0;
}
+#ifdef CONFIG_OF
+static const struct of_device_id soc_dummy_ids[] = {
+ { .compatible = "linux,snd-soc-dummy", },
+ { }
+};
+MODULE_DEVICE_TABLE(of, soc_dummy_ids);
+#endif
+
static struct platform_driver soc_dummy_driver = {
.driver = {
.name = "snd-soc-dummy",
+ .of_match_table = of_match_ptr(soc_dummy_ids),
},
.probe = snd_soc_dummy_probe,
.remove = snd_soc_dummy_remove,
Once done, here is a DTS example for imx6sl:
&audmux {
ssi3 {
fsl,audmux-port = <6>;
fsl,port-config = <
#ifdef SSI_TEST_MASTER
0x00000000
#else
(IMX_AUDMUX_V2_PTCR_TFSDIR |
IMX_AUDMUX_V2_PTCR_TFSEL(4) |
IMX_AUDMUX_V2_PTCR_TCLKDIR |
IMX_AUDMUX_V2_PTCR_TCSEL(4))
#endif
IMX_AUDMUX_V2_PDCR_RXDSEL(4)
>;
};
port5 {
fsl,audmux-port = <4>;
fsl,port-config = <
#ifdef SSI_TEST_MASTER
(IMX_AUDMUX_V2_PTCR_TFSDIR |
IMX_AUDMUX_V2_PTCR_TFSEL(6) |
IMX_AUDMUX_V2_PTCR_TCLKDIR |
IMX_AUDMUX_V2_PTCR_TCSEL(6))
#else
0x00000000
#endif
IMX_AUDMUX_V2_PDCR_RXDSEL(6)
>;
};
};
&ssi3 {
status = "okay";
// select the a clock parent suitable for 48000 Hz sampling rate
assigned-clocks = <&clks IMX6SL_CLK_SSI3_SEL>, <&clks IMX6SL_CLK_SSI3>;
assigned-clock-parents = <&clks IMX6SL_CLK_PLL4_AUDIO_DIV>;
assigned-clock-rates = <0>, <49152000>;
};
/ {
codec_test: codec_test {
compatible = "linux,snd-soc-dummy";
#sound-dai-cells = <0>;
};
sound at 2 {
compatible = "simple-audio-card";
simple-audio-card,name = "test";
simple-audio-card,format="dsp_a";
#ifdef SSI_TEST_MASTER
simple-audio-card,frame-master = <&sound2_ssi>;
simple-audio-card,bitclock-master = <&sound2_ssi>;
#else
simple-audio-card,frame-master = <&codec_test>;
simple-audio-card,bitclock-master = <&codec_test>;
#endif
sound2_ssi: simple-audio-card,cpu {
sound-dai = <&ssi3>;
system-clock-frequency = <1536000>;
dai-tdm-slot-num = <2>;
dai-tdm-slot-width = <16>;
};
sound2codec: simple-audio-card,codec {
sound-dai = <&codec_test>;
};
};
};
Le 20/11/2015 02:24, Caleb Crome a écrit :
> I've been wondering about that too. I don't know how to do it easily.
>
> -Caleb
>
>
> On Thu, Nov 19, 2015 at 9:26 AM, arnaud.mouiche at invoxia.com
> <arnaud.mouiche at invoxia.com> wrote:
>> Hello,
>>
>> I'm starting debugging / testing all the fsl_ssi issues (see Caleb's
>> previous post).
>>
>> First step I just need to setup a DTS entry for "simple-card" + fake codec
>> to generate arbitrary PCM bus output (1 to 16 channels, various TDM, various
>> sampling rate and format and master/slave role)
>> I will then plug my logical analyser, or do some loopback, or plug a FPGA to
>> generate/check some patterns.
>>
>> Is there such "fake codec" somewhere. Indeed, something that look like the
>> bt-sco codec, but without rate/format/channel limitations ?
>> Or does the "simple-card" even needs one ?
>>
>> Regards,
>> Arnaud
More information about the Alsa-devel
mailing list