[alsa-devel] How to transfer more than 2 channels between i.MX25 & AD1938 using SSI?
sven.zeisberg at googlemail.com
Mon Aug 30 08:30:50 CEST 2010
thanks for your help. We've been trying to use
snd_soc_dai_set_tdm_slot() but had no success. The reason why this
doesn't work is a limitation in the SSI peripheral of the i.MX25:
Acc. to the "i.MX25 Multimedia Applications Processor Reference Manual,
Rev. 1" Chapter 22.214.171.124 I²S Mode, Page 43-16, the i.MX25 reverts in I²S
Slave Mode to "Normal Mode" (as opposed to "Network Mode") by hardware.
In Chapter 126.96.36.199 Normal Mode, Page 43-5, it's explained that this
mode only transfers one timeslot per frame:
"If Normal mode is configured with more than one time slot per frame,
data is transferred only in the first time slot. No data is transferred
in subsequent time slots. In Normal mode, DC[4:0] values corresponding
to more than a single time slot in a frame, only results in lengthening
of the frame."
Therefore, the SSI on the i.MX25 in Slave Mode (I don't know the other
i.MX chips) can not do more than 2 channels.
This kind of explaines also, why all multi channel examples from
freescale use the ESAI Port. The only codec used in their PDKs on the
SSI is a plain stereo chip.
To overcome this limitation, we've split up our working group and will
work on SSI master mode supoprt in the imx-ssc.c driver.
Am 27.08.2010 13:45, schrieb Sascha Hauer:
> Hi Sven,
> On Wed, Aug 25, 2010 at 04:39:51PM +0200, Sven Zeisberg wrote:
>> has anybody succeeded to transfer more than 2 audio channels between
>> i.MX25 and a CODEC throught the i.MX25 SSI Port?
>> We have succeeded to set the CODEC (AD1938) as Master to the required
>> mode (TDM with 8 Timeslots and 32 Bit per Timeslot). However, as soon as
>> we start to play a wav file with aplay, we can see on the logic analyzer
>> that the data format on the SSI lines is reset to a stereo mode (2
>> channels with frame sync changing level between channels).
>> In the imx-ssi driver, I can see that .channel_max = 2 - therefore my
>> question: does this driver support more than two channels at all?
> You have to call snd_soc_dai_set_tdm_slot() with the correct parameters.
> This function is currently relatively untested, so expect bugs here. I
> would try something like:
> snd_soc_dai_set_tdm_slot(cpu_dai, 0xfffff00, 0xfffff00, 8, 32);
> slot_width is currently not handled in this function, this may be
> wrong. I don't know whether a slot length of 32bit is supported at all
> in the hardware.
> I only tested this driver with 2 channels since I have no access to a
> codec supporting something else.
> Hope that helps
More information about the Alsa-devel