I've implemented what I hope are some improvements to the DAPM power sequence application. Currently when it is implementing power changes DAPM will do one register write per widget. Normally this leads to multiple writes to the same register since power control tends to be clustered in a few registers, slowing things down. This can get noticable on slow or heavily contended buses, especially around resume. The overall effect of these changes is that DAPM will try to minimise the number of register writes it does when implementing power sequences.
As with any substantial change in the power sequencing there is a risk that there may have been some performance regressions on some systems - my biggest concern is that some thing were being helped by the delays introduced by the repeated register writes and may require special handling to fix. My hope is that this won't happen if anything it should fix some problems by ensuring that both left and right channels of stereo paths get powered up together but without wide testing that's hard to guarantee. Any testing that you can do on your systems would be greatly appreciated.
Obviously this is quite an invasive change so I don't intend to submit to ALSA until after the 2.6.31 merge window has closed. The patches can be found here for the time being:
git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound-2.6.git dapm
Mark Brown (7): ASoC: Sort DAPM power sequences while building lists ASoC: Factor out DAPM sequence execution ASoC: Coalesce register writes for DAPM sequences ASoC: Sort specialised mixers and muxes together ASoC: Coalesce power updates for DAPM widgets with events ASoC: Coalesce power updates for PGAs ASoC: Make DAPM power sequence lists local variables
include/sound/soc.h | 2 - sound/soc/soc-dapm.c | 302 +++++++++++++++++++++++++++++++++++++------------- 2 files changed, 227 insertions(+), 77 deletions(-)