Difference between revisions of "DESK-MX6UL-L/Peripherals/Audio"

From DAVE Developer's Wiki
Jump to: navigation, search
(Created page with "{{subst:Peripheral | nome-som=AXEL ULite | nome-peripheral = Audio}}")
 
Line 7: Line 7:
 
!style="border-left:solid 2px #73B2C7; border-right:solid 2px #73B2C7;border-top:solid 2px #73B2C7; border-bottom:solid 2px #73B2C7; background-color:#73B2C7; padding:5px; color:white"|Notes
 
!style="border-left:solid 2px #73B2C7; border-right:solid 2px #73B2C7;border-top:solid 2px #73B2C7; border-bottom:solid 2px #73B2C7; background-color:#73B2C7; padding:5px; color:white"|Notes
 
|-
 
|-
|style="border-left:solid 2px #73B2C7; border-right:solid 2px #73B2C7;border-top:solid 2px #73B2C7; border-bottom:solid 2px #73B2C7; background-color:#edf8fb; padding:5px; color:#000000"|X.Y.Z
+
|style="border-left:solid 2px #73B2C7; border-right:solid 2px #73B2C7;border-top:solid 2px #73B2C7; border-bottom:solid 2px #73B2C7; background-color:#edf8fb; padding:5px; color:#000000"|1.0.0
|style="border-left:solid 2px #73B2C7; border-right:solid 2px #73B2C7;border-top:solid 2px #73B2C7; border-bottom:solid 2px #73B2C7; background-color:#edf8fb; padding:5px; color:#000000"|Month Year
+
|style="border-left:solid 2px #73B2C7; border-right:solid 2px #73B2C7;border-top:solid 2px #73B2C7; border-bottom:solid 2px #73B2C7; background-color:#edf8fb; padding:5px; color:#000000"|Apr 2021
|style="border-left:solid 2px #73B2C7; border-right:solid 2px #73B2C7;border-top:solid 2px #73B2C7; border-bottom:solid 2px #73B2C7; background-color:#edf8fb; padding:5px; color:#000000"|TBD
+
|style="border-left:solid 2px #73B2C7; border-right:solid 2px #73B2C7;border-top:solid 2px #73B2C7; border-bottom:solid 2px #73B2C7; background-color:#edf8fb; padding:5px; color:#000000"|First DESK release
|-
 
|-
 
|style="border-left:solid 2px #73B2C7; border-right:solid 2px #73B2C7;border-top:solid 2px #73B2C7; border-bottom:solid 2px #73B2C7; background-color:#edf8fb; padding:5px; color:#000000"|[TBD_link X.Y.Z]
 
|style="border-left:solid 2px #73B2C7; border-right:solid 2px #73B2C7;border-top:solid 2px #73B2C7; border-bottom:solid 2px #73B2C7; background-color:#edf8fb; padding:5px; color:#000000"|Month Year
 
|style="border-left:solid 2px #73B2C7; border-right:solid 2px #73B2C7;border-top:solid 2px #73B2C7; border-bottom:solid 2px #73B2C7; background-color:#edf8fb; padding:5px; color:#000000"|TBD
 
|-
 
|style="border-left:solid 2px #73B2C7; border-right:solid 2px #73B2C7;border-top:solid 2px #73B2C7; border-bottom:solid 2px #73B2C7; background-color:#edf8fb; padding:5px; color:#000000"|...
 
|style="border-left:solid 2px #73B2C7; border-right:solid 2px #73B2C7;border-top:solid 2px #73B2C7; border-bottom:solid 2px #73B2C7; background-color:#edf8fb; padding:5px; color:#000000"|...
 
|style="border-left:solid 2px #73B2C7; border-right:solid 2px #73B2C7;border-top:solid 2px #73B2C7; border-bottom:solid 2px #73B2C7; background-color:#edf8fb; padding:5px; color:#000000"|...
 
 
|-
 
|-
 
|}
 
