Wiki

This version is outdated by a newer approved version.DiffThis version (31 Jul 2012 19:37) was approved by Lars-Peter Clausen.The Previously approved version (31 Jul 2012 18:33) is available.Diff

This is an old revision of the document!


HDL AXI SPIDF Linux Driver

Supported Devices

  • HDL AXI SPDIF

Source Code

Status

Source Mainlined?
git In progress

Files

Function File
driver sound/soc/xlnx/axi-spdif.c

Example device initialization

The AXI SPDIF driver is a platform driver and can currently only be instantiated via device tree.

Required devicetree properties:

  • compatible: Should always be “adi,axi-spdif-tx-1.00.a”
  • reg: Base address and register area size
  • clock-frequency: Clock frequency applied at the spdif_data_clk pin in HZ

Example:

    axi_spdif_tx_0: axi-spdif-tx@75c00000 {
        compatible = "adi,axi-spdif-tx-1.00.a";
        reg = <0x75c00000 0x1000>;
        clock-frequency = <12288000>;
    };

DAI configuration

The driver will register one CPU-DAI named after the device itself.

Supported DAI formats

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

Example DAI configuration

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,
};

ADV7511 HDMI + SPDIF board driver

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

Status

Source Mainlined?
In progress In progress

Files

Function File
driver sound/soc/xlnx/adv7511_hdmi.c

Kernel configuration

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

Example device initialization

The ADV7511 HDMI sound board driver is a platform driver and can currently only be instantiated via device tree.

Required devicetree properties:

  • compatible: Should always be “adv7511-hdmi-snd”
  • cpu-dai: Phandle to the SPDIF device devicetree entry
  • pcm: Phandle to the PCM device devicetree entry

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>;
    };

Driver testing

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>

More information

resources/tools-software/linux-drivers/sound/hdl-axi-spidf.1343756233.txt.gz · Last modified: 31 Jul 2012 19:37 by Lars-Peter Clausen