ASoC: au1x: PSC-AC97 bugfixes
authorManuel Lauss <manuel.lauss@googlemail.com>
Tue, 8 Sep 2009 17:45:17 +0000 (19:45 +0200)
committerMark Brown <broonie@opensource.wolfsonmicro.com>
Tue, 8 Sep 2009 18:21:27 +0000 (19:21 +0100)
commitcdc65fbe18aef15e92d2ebb410a189fbf956fb06
treed121aea788bf52467683a9072ff3d15b89bd5c08
parent87831cb660954356d68cebdb1406f3be09e784e9
ASoC: au1x: PSC-AC97 bugfixes

This patch fixes the following bugs:

- only reprogram bitdepth if it has changed since last call to hw_params.
- add locking inside ac97_read/write functions:
  When reprogramming sample depth, the ac97 unit has to be disabled,
  which should not be done in the middle of codec register accesses.

- retry timed-out codec register accesses.

- wait for status bits to set/clear when starting/stopping various
  functional blocks; very important after reenabling AC97 unit else
  sound may be distorted (e.g. high-pitch noise in 1kHz sine wave).

- clear fifos before/after starting/stopping RX/TX.

- longer timeouts waiting for PSC/AC97 ready after cold reset
  with certain codecs this can take ridiculous amounts of time.

Run-tested on various Au1200 platforms with various codecs.

Signed-off-by: Manuel Lauss <manuel.lauss@gmail.com>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
sound/soc/au1x/psc-ac97.c
sound/soc/au1x/psc.h