|}
Line 25: Line 16:
  
 
==Peripheral Audio ==
 
==Peripheral Audio ==
 
''TBD: sostituire tutti i dump con le informazioni sull'uso della periferica''
 
  
 
=== Device tree configuration ===
 
=== Device tree configuration ===
 
Here below an example of device tree configuration used on standard DAVE's kit for the AXEL ULite SOM:
 
Here below an example of device tree configuration used on standard DAVE's kit for the AXEL ULite SOM:
  
From <code>''carrier.dts''</code>:
+
From <code>imx6ul-axelulite-cb006c.dts</code>:
  
 
<pre>
 
<pre>
&can1 {
+
        sound {
    pinctrl-names = "default";
+
                compatible = "fsl,imx-audio-tlv320aic31xx";
    pinctrl-0 = <&pinctrl_flexcan1_axel>;
+
                model = "axelulite-audio-tlv320aic3100";
    status = "okay";
+
                cpu-dai = <&sai2>;
};
+
                audio-codec = <&codec>;
</pre>
+
                audio-routing =
 +
                        "Speaker", "SPK",
 +
                        "Headphone Jack", "HPL",
 +
                        "Headphone Jack", "HPR",
 +
                        "MIC1LP", "Line In",
 +
                        "MIC1LM", "Line In",
 +
                        "MIC1RP", "Mic Jack",
 +
                        "Mic Jack", "MICBIAS";
 +
                status = "okay";
 +
        };
 +
 
 +
