On Wed, Aug 04, 2010 at 02:55:45PM -0500, Timur Tabi wrote:
I created a log with some printks that kinda show what's going on. In one process I run speaker-test, and then I start arecord in another process.
You might want to provide a little more context on what you're trying to do here for the benefit of readers...
In summary, the problem appears to be that asoc calls soc_pcm_apply_symmetry() in soc_pcm_open(), but this occurs before soc_pcm_hw_params() can set rtd->rate. So rtd->rate is always zero when soc_pcm_apply_symmetry() is called.
For some reason, this isn't a problem when arecord is started before speaker-test. In that case, rtd->rate is 48000 when speaker-test is started:
The symmetric_rates infrastructure was only ever really intended to work over a single DAI so I'd not be at all surprised if it gets a little confused (though I'm surprised it's doing anything at all).