This is an old revision of the document!
Source | Mainlined? |
---|---|
git | In progress |
Function | File |
---|---|
driver | sound/soc/xlnx/axi-spdif.c |
The AXI SPDIF driver is a platform driver and can currently only be instantiated via device tree.
Required devicetree properties:
Example:
axi_spdif_tx_0: axi-spdif-tx@75c00000 { compatible = "adi,axi-spdif-tx-1.00.a"; reg = <0x75c00000 0x1000>; clock-frequency = <12288000>; };
The driver will register one CPU-DAI named after the device itself.
Name | Supported by driver | Description |
---|---|---|
SND_SOC_DAIFMT_I2S | no | I2S Justified mode |
SND_SOC_DAIFMT_RIGHT_J | no | Right Justified mode |
SND_SOC_DAIFMT_LEFT_J | no | Left Justified mode |
SND_SOC_DAIFMT_DSP_A | no | data MSB after FRM LRC |
SND_SOC_DAIFMT_DSP_B | no | data MSB during FRM LRC |
SND_SOC_DAIFMT_AC97 | no | AC97 mode |
SND_SOC_DAIFMT_PDM | no | Pulse density modulation |
SND_SOC_DAIFMT_SPDIF | yes | SPDIF mode |
SND_SOC_DAIFMT_NB_NF | yes | Normal bit- and frameclock |
SND_SOC_DAIFMT_NB_IF | no | Normal bitclock, inverted frameclock |
SND_SOC_DAIFMT_IB_NF | no | Inverted frameclock, normal bitclock |
SND_SOC_DAIFMT_IB_IF | no | Inverted bit- and frameclock |
SND_SOC_DAIFMT_CBM_CFM | no | Codec bit- and frameclock master |
SND_SOC_DAIFMT_CBS_CFM | no | Codec bitclock slave, frameclock master |
SND_SOC_DAIFMT_CBM_CFS | no | Codec bitclock master, frameclock slave |
SND_SOC_DAIFMT_CBS_CFS | yes | Codec bit- and frameclock slave |
static struct snd_soc_dai_link hdmi_dai_link = { .name = "HDMI", .stream_name = "HDMI", .cpu_dai_name = "75c00000.axi-spdif-tx", .platform_name = "xilinx_pcm_audio.2", .codec_name = "adv7511.0-0039", .codec_dai_name = "adv7511", .dai_fmt = SND_SOC_DAIFMT_SPDIF | SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_CBS_CFS, }; static struct snd_soc_card hdmi_card = { .name = "HDMI monitor", .owner = THIS_MODULE, .dai_link = &hdmi_dai_link, .num_links = 1, };
The HDL AXI SPDIF driver is currently used in conjunction with the ADV7511 HDMI transmitter on various FPGA platforms. For these platforms there exist a ASoC board driver which provides the necessary information on how both device are interconnected, so that a ALSA sound card can be instantiated.
Source | Mainlined? |
---|---|
In progress | In progress |
Function | File |
---|---|
driver | sound/soc/xlnx/adv7511_hdmi.c |
Enable ALSA SoC evaluation board driver:
Device Drivers ---> <*> Sound card support ---> <*> Advanced Linux Sound Architecture ---> <*> ALSA for SoC audio support ---> <*> SoC Audio for Xilinx based boards <*> ADV7511 HDMI transmitter sound support
The ADV7511 HDMI sound board driver is a platform driver and can currently only be instantiated via device tree.
Required devicetree properties:
Example:
axi_dma_0: axidma@40400000 { #address-cells = <1>; #size-cells = <1>; #dma-cells = <1>; compatible = "xlnx,axi-dma"; reg = <0x40400000 0x1000>; xlnx,sg-include-stscntrl-strm = <0x0>; dma-channel@40400000 { compatible = "xlnx,axi-dma-mm2s-channel"; interrupts = <0 58 0x4>; xlnx,datawidth = <0x20>; xlnx,include-dre = <0x0>; }; }; xilinx_pcm_audio: xilinx_pcm_audio { compatible = "xilinx-pcm-audio"; #size-cells = <0>; #address-cells = <1>; playback: stream@0 { reg = <0>; dma-request = <&axi_dma_0 0>; }; }; axi_spdif_tx_0: axi-spdif-tx@0x75c00000 { compatible = "adi,axi-spdif-tx-1.00.a"; reg = <0x75c00000 0x1000>; clock-frequency = <12288000>; }; adv7511_hdmi_snd: adv7511_hdmi_snd { compatible = "adv7511-hdmi-snd"; cpu-dai = <&axi_spdif_tx_0>; pcm = <&xilinx_pcm_audio>; };
Make sure the sound card is properly instantiated.
<box 100% green|shell prompt running on the target>
root:/> aplay -L ...</box>
<box 100% green|shell prompt running on the target>
root:/> speakertest -c 2 ...</box>