[alsa-devel] audio mcbsp1 broken for beagleboard-xm -OMAP

noman pouigt variksla at gmail.com
Wed Feb 25 21:09:48 CET 2015


On Wed, Feb 25, 2015 at 1:40 AM, Peter Ujfalusi <peter.ujfalusi at ti.com> wrote:
> On 02/21/2015 04:36 AM, noman pouigt wrote:
>> On Fri, Feb 20, 2015 at 8:27 AM, Peter Ujfalusi <peter.ujfalusi at ti.com> wrote:
>>> On 02/20/2015 08:45 AM, noman pouigt wrote:
>>>> Hello,
>>>>
>>>> I am trying to integrate max98090 codec with $subject board.  I am
>>>> running the mcBSP in slave mode as i have not changed the hw_parms for
>>>> omap-twl4030.c file. With below changes i see wait_for_avail is
>>>> getting stuck i.e. mcbsp is not getting any interrupt and nothing is
>>>> playing.
>>>>
>>>> Kernel version:
>>>> VERSION = 3
>>>> PATCHLEVEL = 19
>>>> SUBLEVEL = 0
>>>> EXTRAVERSION =
>>>> NAME = Diseased Newt
>>>>
>>>> Setup information:
>>>> Using beagle board -xm and connected max98090 codec to mcbsp1 pins.
>>>> Connected only 4 pins.
>>>>
>>>> Changed the omap-twl4030.c machine file as below to disable the twl4030:
>>>> static struct snd_soc_dai_link omap_twl4030_dai_links[] = {
>>>>        {
>>>> +               .name = "max98090",
>>>> +               .stream_name = "max98090",
>>>>                .cpu_dai_name = "omap-mcbsp.1",
>>>> +               .codec_dai_name = "HiFi",
>>>>                .platform_name = "omap-mcbsp.1",
>>>> +               .codec_name = "max98090.1-0010",
>>>>                .ops = &omap_twl4030_ops,
>>>>        },
>>>>
>>>> DTSI file change:arch/arm/boot/dts/omap3-beagle-xm.dts
>>>>
>>>> &i2c2 {
>>>>        clock-frequency = <400000>;
>>>> +
>>>> +       max98090: max98090 at 10 {
>>>> +               compatible = "maxim,max98090";
>>>> +               reg = <0x10>;
>>>> +       };
>>>> };
>>>
>>> You also need to change the dts file's sound node, enable mcbsp1, set the
>>> pinctrl entries, etc if you boot with DT.
>> Yes and it is done as below:
>>
>> &omap3_pmx_core {
>>         mcbsp1_pins: pinmux_mcbsp1_pins {
>>                 pinctrl-single,pins = <
>>                         OMAP3_CORE1_IOPAD(0x2198, PIN_INPUT | MUX_MODE0)
>>                         OMAP3_CORE1_IOPAD(0x2194, PIN_INPUT | MUX_MODE0)
>>                         OMAP3_CORE1_IOPAD(0x2190, PIN_INPUT | MUX_MODE0)
>>                         OMAP3_CORE1_IOPAD(0x2190, PIN_OUTPUT | MUX_MODE0)
>
> Should be:
>         OMAP3_CORE1_IOPAD(0x2198, PIN_INPUT | MUX_MODE0)        /* CLKX */
>         OMAP3_CORE1_IOPAD(0x2196, PIN_INPUT | MUX_MODE0)        /* FSX */
>         OMAP3_CORE1_IOPAD(0x2192, PIN_INPUT | MUX_MODE0)        /* DR */
>         OMAP3_CORE1_IOPAD(0x2190, PIN_OUTPUT | MUX_MODE0)       /* DX */
>
>
> And make sure to connect lrclk/bclk to FSX/CLKX (not to FSR/CLKR) of McBSP1.
>
> I have tested on on my xM that McBSP1 in master mode works, DMA is running (I
> do not have anything connected to pins).

Thanks for this. Thomas Niederprüm was kind enough to provide also the
same details.
So summarizing it as below:

Inorder to use mcbsp1 pins connected to the auxillary header in
beagleboard-xm we
have to do the configure the below pins as output/input depending on what is
who is running as master or slave.

As stated in the DM3730 TRM the register offsets for the mcbsp1 pins
are:
0x218C -> mcbsp1_clkr
0x218E -> mcbsp1_fsr
0x2190 -> mcbsp1_dx
0x2192 -> mcbsp1_dr
0x2194 -> mcbsp1_clks (not exposed)
0x2196 -> mcbsp1_fsx
0x2198 -> mcbsp1_clkx

Also note that the pins mcbsp1_clkr, mcbsp1_dx, mcbsp1_dr and
mcbsp1_fsx interfere with the mcspi4 pins. So if you use those pins it
might be worth to disable mcspi4:

&mcspi4 {
        status = "disabled";
};

In my case i was running as mcbsp as slave and my codec as master.For
this configuration i did muxing as below in device tree file.

+       mcbsp1_pins: pinmux_mcbsp1_pins {
+                pinctrl-single,pins = <
+                        OMAP3_CORE1_IOPAD(0x2196, PIN_INPUT | MUX_MODE0)
+                        OMAP3_CORE1_IOPAD(0x2198, PIN_INPUT | MUX_MODE0)
+                        OMAP3_CORE1_IOPAD(0x2190, PIN_OUTPUT | MUX_MODE0)
+                        OMAP3_CORE1_IOPAD(0x2192, PIN_INPUT | MUX_MODE0)
+                >;
+        };

>
>>                 >;
>>         };
>> }
>>
>>         sound {
>> -               ti,mcbsp = <&mcbsp2>;
>> -               ti,codec = <&twl_audio>;
>> +               ti,mcbsp = <&mcbsp1>;
>> +               ti,codec = <&max98090>;
>>         }
>>
>> &mcbsp1 {
>>         pinctrl-names = "default";
>>         pinctrl-0 = <&mcbsp1_pins>;
>>
>>         status = "okay";
>> };
>>
>> &i2c2 {
>>       clock-frequency = <400000>;
>>
>>        max98090: max98090 at 10 {
>>                compatible = "maxim,max98090";
>>                reg = <0x10>;
>>        };
>>  };
>>
>> all other changes remain the same. Have i done muxing wrong? I am
>> still stuck with mcbsp not getting interrupt.
>> please find the dts file here http://ideone.com/TPFkBv
>>
>> I connected digital output of 98090 to mcbsp1_dr and digital receive
>> to mcbsp1_dx. I can see the bit clock and lrclk is coming fine from
>> 98090. As already mentioned i have connected lrclk, bit clock, DR
>> and DX only.
>>
>> Kernel logs here: http://ideone.com/hDHq2l
>>
>>>
>>>>
>>>> omap/omap-twl4030.c
>>>> added in hw_params below function to set internal oscillator for 98090
>>>> for generating PLL for master clock.
>>>> snd_soc_dai_set_sysclk(codec_dai, 26000000, 0, SND_SOC_CLOCK_IN);
>>>>
>>>> I am able to see that the cpu_dai is mapped with codec_dai and
>>>> configuration is ok. kernel logs at https://ideone.com/oezNSj
>>>>
>>>> I think i don't need to configure the mcbsp1 pins right as it uses default.
>>>>
>>>> Please guide me.I have tried IRC channel also but not getting the right folks.
>>>>
>>>> https://github.com/CircuitCo/BeagleBoard-xM-RevC/blob/master/BeagleBoard-xM_revC_SCH.pdf?raw=true
>>>>
>>>> Thanks,
>>>>
>>>
>>>
>>> --
>>> Péter
>
>
> --
> Péter


More information about the Alsa-devel mailing list