iMX6UL EVK with kernel 4.6
diff mbox

Message ID CAOMZO5BGDnECdRFU6XFws9poNyF-yGJbv=io43mQgcqO4L-fbw@mail.gmail.com
State New
Headers show

Commit Message

Fabio Estevam May 1, 2016, 6:27 p.m. UTC
On Sun, May 1, 2016 at 11:49 AM, Fabio Estevam <festevam@gmail.com> wrote:
> On Sat, Apr 30, 2016 at 8:18 AM, Petr Kulhavy <brain@jikos.cz> wrote:
>> Hi,
>>
>> I'm trying to run the latest mainline kernel 4.6 on the iMX6UL EVK. The
>> board mostly works and the only problem is audio.
>> Even though the sound card is detected and the ALSA mixer can be controlled
>> there is no MCLK coming out of the SAI2 interface.
>
> Also, have you tried setting bit 20 (SAI2_MCLK_DIR) of register IOMUXC_GPR_GPR1?
>
> You can set this bit in the bootloader for a quick test.

So I tried it myself and here are the changes I did:

Comments

Petr Kulhavy May 1, 2016, 6:43 p.m. UTC | #1
On 01/05/16 20:27, Fabio Estevam wrote:
> On Sun, May 1, 2016 at 11:49 AM, Fabio Estevam <festevam@gmail.com> wrote:
>> On Sat, Apr 30, 2016 at 8:18 AM, Petr Kulhavy <brain@jikos.cz> wrote:
>>> Hi,
>>>
>>> I'm trying to run the latest mainline kernel 4.6 on the iMX6UL EVK. The
>>> board mostly works and the only problem is audio.
>>> Even though the sound card is detected and the ALSA mixer can be controlled
>>> there is no MCLK coming out of the SAI2 interface.
>> Also, have you tried setting bit 20 (SAI2_MCLK_DIR) of register IOMUXC_GPR_GPR1?
>>
>> You can set this bit in the bootloader for a quick test.
> So I tried it myself and here are the changes I did:

Hi Fabio,

and did that work for you?
In my DTS file I made a few more changes, see below.

