Re: beagleboardxm 2.6.39rc4 mcbsp problems.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 05/19/11 04:28, Peter Ujfalusi wrote:
...
> 
>> My codec cannot be set to use only 16 bits per phase. Is there a way to
>> setup the omap so that data is sent to both channels? As you can see
>> above the xphase bit is one saying dual channels. Is this a dma setup
>> problem?
> 
> I can not find datasheet for the max98095...
> So you can not configure the codec to use 2x16 number of bit clocks. when it 
> is configured to receive/send 16bit stereo samples?
Correct, I can set bit clock to 64*lrclk, 48*lrclk, 128*lrclk, 17*lrclk,
and 18*lrclk. The audio folks here think that it is normal to send more
than required bit clocks, data is sent first so just ignore the rest.

It would appear that the mcbsp doesn't really use the lrclk (I think
called FSX), it just uses a positive transition to start the bit
shifting for all the requested bits. The falling edge does not start the
right channel, the shifter keeps going until all requested l/r counts
have been sent.

Or maybe something in the mcbsp has not been set up correctly?

> Is this the case (that the codec all the time have 32 clock cycles per 
> channel)? 
> 
> If this is the case, than it is kind of tricky to get around this, but you can 
> try the following (warning: hack):
> 
> In the codec driver:
> create/add a startup callback function for the dais (snd_soc_dai_ops):
> 
> static int max98095_startup(struct snd_pcm_substream *substream,
> 			   struct snd_soc_dai *dai)
> {
> 	snd_pcm_hw_constraint_msbits(substream->runtime, 0, 32, 16);
> 
> 	return 0;
> }
> 
> Modify the MAX98095_FORMATS to only support S32_LE (remove the other formats 
> for now)
> 
> In the hw_params calls handle the S32_LE in a same way as you handle the 
> S16_LE.
> 
> To explain what we are doing:
> Configure the codec to support only S32_LE format, but tell ALSA, that out of 
> the 32 bit only the first 16bit is valid.
> So the driver will be opened with S32_LE mode, but only the first 16 bits will 
> have audio data:
> 0-15: Left audio
> 16-31: zero (padding on left channel)
> 32-47: Right audio
> 48-63: zero (padding on right channel)
> 
> Use aplay -Dplughw:0,0 -v <some sample> to play audio, and see, if the HW has 
> been opened with S32_LE.
> 
> You should have full stereo sound now.
>
I do, thanks. I am truly amazed that I was able to follow your
instructions and get it to work first time. You must really know your
alsa machine implementation.


The problem is that now I cannot run 44.1Khz audio, I get underruns. I
am guessing that software is expanding the samples from 16 bits to 32?
Without your hack 44.1Khz audio works fine (but only audible in the
first channel).


> I have CC-d the author of the wm98095 codec driver, hi might be able to help 
> you with the codec setup...
> 

I talk to Peter every day. He brought up the codec, I am trying to use
the Beagleboardxm as a generic Linux platform for new codec bringups and
for following kernel and alsa cutting edge software.

Regards, Steve
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Arm (vger)]     [ARM Kernel]     [ARM MSM]     [Linux Tegra]     [Linux WPAN Networking]     [Linux Wireless Networking]     [Maemo Users]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux