cancel
Showing results for 
Search instead for 
Did you mean: 

Using the CS41L51 audio chip while using SPDIF will cause the following errors.

User.44
Associate II

0693W000003Qs8IQAS.png

My device tree configuration

  {
  spdif_out: spdif-out {
        #sound-dai-cells = <0>;
        compatible = "linux,spdif-dit";
        status = "okay";
 
        spdif_out_port: port {
            spdif_out_endpoint: endpoint {
                remote-endpoint = <&sai4a_endpoint>;
            };
        };
    };
 
    spdif_in: spdif-in {
        #sound-dai-cells = <0>;
        compatible = "linux,spdif-dir";
        status = "okay";
 
        spdif_in_port: port {
            spdif_in_endpoint: endpoint {
                remote-endpoint = <&spdifrx_endpoint>;
            };
        };
    };
    sound: sound {
        compatible = "audio-graph-card";
        label = "STM32MP1-DK";
        routing =
            "Playback" , "MCLK",
            "Capture" , "MCLK",
            "MICL" , "Mic Bias";
        dais = <&sai2a_port &sai2b_port  &sai4a_port &spdifrx_port &i2s2_port>;
        status = "okay";
    };
};
&i2c4 {
    pinctrl-names = "default", "sleep";
    pinctrl-0 = <&i2c4_pins_a>;
    pinctrl-1 = <&i2c4_pins_sleep_a>;
    i2c-scl-rising-time-ns = <185>;
    i2c-scl-falling-time-ns = <20>;
    status = "okay";
    /delete-property/dmas;
    /delete-property/dma-names;
    cs42l51: cs42l51@4a {
        compatible = "cirrus,cs42l51";
        reg = <0x4a>;
        #sound-dai-cells = <0>;
        VL-supply = <&v3v3>;
        VD-supply = <&v1v8_audio>;
        VA-supply = <&v1v8_audio>;
        VAHP-supply = <&v1v8_audio>;
        reset-gpios = <&gpioz 7 GPIO_ACTIVE_LOW>;
        clocks = <&sai2a>;
        clock-names = "MCLK";
        status = "okay";
 
        cs42l51_port: port {
            #address-cells = <1>;
            #size-cells = <0>;
 
            cs42l51_tx_endpoint: endpoint@0 {
                reg = <0>;
                remote-endpoint = <&sai2a_endpoint>;
                frame-master;
                bitclock-master;
            };
 
            cs42l51_rx_endpoint: endpoint@1 {
                reg = <1>;
                remote-endpoint = <&sai2b_endpoint>;
                frame-master;
                bitclock-master;
            };
        };
    };
};
&sai2 {
    clocks = <&rcc SAI2>, <&rcc PLL3_Q>, <&rcc PLL3_R>;
    clock-names = "pclk", "x8k", "x11k";
    pinctrl-names = "default", "sleep";
    pinctrl-0 = <&sai2a_pins_a>, <&sai2b_pins_b>;
    pinctrl-1 = <&sai2a_sleep_pins_a>, <&sai2b_sleep_pins_b>;
    status = "okay";
 
    sai2a: audio-controller@4400b004 {
        #clock-cells = <0>;
        dma-names = "tx";
        clocks = <&rcc SAI2_K>;
        clock-names = "sai_ck";
        status = "okay";
 
        sai2a_port: port {
            sai2a_endpoint: endpoint {
                remote-endpoint = <&cs42l51_tx_endpoint>;
                format = "i2s";
                mclk-fs = <256>;
                dai-tdm-slot-num = <2>;
                dai-tdm-slot-width = <32>;
            };
        };
    };
 
    sai2b: audio-controller@4400b024 {
        dma-names = "rx";
        st,sync = <&sai2a 2>;
        clocks = <&rcc SAI2_K>, <&sai2a>;
        clock-names = "sai_ck", "MCLK";
        status = "okay";
 
        sai2b_port: port {
            sai2b_endpoint: endpoint {
                remote-endpoint = <&cs42l51_rx_endpoint>;
                format = "i2s";
                mclk-fs = <256>;
                dai-tdm-slot-num = <2>;
                dai-tdm-slot-width = <32>;
            };
        };
    };
};
 
&sai4 {
    clocks = <&rcc SAI4>, <&rcc PLL3_Q>, <&rcc PLL3_R>;
    clock-names = "pclk", "x8k", "x11k";
    status = "okay";
 
    sai4a: audio-controller@50027004 {
        pinctrl-names = "default", "sleep";
        pinctrl-0 = <&sai4a_pins_a>;
        pinctrl-1 = <&sai4a_sleep_pins_a>;
        dma-names = "tx";
        clocks = <&rcc SAI4_K>;
        clock-names = "sai_ck";
        st,iec60958;
        status = "okay";
 
        sai4a_port: port {
            sai4a_endpoint: endpoint {
                remote-endpoint = <&spdif_out_endpoint>;
            };
        };
    };
};
&spdifrx {
    pinctrl-names = "default", "sleep";
    pinctrl-0 = <&spdifrx_pins_a>;
    pinctrl-1 = <&spdifrx_pins_a>;
    status = "okay";
 
    spdifrx_port: port {
        spdifrx_endpoint: endpoint {
            remote-endpoint = <&spdif_in_endpoint>;
        };
    };
};

With this device tree configuration, the following error occurs. Remove the node &sai4a_port in DASI, and audio can be used. How do I modify the node &sai4a_port

[  4.441723] asoc-audio-graph-card sound: ASoC: sink widget Playback overwritten

[  4.448991] asoc-audio-graph-card sound: ASoC: sink widget Capture overwritten

4 REPLIES 4
Christophe Guibout
ST Employee

Hi @文�?� �?​ ,

Here are 2 or 3 questions to help me to understand the problem:

1) In your DT, cs42l51 is connected to i²C4 : could you please tell me on which board you are working on ?

2) When you say that "audio can be used", does it mean that adding &sai4a_port entry from dais list breaks cs42l51 codec rx and tx and/or spdif_in ? Could you please elaborate on what works and what doesn't work, and what you want to do.

BR,

Christophe

In order to give better visibility on the answered topics, please click on 'Accept as Solution' on the reply which solved your issue or answered your question.

Hi Christophe G

1)Based on the STM32MP157-EV1 board to make a development board of our company, the CPU uses STM32MP157D, and the PMIC is removed.The audio is based on STM32MP157C-DK2

2)Yes,&Sai4a_port will destroy the RX and TX of the CS42l51 encoder

/***The audio will work normally in this way**/
dais = <&sai2a_port &sai2b_port  &spdifrx_port &i2s2_port>;   
dais = <&sai4a_port &spdifrx_port &i2s2_port>;
 

​As long as CS42L51 and &sai4a_port are both in dasi, CS42L51 will report the following error

[  4.441723] asoc-audio-graph-card sound: ASoC: sink widget Playback overwritten

[  4.448991] asoc-audio-graph-card sound: ASoC: sink widget Capture overwritten

I think &sai4a_port and CS42L51 can run normally

Hi @文�?� �?​ ,

We had this kind of error in the past with digital microphone DT entries : the problem was coming from dapm widget names and audio interfaces which were identicals.

It has been fixed by adding a prefix :

dmic1: dmic-1 {
    compatible = "dmic-codec";
    #sound-dai-cells = <1>;
+    sound-name-prefix = "dmic1";
    status = "okay";

Hope it will help,

BR,

Christophe

In order to give better visibility on the answered topics, please click on 'Accept as Solution' on the reply which solved your issue or answered your question.

Hi Christophe G

I am not very good at audio device tree, can you answer in detail