Hi
On Thu, Sep 18, 2014 at 3:45 PM, Jean-Michel Hautbois jean-michel.hautbois@vodalys.com wrote:
2014-09-18 15:35 GMT+02:00 Michael Trimarchi michael@amarulasolutions.com:
Hi
On Thu, Sep 18, 2014 at 3:30 PM, Fabio Estevam festevam@gmail.com wrote:
Hi Jean-Michel,
On Thu, Sep 18, 2014 at 9:56 AM, Jean-Michel Hautbois jean-michel.hautbois@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@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