Message ID | CAOMZO5CReW7-8L7zx=z1TshwJSzcfGThCjws7fTfbZJKCnCZLg@mail.gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
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. > 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 Michael >> 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 > _______________________________________________ > Alsa-devel mailing list > Alsa-devel@alsa-project.org > http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
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... >> 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 ? Thanks, JM
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
2014-09-18 15:55 GMT+02:00 Michael Trimarchi <michael@amarulasolutions.com>: > 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 OK, I will try to find out everything I can. >>>> 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? The master clock is provided by the CPU but I just found out something. I have a FPGA between sgtl5000 and i.MX6. It is here in order to route signals. And when imx-audmux is probed, it does not find the clock, because the FPGA is not configured yet. And as this driver is not returning EPROBE_DEFER, it does not try a little bit later (when the clock will really be here). I don't know if this is the explanation of my issue, but at least this is an interesting catch. I will try and get you informed. JM
<snip> >> 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? > > The master clock is provided by the CPU but I just found out > something. I have a FPGA between sgtl5000 and i.MX6. It is here in > order to route signals. And when imx-audmux is probed, it does not > find the clock, because the FPGA is not configured yet. > And as this driver is not returning EPROBE_DEFER, it does not try a > little bit later (when the clock will really be here). > I don't know if this is the explanation of my issue, but at least this > is an interesting catch. > I will try and get you informed. Well, audmux is not getting clock, this is normal I think, the clock I was mentionning is the MCLK of SGTL5000 and this one is linked to FPGA, but found after all. I now had a further look into sound/soc/fsl/fsl_ssi.c and I see this : sprop = of_get_property(np, "fsl,mode", NULL); if (sprop) { if (!strcmp(sprop, "ac97-slave")) ssi_private->dai_fmt = SND_SOC_DAIFMT_AC97; else if (!strcmp(sprop, "i2s-slave")) ssi_private->dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_CBM_CFM; } I may have missed something, but it seems that i2s-master is not parsed, and does not set dai_fmt ? Or maybe is it done later ? I tried : else if (!strcmp(sprop, "i2s-slave")) ssi_private->dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_CBM_CFM; + else if (!strcmp(sprop, "i2s-master")) + ssi_private->dai_fmt = SND_SOC_DAIFMT_I2S | + SND_SOC_DAIFMT_CBM_CFS; } But this is not better : arecord -v -V stereo -f cd -D hw:0,0 somefile.wav Recording WAVE 'somefile.wav' : Signed 16 bit Little Endian, Rate 44100 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 : 44100 exact rate : 44100 (44100/1) msbits : 16 buffer_size : 16384 period_size : 4096 period_time : 92879 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 JM
On Thu, Sep 18, 2014 at 06:09:50PM +0200, Jean-Michel Hautbois wrote: > Well, audmux is not getting clock, this is normal I think, the clock I > was mentionning is the MCLK of SGTL5000 and this one is linked to > FPGA, but found after all. > I now had a further look into sound/soc/fsl/fsl_ssi.c and I see this : > > sprop = of_get_property(np, "fsl,mode", NULL); > if (sprop) { > if (!strcmp(sprop, "ac97-slave")) > ssi_private->dai_fmt = SND_SOC_DAIFMT_AC97; > else if (!strcmp(sprop, "i2s-slave")) > ssi_private->dai_fmt = SND_SOC_DAIFMT_I2S | > SND_SOC_DAIFMT_CBM_CFM; > } > > I may have missed something, but it seems that i2s-master is not > parsed, and does not set dai_fmt ? Actually this is kind of obsolete property because initially the SSI driver only supported i2s-slave. We've put an i2s-slave check here is to limit the driver by excluding other modes. But now, the driver has the capability to derive clock from CCM and output it for external CODEC. So this one could be dropped in fact rather than adding a new i2s-master case IMO. > arecord -v -V stereo -f cd -D hw:0,0 somefile.wav > Recording WAVE 'somefile.wav' : Signed 16 bit Little Endian, Rate > 44100 Hz, Stereo > arecord: pcm_read:2031: read error: Input/output error The problem here should be the AUDMUX configuration issue. The imx- sgtl5000.c driver only supports CODEC in master mode. So if you try to switch the CODEC slave mode, you shall also change not only the CBM_CFM to CBS_CFS but also swap the ext_port and int_port of AUDMUX (a little confusing approach here as the configuration of AUDMUX is routing the data and clocks from a source port to a destination port while each of side, external or internal, might be a source port -- When using CBM_CFM, the source port should be external port; while using CBS_CFS, the source port should be the internal port.) There may be another topic, however, actually the fsl-asoc-card driver does handle the master/slave mode supports. So if you are trying to add the CODEC slave mode support into imx-sgtl5000. I suggest you to try the fsl-asoc-card instead. Its DT binding's totally compatible with imx-sgtl5000's. What you need to do is just enable it (and disable imx-sgtl500) in the menuconfig or add these enable/disable into imx_v6_v7_defconfig. Nicolin
On Thu, Sep 18, 2014 at 10:30:18AM -0300, Fabio Estevam wrote: > > &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 The other issue over here is you are using asynchronous mode of SSI, while imx-sgtl5000 is using synchronous configurations for AUDMUX. You can try it with fsl-asoc-card because it uses asynchronous mode of AUDMUX, although I've not tested it with SSI in its asynchronous mode as I only have a synchronous (SSI) environment. > > &ssi1 { > > status = "okay"; > > codec-handle = <&codec>; > > fsl,mode = "i2s-master"; > > fsl,ssi-asynchronous; /* Not sure about it, but does not change anything */ The driver cares about it. If you look at the symmetric part carefully, you would find some register configurations of SSI does depends on the this property via symmetric check. For example: if (ssi_private->cpu_dai_drv.symmetric_rates) { /* Need to clear RXDIR when using SYNC mode */ srcr &= ~CCSR_SSI_SRCR_RXDIR; scr |= CCSR_SSI_SCR_SYN; } Nicolin
--- 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");