On Tue, Apr 27, 2010 at 10:20 AM, Liam Girdwood lrg@slimlogic.co.uk wrote:
Another problem is that ASoC won't let me probe the DMA channels independently. That is, I cannot tell ASoC that I have a playback DMA and a capture DMA. ASoC does not recognize two DMA devices for a single SSI. If you can fix that, then I can turn the DMA driver into an OF driver.
Iirc, the SSI and DMA controllers on your SoC mean that each DMA device can only do one direction (either Playback or Capture). So I'm thinking we create two DAI link entries for your sound card (one for playback and the other for capture) and they both use the same SSI device but each would have it's own DMA device.
This would result in two separate pcm devices being exported to userspace i.e one for playback only and the other for capture only. I think this is also a more accurate representation of your hardware too (since we have different DMA devices for each pcm stream direction).
Ok, I'm trying to do this now, and I'm running into problems.
So here's the device list:
One machine One SSI Two DMA channels One codec
So I create two dai_links in the machine driver. Each dai_link has two DAIs in it. The DAIs are identical, except for the platform_drv field. The platform_drv in the first DAI points to the first DMA channel, and the platform_drv of the second DAI points to the second DMA channel.
When I boot Linux, I get this:
asoc: cs4270 <-> /soc@e0000000/ssi@16000 mapping ok sysfs: cannot create duplicate filename '/devices/platform/soc-audio/cs4270'
so it looks like when asoc is processing the dai_link, it tries to create a sysfs device for the codec twice.
How do I avoid this?