It looks to me like the problem came about because the function
prepare_unused_channel_list() in arch/arm/common/edma.c for 4.1 kernels was
modified to use the device tree for determining which dma channels to
enable (by clearing appropriate edma_unused bits in the edma struct).
However, this function is called before processing of the cape device tree
overlays begins. Since the base dtbo files do not have appropriate
references to the McASPs, their dmas are not enabled. When the cape is
loaded, it appears that everything works, but since dma is not enabled, the
required dma transfers do not occur. Hence the underrun errors for play
and overrun errors for record.
A simple workaround that worked for me was to add the following to
arch/arm/boot/dts/am335x-boneblack.dts:
&mcasp0 {
status = "okay";
};
This may not be the best solution. It seems to me that a better solution
would be to modify the kernel so that if a device that uses DMA is enabled
by a device tree overlay, the kernel would enable the DMA when it parses
the overlay. However, I have practically no experience or knowledge of
Linux at the kernel level, so may be completely off base.
--
For more options, visit http://beagleboard.org/discuss
---
You received this message because you are subscribed to the Google Groups
"BeagleBoard" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.