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

Fabio Estevam festevam at gmail.com
Thu Sep 18 15:30:18 CEST 2014


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 ?

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 kernel is 3.17-rc5.
>
> Thanks for reading all this, and for any advice :).

I am adding some more folks in Cc in case they have some suggestions.

Regards,

Fabio Estevam


More information about the Alsa-devel mailing list