Petr
> diff --git a/arch/arm/boot/dts/imx6ul-14x14-evk.dts
> b/arch/arm/boot/dts/imx6ul-14x14-evk.dts
> index 7207280..8c20783 100644
> --- a/arch/arm/boot/dts/imx6ul-14x14-evk.dts
> +++ b/arch/arm/boot/dts/imx6ul-14x14-evk.dts
> @@ -36,6 +36,23 @@
>               enable-active-high;
>           };
>       };
> +
> +    sound {
> +        compatible = "simple-audio-card";
> +        simple-audio-card,name = "mx6ul-evk-sound-card";
> +        simple-audio-card,format = "i2s";
> +        simple-audio-card,bitclock-master = <&dailink_master>;
> +        simple-audio-card,frame-master = <&dailink_master>;

                 simple-audio-card,widgets =
                         "Microphone", "Mic Jack",
                         "Line", "Line In",
                         "Line", "Line Out",
                         "Speaker", "Speaker",
                         "Headphone", "Headphone Jack";
                 simple-audio-card,routing =
                         "Headphone Jack", "HP_L",
                         "Headphone Jack", "HP_R",
                         "Speaker", "SPK_LP",
                         "Speaker", "SPK_LN",
                         "Speaker", "SPK_RP",
                         "Speaker", "SPK_RN",

                         "LINPUT1", "Mic Jack",
                         "LINPUT3", "Mic Jack",
                         "RINPUT1", "Mic Jack",
                         "RINPUT2", "Mic Jack";
> +
> +        simple-audio-card,cpu {
> +            sound-dai = <&sai2>;
> +        };
> +
> +        dailink_master: simple-audio-card,codec {
> +            sound-dai = <&codec>;
> +            clocks = <&clks IMX6UL_CLK_SAI2>;
> +        };
> +    };
>   };
>
>   &cpu0 {
> @@ -43,6 +60,20 @@
>       soc-supply = <&reg_soc>;
>   };
>
> +&i2c2 {
> +    clock_frequency = <100000>;
> +    pinctrl-names = "default";
> +    pinctrl-0 = <&pinctrl_i2c2>;
> +    status = "okay";
> +
> +    codec: wm8960@1a {
> +        #sound-dai-cells = <0>;
> +        compatible = "wlf,wm8960";
> +        reg = <0x1a>;
                 clocks = <&clks IMX6UL_CLK_SAI2>;
                 clock-names = "mclk";

> +        wlf,shared-lrclk;
> +    };
> +};
> +
>   &fec1 {
>       pinctrl-names = "default";
>       pinctrl-0 = <&pinctrl_enet1>;
> @@ -86,6 +117,18 @@
>       };
>   };
>
> +&sai2 {
> +    pinctrl-names = "default";
> +    pinctrl-0 = <&pinctrl_sai2>;
> +
> +    assigned-clocks = <&clks IMX6UL_CLK_SAI2_SEL>,
> +              <&clks IMX6UL_CLK_SAI2>;
> +    assigned-clock-parents = <&clks IMX6UL_CLK_PLL4_AUDIO_DIV>;
> +    assigned-clock-rates = <0>, <12288000>;
> +
> +    status = "okay";
> +};
> +
>   &snvs_poweroff {
>       status = "okay";
>   };
> @@ -272,6 +315,17 @@
>           >;
>       };
>
> +    pinctrl_sai2: sai2grp {
> +        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_SNVS_TAMPER4__GPIO5_IO04    0x17059
> +        >;
> +    };
> +
>       pinctrl_pwm1: pwm1grp {
>           fsl,pins = <
>               MX6UL_PAD_GPIO1_IO08__PWM1_OUT   0x110b0
Fabio Estevam May 1, 2016, 6:47 p.m. UTC | #2
On Sun, May 1, 2016 at 3:43 PM, Petr Kulhavy <brain@jikos.cz> wrote:

> Hi Fabio,
>
> and did that work for you?
> In my DTS file I made a few more changes, see below.

No, as explained in my earlier e-mail the system hangs after running aplay.

However, the same hang happens with NXP kernel.

Have you tried setting bit20 of GPR1 register?

Which NXP kernel did you use that provides audio functionality on mx6ul-evk?
Petr Kulhavy May 1, 2016, 6:59 p.m. UTC | #3
On 01/05/16 20:47, Fabio Estevam wrote:
> On Sun, May 1, 2016 at 3:43 PM, Petr Kulhavy <brain@jikos.cz> wrote:
>
>> Hi Fabio,
>>
>> and did that work for you?
>> In my DTS file I made a few more changes, see below.
> No, as explained in my earlier e-mail the system hangs after running aplay.
>
> However, the same hang happens with NXP kernel.
>
> Have you tried setting bit20 of GPR1 register?
>
> Which NXP kernel did you use that provides audio functionality on mx6ul-evk?
I have not tried setting the bit 20 of the GPR1 register. How would that 
be set?

Both the 3.x and 4.1 work for me. However you need to set the headphone 
volume to non-zero and especially the pcm output mixer (unmute),
otherwise the audio path is not routed through and the codec is switched 
off due to power saving (and generates no bclk and lrclk).
This confused me as well, but after setting the mixer playback stasrts 
working with the Freescale kernel.

Petr
Fabio Estevam May 1, 2016, 7:22 p.m. UTC | #4
On Sun, May 1, 2016 at 3:59 PM, Petr Kulhavy <brain@jikos.cz> wrote:

> I have not tried setting the bit 20 of the GPR1 register. How would that be
> set?

If you have memtool installed in your rootfs:

./memtool -32 20E4004=0F560005

You can do this via bootloader prompt or via devmem2 in the Linux prompt.

Without this MCLK will not be out.

>
> Both the 3.x and 4.1 work for me. However you need to set the headphone
> volume to non-zero and especially the pcm output mixer (unmute),
> otherwise the audio path is not routed through and the codec is switched off
> due to power saving (and generates no bclk and lrclk).
> This confused me as well, but after setting the mixer playback stasrts
> working with the Freescale kernel.

I was putting the volume to a suitable value, but didn't touch PCM output mixer.

I see in alsamixer: "PCM Playback -6dB [Off]", but it does not allow
me to change this setting though.
Petr Kulhavy May 1, 2016, 7:24 p.m. UTC | #5
On 01/05/16 21:22, Fabio Estevam wrote:
> On Sun, May 1, 2016 at 3:59 PM, Petr Kulhavy <brain@jikos.cz> wrote:
>
>> I have not tried setting the bit 20 of the GPR1 register. How would that be
>> set?
> If you have memtool installed in your rootfs:
>
> ./memtool -32 20E4004=0F560005
>
> You can do this via bootloader prompt or via devmem2 in the Linux prompt.
>
> Without this MCLK will not be out.
Thanks, I'll check that out.

>> Both the 3.x and 4.1 work for me. However you need to set the headphone
>> volume to non-zero and especially the pcm output mixer (unmute),
>> otherwise the audio path is not routed through and the codec is switched off
>> due to power saving (and generates no bclk and lrclk).
>> This confused me as well, but after setting the mixer playback stasrts
>> working with the Freescale kernel.
> I was putting the volume to a suitable value, but didn't touch PCM output mixer.
>
> I see in alsamixer: "PCM Playback -6dB [Off]", but it does not allow
> me to change this setting though.

The controls to unmute are:

Left Output Mixer PCM [Off]
Right Output Mixer PCM [Off]

Petr
Fabio Estevam May 1, 2016, 8:19 p.m. UTC | #6
On Sun, May 1, 2016 at 4:24 PM, Petr Kulhavy <brain@jikos.cz> wrote:

> The controls to unmute are:
>
> Left Output Mixer PCM [Off]
> Right Output Mixer PCM [Off]

I don't know why, but alsamixer does not allow me to unmute thes options.
Fabio Estevam May 2, 2016, 12:15 p.m. UTC | #7
Hi Petr,

On Sun, May 1, 2016 at 5:19 PM, Fabio Estevam <festevam@gmail.com> wrote:
> On Sun, May 1, 2016 at 4:24 PM, Petr Kulhavy <brain@jikos.cz> wrote:
>
>> The controls to unmute are:
>>
>> Left Output Mixer PCM [Off]
>> Right Output Mixer PCM [Off]
>
> I don't know why, but alsamixer does not allow me to unmute thes options.

Should sound/soc/codecs/wm8960.c be changed so that thes options are
turned on by default?
Fabio Estevam May 2, 2016, 12:43 p.m. UTC | #8
On Sun, May 1, 2016 at 5:19 PM, Fabio Estevam <festevam@gmail.com> wrote:
> On Sun, May 1, 2016 at 4:24 PM, Petr Kulhavy <brain@jikos.cz> wrote:
>
>> The controls to unmute are:
>>
>> Left Output Mixer PCM [Off]
>> Right Output Mixer PCM [Off]
>
> I don't know why, but alsamixer does not allow me to unmute thes options.

Ok, managed to unmute these options in alsamixer and now I get audio
with NXP 3.14 kernel.

Will try with mainline now.

Thanks for your hint!

Patch
diff mbox

diff --git a/arch/arm/boot/dts/imx6ul-14x14-evk.dts
b/arch/arm/boot/dts/imx6ul-14x14-evk.dts
index 7207280..8c20783 100644
--- a/arch/arm/boot/dts/imx6ul-14x14-evk.dts
+++ b/arch/arm/boot/dts/imx6ul-14x14-evk.dts
@@ -36,6 +36,23 @@ 
             enable-active-high;
         };
     };