&i2c4 {
 +
        clock-frequency = <100000>;
 +
        pinctrl-names = "default", "recovery";
 +
        pinctrl-0 = <&pinctrl_i2c4>;
 +
        pinctrl-1 = <&pinctrl_i2c4_recovery>;
 +
        recovery-gpios = <&gpio1 20 0>, <&gpio1 21 0>;
 +
        status = "okay";
 +
 
 +
        codec: tlv320aic31xx@18 {
 +
                compatible = "ti,tlv320aic3100";
 +
                reg = <0x18>;
 +
                clocks = <&clks IMX6UL_CLK_SAI2>,
 +
                      <&clks IMX6UL_CLK_DUMMY>;
 +
                clock-names = "mclk1", "mclk2";
  
From <code>''carrier-common.dtsi''</code>:
+
                gpio-reset = <&gpio1 27 1>;
 +
                HPVDD-supply = <&reg_3p3v>;
 +
                SPRVDD-supply = <&reg_3p3v>;
 +
                SPLVDD-supply = <&reg_3p3v>;
 +
                AVDD-supply = <&reg_3p3v>;
 +
                IOVDD-supply = <&reg_3p3v>;
 +
                DVDD-supply = <&reg_1p8v>;
 +
        };
 +
...
 +
...
 +
&iomuxc {
 +
        pinctrl-0 = <&pinctrl_hog_gpios>;
 +
        imx6ul-axelulite {
  
<pre>
+
        tlv320aic3x {
    can1 {
+
                pinctrl_tlv320aic3x_1: tlv320aic3x_codecgrp-1{
        pinctrl_flexcan1_axel: flexcan1axelgrp-1 {
+
                        fsl,pins = <
            fsl,pins = <
+
                                MX6UL_PAD_JTAG_TDI__SAI2_TX_BCLK        0x17088
                MX6QDL_PAD_GPIO_7__FLEXCAN1_TX 0x80000000
+
                                MX6UL_PAD_JTAG_TDO__SAI2_TX_SYNC        0x17088
                MX6QDL_PAD_GPIO_8__FLEXCAN1_RX 0x80000000
+
                                MX6UL_PAD_JTAG_TRST_B__SAI2_TX_DATA    0x11088
            >;
+
                                MX6UL_PAD_JTAG_TCK__SAI2_RX_DATA        0x11088
 +
                                MX6UL_PAD_JTAG_TMS__SAI2_MCLK          0x17088
 +
                                MX6UL_PAD_UART3_RTS_B__GPIO1_IO27      0x130b0 /* codec reset */
 +
                        >;
 +
                };
 
         };
 
         };
    };
+
 
 +
};
 
</pre>
 
</pre>
 +
  
 
===Accessing the peripheral===
 
===Accessing the peripheral===
 +
 +
Access to the audio interface is provided by ALSA (Advanced Linux Sound Architecture), which consists in a kernel driver and a users space library for application developers. A set of standard tools ''alsa-utils'' can be used for simple management of the audio codec.
 +
 
====Linux messages at boot time====
 
====Linux messages at boot time====
  
Line 60: Line 94:
 
...
 
...
 
...
 
...
[    1.807495] flexcan 2090000.flexcan: 2090000.flexcan supply xceiver not found, using dummy regulator
+
[    3.314515] imx-tlv320aic31xx sound: tlv320aic31xx-hifi <-> 202c000.sai mapping ok
[    1.817366] flexcan 2090000.flexcan: device registered (reg_base=c0a30000, irq=31)
 
 
...
 
...
 
...
 
...
[    3.952659] can: controller area network core (rev 20170425 abi 9)
+
[    3.545396] ALSA device list:
[    3.963413] can: raw protocol (rev 20170425)
+
[    3.548401]   #0: axelulite-audio-tlv320aic3100
[    3.967717] can: broadcast manager protocol (rev 20170425 t)
 
[    3.973397] can: netlink gateway (rev 20170425) max_hops=1
 
 
</pre>
 
</pre>
  
====Enable the interface and check status====
+
To list the audio sound cards just use the <code>aplay</code> utility:
 +
 
 
<pre class="workstation-terminal">
 
<pre class="workstation-terminal">
root@imx6qxelk:~# ip link set can0 type can bitrate 500000
+
root@desk-mx6ul-axelulite:~# aplay -l
root@imx6qxelk:~# ifconfig can0 up
+
**** List of PLAYBACK Hardware Devices ****
root@imx6qxelk:~# ifconfig can0
+
card 0: axeluliteaudiot [axelulite-audio-tlv320aic3100], device 0: HiFi tlv320aic31xx-hifi-0 []
can0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
+
  Subdevices: 1/1
          UP RUNNING NOARP  MTU:16  Metric:1
+
  Subdevice #0: subdevice #0
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
+
root@desk-mx6ul-axelulite:~#
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
 
          collisions:0 txqueuelen:10
 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
 
          Interrupt:31
 
 
 
root@imx6qxelk:~#
 
 
</pre>
 
</pre>
  
==== Usage with [https://github.com/linux-can/can-utils can-utils] ====
+
====Usage [https://alsa-project.org/wiki/Documentation alsa-utils] ====
 
 
''TBD: reference verso eventuali informazioni sul web''
 
  
 
<pre class="workstation-terminal">
 
<pre class="workstation-terminal">
root@imx6qxelk:~# ip link set can0 type can bitrate 500000 triple-sampling on
+
root@desk-mx6ul-axelulite:~# aplay audio8k16S.wav
root@imx6qxelk:~# ifconfig can0 up
+
Playing WAVE 'audio8k16S.wav' : Signed 16 bit Little Endian, Rate 8000 Hz, Stereo
root@imx6qxelk:~# cansend can0 128#1122334455667788
 
root@imx6qxelk:~# candump can0
 
  can0  128  [8]  11 22 33 44 55 66 77 88
 
root@imx6qxelk:~#
 
 
</pre>
 
</pre>
 
=== Additional information ===
 
Each CAN port appears like a networking interface in the form <code>canX</code> where <b><i>X</i></b> is the port number.
 
 
Information about programming the CAN socket interface is given in the kernel tree under ''Documentation/networking/can.txt''
 
<section end=Body/>
 
  
 
----
 
----
  
 
[[Category:AXEL ULite]]
 
[[Category:AXEL ULite]]

Revision as of 09:18, 21 April 2021

History
Version Issue Date Notes
1.0.0 Apr 2021 First DESK release


Peripheral Audio[edit | edit source]

Device tree configuration[edit | edit source]

Here below an example of device tree configuration used on standard DAVE's kit for the AXEL ULite SOM:

From imx6ul-axelulite-cb006c.dts:

        sound {
                compatible = "fsl,imx-audio-tlv320aic31xx";
                model = "axelulite-audio-tlv320aic3100";
                cpu-dai = <&sai2>;
                audio-codec = <&codec>;
                audio-routing =
                        "Speaker", "SPK",
                        "Headphone Jack", "HPL",
                        "Headphone Jack", "HPR",
                        "MIC1LP", "Line In",
                        "MIC1LM", "Line In",
                        "MIC1RP", "Mic Jack",
                        "Mic Jack", "MICBIAS";
                status = "okay";
        };

&i2c4 {
        clock-frequency = <100000>;
        pinctrl-names = "default", "recovery";
        pinctrl-0 = <&pinctrl_i2c4>;
        pinctrl-1 = <&pinctrl_i2c4_recovery>;
        recovery-gpios = <&gpio1 20 0>, <&gpio1 21 0>;
        status = "okay";

        codec: tlv320aic31xx@18 {
                compatible = "ti,tlv320aic3100";
                reg = <0x18>;
                clocks = <&clks IMX6UL_CLK_SAI2>,
                       <&clks IMX6UL_CLK_DUMMY>;
                clock-names = "mclk1", "mclk2";

                gpio-reset = <&gpio1 27 1>;
                HPVDD-supply = <&reg_3p3v>;
                SPRVDD-supply = <&reg_3p3v>;
                SPLVDD-supply = <&reg_3p3v>;
                AVDD-supply = <&reg_3p3v>;
                IOVDD-supply = <&reg_3p3v>;
                DVDD-supply = <&reg_1p8v>;
        };
...
...
&iomuxc {
        pinctrl-0 = <&pinctrl_hog_gpios>;
        imx6ul-axelulite {

        tlv320aic3x {
                pinctrl_tlv320aic3x_1: tlv320aic3x_codecgrp-1{
                        fsl,pins = <
                                MX6UL_PAD_JTAG_TDI__SAI2_TX_BCLK        0x17088
                                MX6UL_PAD_JTAG_TDO__SAI2_TX_SYNC        0x17088
                                MX6UL_PAD_JTAG_TRST_B__SAI2_TX_DATA     0x11088
                                MX6UL_PAD_JTAG_TCK__SAI2_RX_DATA        0x11088
                                MX6UL_PAD_JTAG_TMS__SAI2_MCLK           0x17088
                                MX6UL_PAD_UART3_RTS_B__GPIO1_IO27       0x130b0 /* codec reset */
                        >;
                };
        };

};


Accessing the peripheral[edit | edit source]

Access to the audio interface is provided by ALSA (Advanced Linux Sound Architecture), which consists in a kernel driver and a users space library for application developers. A set of standard tools alsa-utils can be used for simple management of the audio codec.

Linux messages at boot time[edit | edit source]

...
...
[    3.314515] imx-tlv320aic31xx sound: tlv320aic31xx-hifi <-> 202c000.sai mapping ok
...
...
[    3.545396] ALSA device list:
[    3.548401]   #0: axelulite-audio-tlv320aic3100

To list the audio sound cards just use the aplay utility:

root@desk-mx6ul-axelulite:~# aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: axeluliteaudiot [axelulite-audio-tlv320aic3100], device 0: HiFi tlv320aic31xx-hifi-0 []
  Subdevices: 1/1
  Subdevice #0: subdevice #0
root@desk-mx6ul-axelulite:~#

Usage alsa-utils[edit | edit source]

root@desk-mx6ul-axelulite:~# aplay audio8k16S.wav 
Playing WAVE 'audio8k16S.wav' : Signed 16 bit Little Endian, Rate 8000 Hz, Stereo