[alsa-devel] No sound captured with SGTL5000 on i.MX6 in I²S master mode
Jean-Michel Hautbois
jean-michel.hautbois at vodalys.com
Thu Sep 18 15:45:47 CEST 2014
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...
>> 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 ?
Thanks,
JM
More information about the Alsa-devel
mailing list