+
+    sound {
+        compatible = "simple-audio-card";
+        simple-audio-card,name = "mx6ul-evk-sound-card";
+        simple-audio-card,format = "i2s";
+        simple-audio-card,bitclock-master = <&dailink_master>;
+        simple-audio-card,frame-master = <&dailink_master>;
+
+        simple-audio-card,cpu {
+            sound-dai = <&sai2>;
+        };
+
+        dailink_master: simple-audio-card,codec {
+            sound-dai = <&codec>;
+            clocks = <&clks IMX6UL_CLK_SAI2>;
+        };
+    };
 };

 &cpu0 {
@@ -43,6 +60,20 @@ 
     soc-supply = <&reg_soc>;
 };

+&i2c2 {
+    clock_frequency = <100000>;
+    pinctrl-names = "default";
+    pinctrl-0 = <&pinctrl_i2c2>;
+    status = "okay";
+
+    codec: wm8960@1a {
+        #sound-dai-cells = <0>;
+        compatible = "wlf,wm8960";
+        reg = <0x1a>;
+        wlf,shared-lrclk;
+    };
+};
+
 &fec1 {
     pinctrl-names = "default";
     pinctrl-0 = <&pinctrl_enet1>;
@@ -86,6 +117,18 @@ 
     };
 };

+&sai2 {
+    pinctrl-names = "default";
+    pinctrl-0 = <&pinctrl_sai2>;
+
+    assigned-clocks = <&clks IMX6UL_CLK_SAI2_SEL>,
+              <&clks IMX6UL_CLK_SAI2>;
+    assigned-clock-parents = <&clks IMX6UL_CLK_PLL4_AUDIO_DIV>;
+    assigned-clock-rates = <0>, <12288000>;
+
+    status = "okay";
+};
+
 &snvs_poweroff {
     status = "okay";
 };
@@ -272,6 +315,17 @@ 
         >;
     };

+    pinctrl_sai2: sai2grp {
+        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_SNVS_TAMPER4__GPIO5_IO04    0x17059
+        >;
+    };
+
     pinctrl_pwm1: pwm1grp {
         fsl,pins = <
             MX6UL_PAD_GPIO1_IO08__PWM1_OUT   0x110b0