This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

Linux/TLV320AIC3254: TLV320AIC3254 linux driver

Part Number: TLV320AIC3254

Tool/software: Linux

Hi,

We are trying to integrate the TLV320AIC3254 per I2S with an iMX6 Platform using the TLV320AIC3254EVM.

With the driver under http://www.ti.com/tool/tlv320aic32x4sw-linux

we don't see any I2S clocks being generated (BCLK,WCLK). We are supplying a 24MHz MCLK.

Is it correct that the open source driver also works for aic3254? I wonder, because the driver does not program the MiniDSP. Is it required to do so for basic ADC/DAC I2S operation?

Concerning the firmware loading the wiki and driver pages mentioned here https://e2e.ti.com/support/data_converters/audio_converters/f/64/t/266169

are currently offline. Is there some other source for that information?

  • We solved the clock problem by backporting the newest version of the open source driver to our BSP.

    Playback is working now, although capture is still missing. Any pointers to what the problem might be are appreciated.

    Our devicetree config:

    +       sound {
    +               compatible = "tdx,imx6q-apalis-tlv320aic3254",
    +                            "simple-audio-card";
    +
    +               /*pinctrl-names = "default";
    +               pinctrl-0 = <*/
    +
    +               simple-audio-card,name = "tlv320aic3254";
    +               simple-audio-card,format = "i2s";
    +               simple-audio-card,bitclock-master = <&codec_dai>;
    +               simple-audio-card,frame-master = <&codec_dai>;
    +               simple-audio-card,widgets =
    +                       "Microphone", "Mic Jack",
    +                       "Line", "Line In",
    +                       "Line", "Line Out",
    +                       "Headphone", "Headphone Jack";
    +               simple-audio-card,routing =
    +                       "IN1_L", "Line In",
    +                       "IN1_R", "Line In",
    +                       "IN3_R", "Mic Jack",
    +                        "CM_L", "Mic Jack",
    +                        "CM_R", "Mic Jack",
    +                       "Line Out", "LOL",
    +                       "Line Out", "LOR",
    +                       "Headphone Jack", "HPL",
    +                       "Headphone Jack", "HPR";
    +
    +               cpu_dai: simple-audio-card,cpu {
    +                       sound-dai = <&ssi1>;
    +               };
    +
    +               codec_dai: simple-audio-card,codec {
    +                       sound-dai = <&codec_tlv>;
    +                        clocks = <&clks 201>;
    +               };
    +       };
    
    
    
    +
    +&audmux {
    +       pinctrl-names = "default";
    +       pinctrl-0 = <&pinctrl_aud5 &pinctrl_aud5_mclk>;
    +
    +       ssi1 {
    +               fsl,audmux-port = <0>;
    +               fsl,port-config = <
    +                       (IMX_AUDMUX_V2_PTCR_SYN |
    +                       IMX_AUDMUX_V2_PTCR_TFSEL(4) |
    +                       IMX_AUDMUX_V2_PTCR_TCSEL(4) |
    +                       IMX_AUDMUX_V2_PTCR_TFSDIR |
    +                       IMX_AUDMUX_V2_PTCR_TCLKDIR)
    +                       IMX_AUDMUX_V2_PDCR_RXDSEL(4)
    +               >;
    +       };
    +
    +       pins5 {
    +               fsl,audmux-port = <4>;
    +               fsl,port-config = <
    +                       IMX_AUDMUX_V2_PTCR_SYN
    +                       IMX_AUDMUX_V2_PDCR_RXDSEL(0)
    +               >;
    +       };
    +};
    
    
    +
    +       codec_tlv: tlv320aic32x4@18 {
    +               compatible = "ti,tlv320aic32x4";
    +               #sound-dai-cells = <0>;
    +               reg = <0x18>;
    +               clocks = <&clks 201>;
    +               clock-names = "mclk";
    +               dv-supply = <&reg_1p8v>;
    +               av-supply = <&reg_1p8v>;
    +               iov-supply = <&reg_3p3v>;
    +       };
    



    Our register map (obtained with  i2cdump -f -y 1 0x18):
    Before is idle state / After is capturing state

          0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f    0123456789abcdef
     00: 00 00 60 00 03 a1 08 07 80 00 00 88 82 00 80 02    ..`.?????..??.??
     10: 00 08 88 84 40 01 00 04 00 00 01 0c 00 01 84 00    .???@?.?..??.??.
    -20: 00 00 00 00 88 22 11 00 00 00 00 00 00 00 00 00    ....?"?.........
    +20: 00 00 00 00 cc 22 11 00 00 00 00 00 00 00 00 00    ....?"?.........
     30: 00 00 00 00 00 12 03 02 02 00 00 00 01 01 00 18    .....????...??.?
     40: 0c ea ea 00 6f 38 00 00 00 00 00 ee 10 d8 7e e3    ???.o8.....???~?
    -50: 00 00 88 0d 0d 00 00 00 3f 00 00 00 00 00 00 00    ..???...?.......
    +50: 00 c0 88 0d 0d 00 00 00 3f 00 00 00 00 00 00 00    .????...?.......
     60: 7f 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ?...............
     70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
     80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
    

  • Hi, Anton,

    Welcome to E2E, Thanks for your interest in our products!.

    We are not currently supporting Linux driver development, so the only information about the drivers is located in the wiki page you mention, For the driver of the AIC3254, please refer to this link.

    The code of the driver does not contain the miniDSP code generated from PurePath Studio, in order to export the code, you need to follow the steps from this wiki entry.

    Best Regards,

      -Diego Meléndez López
       Audio Applications Engineer