Hi:
Thanks for your suggestions!
i've already commented that line, as i said in the mail when i isolated the
problem to that function... the error persist but now in:

ret = snd_soc_dai_set_sysclk(cpu_dai, 0, sysclk, SND_SOC_CLOCK_OUT);
if (ret < 0)
return ret;

I'm using the linux-cross-reference, that's how i find out what each
parameter means, but perhaps i still dont quite understand what the
function really does.

I've also read the mcasp section of the am335x datasheet when i was doing
the PCB for the codec, but i should re-read it, as many things where not
clear for me at that moment, and perhaps now they make a little more sense.
Anyway, the problem and same error code persists, now in that other line...

Thanks for your help! i'll post any progress i make


2016-01-11 5:12 GMT-03:00 Robin Scheibler <[email protected]>:

> Hi Pablo,
>
> I took a look at your code.
>
> static int pcm3168_hw_params(struct snd_pcm_substream *substream,
> struct snd_pcm_hw_params *params)
> {
> struct snd_soc_pcm_runtime *rtd = substream->private_data;
> struct snd_soc_dai *codec_dai = rtd->codec_dai;
> struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
> struct snd_soc_codec *codec = rtd->codec;
> struct snd_soc_card *soc_card = rtd->card;
> struct platform_device *pdev = to_platform_device(soc_card->dev);
> int ret = 0;
> unsigned sysclk = ((struct snd_soc_card_drvdata_davinci *)
>   snd_soc_card_get_drvdata(soc_card))->sysclk;
>
> /* set the codec system clock */
> ret = snd_soc_dai_set_sysclk(codec_dai, 0, sysclk, SND_SOC_CLOCK_OUT);
> if (ret < 0)
> return ret;
>
> /* set the CPU system clock */
> ret = snd_soc_dai_set_sysclk(cpu_dai, 0, sysclk, SND_SOC_CLOCK_OUT);
> if (ret < 0)
> return ret;
>
> return 0;
> }
>
>
> I see that you are calling snd_soc_dai_set_sysclk for both codec_dai and
> cpu_dai. I think that is the error. In your case codec_dai is the PCM3168
> chip and cpu_dai is the processor McASP module. Sysclk only makes sense for
> McASP as far as I understand. Try commenting out
>
> /* set the codec system clock */
> ret = snd_soc_dai_set_sysclk(codec_dai, 0, sysclk, SND_SOC_CLOCK_OUT);
> if (ret < 0)
> return ret;
>
>
> I would also suggest you read up about the McASP clock generation
> structure in the sitara documentation (~7000 pages document available from
> TI). This helped me understand how the McASP module works.
>
> Another resource I used is the linux cross-reference
> http://lxr.free-electrons.com/
> I used it to look up where functions are defined and what they do.
>
> Cheers,
> Robin
>
>
> On 10 janv. 2016, at 18:02, Pablo Fonovich <[email protected]>
> wrote:
>
> Hi: im using 24Mhz, that is provided by de beaglebone... i used printk to
> see that sysclk value and it is correct... i get the value as is stated in
> the evm_hw_params function.
> I dont see why the function returns error... but is there a list of error
> codes to see what -524 means?
> Thanks very much
> El ene 10, 2016 1:55 PM, "Robin Scheibler" <[email protected]> escribió:
>
>> Hi Pablo,
>>
>> On 10 janv. 2016, at 01:48, Pablo Fonovich <[email protected]>
>> wrote:
>>
>> Hi Robin:
>> with printk statements, i've isolated the error to this instruction:
>>
>> ret = snd_soc_dai_set_sysclk(codec_dai, 0, sysclk, SND_SOC_CLOCK_OUT);
>>
>> but i don't know what is wrong... the sysclk variable is:
>>
>> unsigned int sysclk = ((struct snd_soc_card_drvdata_davinci *)
>>                snd_soc_card_get_drvdata(soc_card))->sysclk;
>> Just linke in the evm_hw_params
>>
>>
>> What value of sysclk are you providing ?
>>
>>
>> I've noticed that you used:
>>
>> ret = snd_soc_dai_set_sysclk(cpu_dai, 0, 0, SND_SOC_CLOCK_IN);
>>
>> If i'm getting it right, this is to set the cpu_dai sysclock, but i dont
>> get why you used 0 in the frequency parameter. Also you never used the
>> function to set the codec_dai sysclk... Is it not necessary? I'll try
>> commenting this line
>>
>>
>> In my case, MCLK is provided to the chipset by an external crystal. Thus
>> there is no sysclk for me. BCLK and LRCLK are also provided by the chipset
>> to McASP.
>>
>> Best,
>> Robin
>>
>>
>>
>>
>>
>> 2016-01-09 11:55 GMT-03:00 Pablo Fonovich <[email protected]>:
>>
>>> Hi Robin:
>>> I intend to implement a portable multitrack recorder, that's why i
>>> choose this codec, it has many inputs and outputs, good sample rate and bit
>>> resolution, and all in a single chip.
>>> I can't find wendelin's mail direction, so i think i'll just write to
>>> that posts, but they are a bit old i think. I have already looked at them,
>>> but i was more confused by that time, perhaps now i can understand a bit
>>> more.
>>>
>>> If i find out anything i will continue posting here, so if someone is
>>> interested in this project can look at ti...
>>>
>>> Please if you find any documentation tell me!
>>>
>>> Thanks
>>>
>>> 2016-01-08 19:51 GMT-03:00 Robin Scheibler <[email protected]>:
>>>
>>>> Maybe also this can help:
>>>>
>>>> http://mailman.alsa-project.org/pipermail/alsa-devel/2013-February/059433.html
>>>>
>>>> R
>>>>
>>>> On 8 janv. 2016, at 23:49, Robin Scheibler <[email protected]> wrote:
>>>>
>>>> Hi Pablo,
>>>>
>>>> I don’t know for 4.2. Try to read the
>>>> sound/alsa/soc/davinci/davinci-mcasp.c file to understand which
>>>> functionalities are implemented. I used the kernel from Robert C Nelson’s
>>>> repo on github.
>>>>
>>>> After a quick search on google, I saw you are not the first person to
>>>> attempt to connect this codec to the BBB.
>>>> http://www.spinics.net/lists/alsa-devel/msg41291.html
>>>> Maybe you can try to contact this Wendelin Klimann.
>>>>
>>>> BTW, this PCM3168 seems like a very neat chip. What exactly are you
>>>> building ?
>>>>
>>>> Cheers,
>>>> Robin
>>>>
>>>> On 8 janv. 2016, at 23:17, Pablo Fonovich <[email protected]>
>>>> wrote:
>>>>
>>>> Thanks Robin,
>>>> Im using latest stable kernel, think is 4.2, i can check when i get
>>>> home... i will add printk statements, as you suggested...
>>>> Another question. I inted to use one mcasp serializer for 4 channels...
>>>> in the am335x datasheet it seems possible, so i configured 4 tdm slots in
>>>> the device tree instead of 2, but if i try to record with -c 6 it says
>>>> again the "channels count non available". Do you know if its possible? its
>>>> quite frustrating to work without propper documentation, but in need this
>>>> project to get my title...
>>>>
>>>> And last thing, where you able to get alsamixer working?
>>>> Thanks very much
>>>>
>>>> 2016-01-08 19:03 GMT-03:00 Robin Scheibler <[email protected]>:
>>>>
>>>>> Hi Pablo,
>>>>>
>>>>> What is the kernel version you are using ? I have finally used kernel
>>>>> 3.14 because in 3.8 it seems that the mcasp driver implementation could 
>>>>> not
>>>>> support more than two channels.
>>>>>
>>>>> I was in the same position as you. I mostly dug as much as possible
>>>>> from TI documentation and also read the drivers for other chipsets in the
>>>>> kernel code. Then, I also used
>>>>> the sitara am355xx data sheet to understand how McASP works. It took
>>>>> me quite some time to piece together how things work. Still now I do not
>>>>> fully understand. The problem is that there is no proper documentation for
>>>>> the ALSA SoC wrt embedded platforms such as the BBB.
>>>>>
>>>>> Note that the TI example code might not be for exactly the same kernel
>>>>> version you are using. There might be discrepancies.
>>>>>
>>>>> I suggest you run a search on the source code to find where the error
>>>>> “ASoC: machine hw_params failed” is generated. You can add printk
>>>>> statements in your code so that you can later check in the kernel log that
>>>>> things are happening as you expect.
>>>>>
>>>>> Cheers,
>>>>> Robin
>>>>>
>>>>> On 8 janv. 2016, at 01:25, Pablo Fonovich <[email protected]>
>>>>> wrote:
>>>>>
>>>>> sorry, the message also states:
>>>>>
>>>>> arecord: set_params:1297: Unable to install hw params:
>>>>> ACCESS:  RW_INTERLEAVED
>>>>> FORMAT:  S24_LE
>>>>> SUBFORMAT:  STD
>>>>> SAMPLE_BITS: 32
>>>>> FRAME_BITS: 128
>>>>> CHANNELS: 4
>>>>> RATE: 96000
>>>>> PERIOD_TIME: (21333 21334)
>>>>> PERIOD_SIZE: 2048
>>>>> PERIOD_BYTES: 32768
>>>>> PERIODS: 4
>>>>> BUFFER_TIME: (85333 85334)
>>>>> BUFFER_SIZE: 8192
>>>>> BUFFER_BYTES: 131072
>>>>> TICK_TIME: 0
>>>>> # aplay -f S24_LE -r 96000 ../Yam*wav
>>>>> Warning: format is changed to S16_LE
>>>>> Playing WAVE '../Yamaha-TG100-Ocarina-C5.wav' : Signed 16 bit Little
>>>>> Endian, Rate 44100 Hz, Stereo
>>>>> [  102.291787] davinci_evm sound: ASoC: machine hw_params failed: -524
>>>>> aplay: set_params:1297: Unable to install hw params:
>>>>> ACCESS:  RW_INTERLEAVED
>>>>> FORMAT:  S16_LE
>>>>> SUBFORMAT:  STD
>>>>> SAMPLE_BITS: 16
>>>>> FRAME_BITS: 32
>>>>> CHANNELS: 2
>>>>> RATE: 44100
>>>>> PERIOD_TIME: (125011 125012)
>>>>> PERIOD_SIZE: 5513
>>>>> PERIOD_BYTES: 22052
>>>>> PERIODS: 4
>>>>> BUFFER_TIME: (500045 500046)
>>>>> BUFFER_SIZE: 22052
>>>>> BUFFER_BYTES: 88208
>>>>> TICK_TIME: 0
>>>>>
>>>>>
>>>>> 2016-01-07 21:24 GMT-03:00 Pablo Fonovich <[email protected]>:
>>>>>
>>>>>> Thanks very much, that was a problem. But now another error appears:
>>>>>> "davinci_evm sound: ASoC: machine hw_params failed: -524". Do you know 
>>>>>> what
>>>>>> it means, or where can i find the meaning? I assume this means there is
>>>>>> something wrong when i created the pcm3168_hw_params in the alsa machine
>>>>>> layer... but i don't know the problem... where did you look for info? 
>>>>>> only
>>>>>> in that TI guide? I attach my files, and if is not much trouble for you i
>>>>>> would be grateful if you help me...
>>>>>>
>>>>>> i've noticed that some functions you used in davinci_evm.c where not
>>>>>> explained in that guide... and it's very difficult for a noob like me in
>>>>>> this subject for understainding what to do... I've just based my 
>>>>>> pcm3168.c
>>>>>> in another driver, and i really don't quite understand much of what is
>>>>>> going on, nor found any simple documentation about it. If you could give 
>>>>>> me
>>>>>> some hints it would be great!
>>>>>>
>>>>>> Thanks very much..
>>>>>>
>>>>>> 2016-01-07 17:30 GMT-03:00 Robin Scheibler <[email protected]>:
>>>>>>
>>>>>>> Hi Pablo,
>>>>>>>
>>>>>>> With McASP it is not possible to capture less than 2 channels. Try
>>>>>>> with -c 2 argument.
>>>>>>>
>>>>>>> Best,
>>>>>>> Robin
>>>>>>>
>>>>>>> On 7 janv. 2016, at 20:16, [email protected] wrote:
>>>>>>>
>>>>>>> Hi Robin:
>>>>>>>
>>>>>>> I'm doing a similar project, but with a PCM3168 codec... I also
>>>>>>> followed the guide
>>>>>>> http://processors.wiki.ti.com/index.php/Sitara_Linux_Audio_DAC_Example
>>>>>>> Anyway there are lots of things that are not very clear for me...
>>>>>>> <http://processors.wiki.ti.com/index.php/Sitara_Linux_Audio_DAC_Example>
>>>>>>>
>>>>>>> In my case, i use codec as clock slave, and synch, so the problem
>>>>>>> you had should not affect to me... But when i try to record it says:
>>>>>>>
>>>>>>>  arecord -D hw:0,0 -f S24_LE -c 1 -r 96000 -t wav test.wav
>>>>>>> Recording WAVE 'test.wav' : Signed 24 bit Little Endian, Rate 96000
>>>>>>> Hz, Mono
>>>>>>> arecord: set_params:1239: Channels count non available
>>>>>>>
>>>>>>> Could you help me?
>>>>>>>
>>>>>>> On Sunday, May 24, 2015 at 4:38:43 AM UTC-3, Robin Scheibler wrote:
>>>>>>>>
>>>>>>>> Dear all,
>>>>>>>>
>>>>>>>> I have created a custom cape around the STA321MP
>>>>>>>> <http://www.st.com/web/en/catalog/sense_power/FM125/CL935/SC534/PF251500d.d24>
>>>>>>>> chip from ST Microelectronics. It has 6 MEMS microphones and outputs 
>>>>>>>> them
>>>>>>>> on an I2S bus with 3 data lines. I am trying to use mcasp0 on the 
>>>>>>>> boneblack
>>>>>>>> side to receive the data. I am now to the point where the codec
>>>>>>>> configuration happens correctly (I can see the i2s signals with a logic
>>>>>>>> analyzer) and a soundcard is detected. However, when I try to record 
>>>>>>>> sound
>>>>>>>> with arecord, I get the following error:
>>>>>>>>
>>>>>>>> root@beaglebone:~# arecord -l
>>>>>>>>> **** List of CAPTURE Hardware Devices ****
>>>>>>>>> card 0: EVM [STA321MP EVM], device 0: STA321MP sta321mp-audio-0 []
>>>>>>>>>   Subdevices: 1/1
>>>>>>>>>   Subdevice #0: subdevice #0
>>>>>>>>> root@beaglebone:~# arecord -D hw:0,0 -f S24_LE -c 6 -r 44100 -t
>>>>>>>>> wav test.wav
>>>>>>>>> Recording WAVE 'test.wav' : Signed 24 bit Little Endian, Rate
>>>>>>>>> 44100 Hz, Channels 6
>>>>>>>>> arecord: pcm_read:1801: read error: Input/output error
>>>>>>>>>
>>>>>>>>
>>>>>>>> Let me know provide more details.
>>>>>>>>
>>>>>>>>    - The codec is frame and bit clocks master
>>>>>>>>    - The connection to mcasp0 is the following:
>>>>>>>>       - Bit clock <=> P9_12 (mcasp0_aclkr_mux3)
>>>>>>>>       - Frame sync clock (L/R) <=>  P9_27 (mcasp0_fsr)
>>>>>>>>       - Data <=> P9_28 (mcasp0_axr2)
>>>>>>>>       - Data <=> P9_30 (mcasp0_axr0)
>>>>>>>>       - Data <=> P9_25 (mcasp0_axr3)
>>>>>>>>    - I am using kernel 3.14.41 (because 3.8 doesn't have support
>>>>>>>>    for mcasp with >2 channels)
>>>>>>>>    - I am using dtb-builder to add my device to the device tree
>>>>>>>>
>>>>>>>> All the code I have added to the kernel (codec and machine code)
>>>>>>>> and to the device tree is on github. Here are the links to the specific
>>>>>>>> changes I have made.
>>>>>>>>
>>>>>>>> kernel:
>>>>>>>> https://github.com/fakufaku/linux/commit/3a6680960412ef0fc3fbcc6f2c0021350039cc92
>>>>>>>>
>>>>>>>> device tree:
>>>>>>>> https://github.com/fakufaku/dtb-rebuilder/commit/127dbf3c82c78cc602058308ed72978b170c99a6
>>>>>>>>
>>>>>>>> It is my first time trying to code audio driver so please be
>>>>>>>> indulgent :) I have spent a lot of time on this but it seems I am now
>>>>>>>> completely stuck. I'd really appreciate some help. I'd be happy to 
>>>>>>>> provide
>>>>>>>> more clarifications on anything.
>>>>>>>> One thing I do not understand is if I need to add mixer bindings.
>>>>>>>> And also the audio routing (jack vs codec pins, etc).
>>>>>>>>
>>>>>>>> Thank you in advance!
>>>>>>>> Robin
>>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> For more options, visit http://beagleboard.org/discuss
>>>>>>> ---
>>>>>>> You received this message because you are subscribed to a topic in
>>>>>>> the Google Groups "BeagleBoard" group.
>>>>>>> To unsubscribe from this topic, visit
>>>>>>> https://groups.google.com/d/topic/beagleboard/pptZ_9PTqMY/unsubscribe
>>>>>>> .
>>>>>>> To unsubscribe from this group and all its topics, send an email to
>>>>>>> [email protected].
>>>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> For more options, visit http://beagleboard.org/discuss
>>>>>>> ---
>>>>>>> You received this message because you are subscribed to a topic in
>>>>>>> the Google Groups "BeagleBoard" group.
>>>>>>> To unsubscribe from this topic, visit
>>>>>>> https://groups.google.com/d/topic/beagleboard/pptZ_9PTqMY/unsubscribe
>>>>>>> .
>>>>>>> To unsubscribe from this group and all its topics, send an email to
>>>>>>> [email protected].
>>>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>> --
>>>>> For more options, visit http://beagleboard.org/discuss
>>>>> ---
>>>>> You received this message because you are subscribed to a topic in the
>>>>> Google Groups "BeagleBoard" group.
>>>>> To unsubscribe from this topic, visit
>>>>> https://groups.google.com/d/topic/beagleboard/pptZ_9PTqMY/unsubscribe.
>>>>> To unsubscribe from this group and all its topics, send an email to
>>>>> [email protected].
>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> For more options, visit http://beagleboard.org/discuss
>>>>> ---
>>>>> You received this message because you are subscribed to a topic in the
>>>>> Google Groups "BeagleBoard" group.
>>>>> To unsubscribe from this topic, visit
>>>>> https://groups.google.com/d/topic/beagleboard/pptZ_9PTqMY/unsubscribe.
>>>>> To unsubscribe from this group and all its topics, send an email to
>>>>> [email protected].
>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>
>>>>
>>>>
>>>> --
>>>> For more options, visit http://beagleboard.org/discuss
>>>> ---
>>>> You received this message because you are subscribed to a topic in the
>>>> Google Groups "BeagleBoard" group.
>>>> To unsubscribe from this topic, visit
>>>> https://groups.google.com/d/topic/beagleboard/pptZ_9PTqMY/unsubscribe.
>>>> To unsubscribe from this group and all its topics, send an email to
>>>> [email protected].
>>>> For more options, visit https://groups.google.com/d/optout.
>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> For more options, visit http://beagleboard.org/discuss
>>>> ---
>>>> You received this message because you are subscribed to a topic in the
>>>> Google Groups "BeagleBoard" group.
>>>> To unsubscribe from this topic, visit
>>>> https://groups.google.com/d/topic/beagleboard/pptZ_9PTqMY/unsubscribe.
>>>> To unsubscribe from this group and all its topics, send an email to
>>>> [email protected].
>>>> For more options, visit https://groups.google.com/d/optout.
>>>>
>>>
>>>
>>
>> --
>> For more options, visit http://beagleboard.org/discuss
>> ---
>> You received this message because you are subscribed to a topic in the
>> Google Groups "BeagleBoard" group.
>> To unsubscribe from this topic, visit
>> https://groups.google.com/d/topic/beagleboard/pptZ_9PTqMY/unsubscribe.
>> To unsubscribe from this group and all its topics, send an email to
>> [email protected].
>> For more options, visit https://groups.google.com/d/optout.
>>
>>
>>
>> --
>> For more options, visit http://beagleboard.org/discuss
>> ---
>> You received this message because you are subscribed to a topic in the
>> Google Groups "BeagleBoard" group.
>> To unsubscribe from this topic, visit
>> https://groups.google.com/d/topic/beagleboard/pptZ_9PTqMY/unsubscribe.
>> To unsubscribe from this group and all its topics, send an email to
>> [email protected].
>> For more options, visit https://groups.google.com/d/optout.
>>
>
> --
> For more options, visit http://beagleboard.org/discuss
> ---
> You received this message because you are subscribed to a topic in the
> Google Groups "BeagleBoard" group.
> To unsubscribe from this topic, visit
> https://groups.google.com/d/topic/beagleboard/pptZ_9PTqMY/unsubscribe.
> To unsubscribe from this group and all its topics, send an email to
> [email protected].
> For more options, visit https://groups.google.com/d/optout.
>
>
> --
> For more options, visit http://beagleboard.org/discuss
> ---
> You received this message because you are subscribed to a topic in the
> Google Groups "BeagleBoard" group.
> To unsubscribe from this topic, visit
> https://groups.google.com/d/topic/beagleboard/pptZ_9PTqMY/unsubscribe.
> To unsubscribe from this group and all its topics, send an email to
> [email protected].
> For more options, visit https://groups.google.com/d/optout.
>

-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
"BeagleBoard" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to