[alsa-devel] No sound captured with SGTL5000 on i.MX6 in I²S master mode

Michael Trimarchi michael at amarulasolutions.com
Thu Sep 18 15:55:56 CEST 2014


Hi

On Thu, Sep 18, 2014 at 3:45 PM, Jean-Michel Hautbois
<jean-michel.hautbois at vodalys.com> wrote:
> 2014-09-18 15:35 GMT+02:00 Michael Trimarchi <michael at amarulasolutions.com>:
>> Hi
>>
>> On Thu, Sep 18, 2014 at 3:30 PM, Fabio Estevam <festevam at gmail.com> wrote:
>>> Hi Jean-Michel,
>>>
>>> On Thu, Sep 18, 2014 at 9:56 AM, Jean-Michel Hautbois
>>> <jean-michel.hautbois at vodalys.com> wrote:
>>>> Hi,
>>>>
>>>> Sorry if double posting, I have not received confirmation on
>>>> subscription yesterday... So I try again :/.
>>>>
>>>> I have a custom i.MX6 board, and have a sgtl5000 connected on it. I
>>>> would like to have it used in master mode (it is used only for audio
>>>> capture) but I get a "pcm_read:2031: read error: Input/output error"
>>>> when using arecord.
>>>> I have checked my signals and I get something on I²S which seems to be good.
>>>> I launch :
>>>> $> arecord -f cd -Dhw:0,0 -v -V stereo
>>>> Receive Frame Sync is 44.1KHz
>>>> Receive Clock Signal is ~1MHz (I can be more precise if needed)
>>>> Data Receive is present, only when arecord is launched. It stops when
>>>> there is no capture asked.
>>>> Both clocks are still present even when no arecord is running.
>>>>
>>>> This suggests, for me, that master mode is working.
>>>> So, I don't know why I can't get any data to my arecord. Is this a
>>>> left/right justified master mode ? Anything else ?
>>>
>>
>> Yes, can you check if the direction of the mux-port is correct and you
>> are really get data.
>
> Mmh, can you explain in more details, I don't get it...
>

ssi is the peripheral that is rooted from the pins outside (audmux) and audmux
should configured according to clock direction and data direction etc. I don't
remember now is done now in the latest kernel, because I have in the
head too much architecture,
but it should be possible to dump it from sysfs how is configured. So
you need to check if it match

