2013/11/20 Richard Genoud richard.genoud@gmail.com:
[added Nicolas Ferre and Bo Shen ]
2013/11/19 Zhong Li zql@glomationinc.com:
One of the testing hardware is the Atmel at91sam9g25-ek (the CPU module and the carrier board). We tried both the 2.6.39 patched with the Atmel patches and the mainline 3.12-rc. The command to test the sound is just the simple aplay <sound-test-file>. The wav file is available here, https://drive.google.com/file/d/0B3TSFX4Mq9PoeTdJOGVaZk5rTWM/edit?usp=sharin....
Thanks
Ok, I reproduce the bug on g35-ek with a v3.11.7+(sam9x5 sound patches) kernel
So, *sometimes*, the left and right channel are swapped. ( I found also the ratio 1 out of 6 (but once it has happened, it seems to be more often)) I tested that with the file given by Zhong Li, and with a file I created with audacity (440Hz only on right channel). I could see at the scope that the channels are swapped before the w8731 codec (the data on the TD line are sometime on the low edge of TF, instead of always being on the high edge (I2S mode)). There's, in both cases, a clock period (TK) between the rising/falling edge of TF and the 1st data bit on TD, so the mode is always I2S, and the channel data are swapped.
I'll try to have a look (but I don't have much time right now)
If someone could test that on a sam9g20 or a WM8904 based board, since they share the same DAI format, they may have the same problem.
After reading the sources (mainly sound/soc/atmel/atmel_ssc_dai.c), I don't understand how the right and left channel are synchronized. (which one will be on TF rising edge, and which one on TF falling edge ?) In the SSC_TCMR register, the start event is TF_FALLING when there only one channel (i.e. mono source always on left channel) With a stereo source, it's TF_EDGE (Detection of any edge on TF signal) ; so the samples are transferred on rising and falling edge. I didn't see anything in the SSC what could synchronize the first sample with a TF falling edge. Or I missed something ?
Nicolas, Bo, any idea ?
Richard.