>>> I am also trying to test fsl_ssi in master mode.
>>>
>>> I am running linux-next 20140912 with the following changes to get SSI
>>> in master mode:
>>>
>>> --- a/arch/arm/boot/dts/imx6qdl-sabresd.dtsi
>>> +++ b/arch/arm/boot/dts/imx6qdl-sabresd.dtsi
>>> @@ -532,6 +532,7 @@
>>>  };
>>>
>>>  &ssi2 {
>>> +       fsl,mode = "i2s-master";
>>>         status = "okay";
>>>  };
>>>
>>> diff --git a/sound/soc/fsl/imx-wm8962.c b/sound/soc/fsl/imx-wm8962.c
>>> index 3a3d17c..09ea6a5 100644
>>> --- a/sound/soc/fsl/imx-wm8962.c
>>> +++ b/sound/soc/fsl/imx-wm8962.c
>>> @@ -247,7 +247,7 @@ static int imx_wm8962_probe(struct platform_device *pdev)
>>>         data->dai.platform_of_node = ssi_np;
>>>         data->dai.ops = &imx_hifi_ops;
>>>         data->dai.dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF |
>>> -                           SND_SOC_DAIFMT_CBM_CFM;
>>> +                           SND_SOC_DAIFMT_CBS_CFS;
>>>
>>>         data->card.dev = &pdev->dev;
>>>         ret = snd_soc_of_parse_card_name(&data->card, "model");
>>>
>>> ,but when I do aplay I do not get any sound.
>>>
>>>> I am wondering if I forgot something in my DT or if I need to do
>>>> something else :
>>>>
>>>>     sound {
>>>>         compatible = "fsl,imx6q-vbx3-sgtl5000",
>>>>                  "fsl,imx-audio-sgtl5000";
>>>>         model = "imx6q-vbx3-sgtl5000";
>>>>         ssi-controller = <&ssi1>;
>>>>         audio-codec = <&codec>;
>>>>         audio-routing =
>>>>             "LINE_IN", "Line In Jack";
>>>>         mux-int-port = <1>;
>>>>         mux-ext-port = <5>;
>>>>     };
>>>>
>>>> &audmux {
>>>>     pinctrl-names = "default";
>>>>     pinctrl-0 = <&pinctrl_audmux>;
>>>>     status = "okay";
>>>> };
>>>>
>>>> &i2c2 {
>>>>     clock-frequency = <100000>;
>>>>     pinctrl-names = "default";
>>>>     pinctrl-0 = <&pinctrl_i2c2>;
>>>>     status = "okay";
>>>>
>>>>     codec: sgtl5000 at 0a {
>>>>         compatible = "fsl,sgtl5000";
>>>>         reg = <0x0a>;
>>>>         clocks = <&clks 201>;
>>>>         VDDA-supply = <&vgen6_reg>;
>>>>         VDDIO-supply = <&vgen6_reg>;
>>>>         sysclk = <24000000>;
>>>>     };
>>>> };
>>>>
>>>> &iomuxc {
>>>>     pinctrl-names = "default";
>>>>     pinctrl-0 = <&pinctrl_hog>;
>>>>
>>>>     imx6qdl-vbx3 {
>>>>         pinctrl_audmux: audmuxgrp {
>>>>             fsl,pins = <
>>>>                 MX6QDLPAD_DISP0_DAT13__AUD5_RXFS        0x130b0
>>>>                 MX6QDL_PAD_DISP0_DAT14__AUD5_RXC        0x130b0
>>>>                 MX6QDL_PAD_DISP0_DAT19__AUD5_RXD        0x130b0
>>>>             >;
>>>>         };
>>>> };
>>>>
>>>> &ssi1 {
>>>>     status = "okay";
>>>>     codec-handle = <&codec>;
>>>
>>> I think this codec-handle is not needed here.
>>>
>>>>     fsl,mode = "i2s-master";
>>>>     fsl,ssi-asynchronous; /* Not sure about it, but does not change anything */
>>>> };
>>>>
>>>> Here is the dmesg part :
>>>> [    6.026803] sgtl5000 1-000a: sgtl5000 revision 0x11
>>>> [    6.129380] imx-sgtl5000 sound: snd_soc_register_card failed (-517)
>>>> [    6.248849] platform sound: Driver imx-sgtl5000 requests probe deferral
>>>> [    6.311643] sgtl5000 1-000a: Using internal LDO instead of VDDD
>>>> [    6.393196] imx-sgtl5000 sound: sgtl5000 <-> 2028000.ssi mapping ok
>>>>
>>>> And the user space commands :
>>>> $> arecord -l
>>>> **** List of CAPTURE Hardware Devices ****
>>>> card 0: imx6qvbx3sgtl50 [imx6q-vbx3-sgtl5000], device 0: HiFi sgtl5000-0 []
>>>>   Subdevices: 1/1
>>>>   Subdevice #0: subdevice #0
>>>>
>>>> $> arecord -v -V stereo -fdat -D hw:0,0 somefile.wav
>>>> Recording WAVE 'somefile.wav' : Signed 16 bit Little Endian, Rate
>>>> 48000 Hz, Stereo
>>>> Hardware PCM card 0 'imx6q-vbx3-sgtl5000' device 0 subdevice 0
>>>> Its setup is:
>>>>   stream       : CAPTURE
>>>>   access       : RW_INTERLEAVED
>>>>   format       : S16_LE
>>>>   subformat    : STD
>>>>   channels     : 2
>>>>   rate         : 48000
>>>>   exact rate   : 48000 (48000/1)
>>>>   msbits       : 16
>>>>   buffer_size  : 16384
>>>>   period_size  : 4096
>>>>   period_time  : 85333
>>>>   tstamp_mode  : NONE
>>>>   period_step  : 1
>>>>   avail_min    : 4096
>>>>   period_event : 0
>>>>   start_threshold  : 1
>>>>   stop_threshold   : 16384
>>>>   silence_threshold: 0
>>>>   silence_size : 0
>>>>   boundary     : 1073741824
>>>>   appl_ptr     : 0
>>>>   hw_ptr       : 0
>>>> arecord: pcm_read:2031: read error: Input/output error
>>>>
>>
>> The clock is not get in
>
> And what can this mean from a driver/mux perspective ?

ssi <--- audmxux ---> pins (configured by pinctrl)

I forget that you see the clock out. BTW too late. What I'm trying to
said is that even if pins are configured and routed they can be routed
in the wrong direction. Right now you try to generate both clock from
the cpu and you can see them but receive path can be configured in
syncronous mode or it can work take the clock from another pin. What
is your configuration?

Michael

> Thanks,
> JM



-- 
| Michael Nazzareno Trimarchi                     Amarula Solutions BV |
| COO  -  Founder                                      Cruquiuskade 47 |
| +31(0)851119172                                 Amsterdam 1018 AM NL |
|                  [`as] http://www.amarulasolutions.com               |


More information about the Alsa-devel mailing list