On Tue, Aug 24, 2010 at 03:09:44PM +0200, Uwe Kleine-K??nig wrote:
Signed-off-by: Uwe Kleine-K??nig u.kleine-koenig@pengutronix.de
Again, please remember to CC maintainers on patches and doing this as driver-specific code feels like we're solving things at the wrong level - register I/O is something that could potentially be dodgy for any device.
sound/soc/codecs/ad1980.c | 41 ++++++++++++++++++++++++++++++----------- 1 files changed, 30 insertions(+), 11 deletions(-)
diff --git a/sound/soc/codecs/ad1980.c b/sound/soc/codecs/ad1980.c index a3e78d4..2851ca1 100644 --- a/sound/soc/codecs/ad1980.c +++ b/sound/soc/codecs/ad1980.c @@ -34,6 +34,8 @@ #include "ad1980.h"
#define AC97_USE_CACHE 1 +#define AC97_VERIFY_WRITE 0
#if AC97_USE_CACHE /*
- AD1980 register cache
@@ -100,13 +102,8 @@ SOC_ENUM("Capture Source", ad1980_cap_src), SOC_SINGLE("Mic Boost Switch", AC97_MIC, 6, 1, 0), };
-static unsigned int ac97_read(struct snd_soc_codec *codec,
- unsigned int reg)
+static int ac97_reg_cacheable(unsigned int reg) {
- u16 *cache = codec->reg_cache;
- int ret;
-#if AC97_USE_CACHE switch (reg) { case AC97_RESET: case AC97_INT_PAGING: @@ -114,18 +111,30 @@ static unsigned int ac97_read(struct snd_soc_codec *codec, case AC97_EXTENDED_STATUS: case AC97_VENDOR_ID1: case AC97_VENDOR_ID2: -#endif
ret = soc_ac97_ops.read(codec->ac97, reg);
-#if AC97_USE_CACHE
default:return 0;
reg = reg >> 1;
return 1;
- }
+}
+static unsigned int ac97_read(struct snd_soc_codec *codec,
- unsigned int reg)
+{
- int ret;
+#if AC97_USE_CACHE
if (ac97_reg_cacheable(reg)) {
u16 *cache = codec->reg_cache;
reg >>= 1;
if (reg >= ARRAY_SIZE(ad1980_reg)) ret = -EINVAL; else ret = cache[reg];
- }
- } else
#endif
ret = soc_ac97_ops.read(codec->ac97, reg);
pr_debug("%s: reg=0x%02x, val=0x%04x\n", __func__, reg, ret);
@@ -146,6 +155,16 @@ static int ac97_write(struct snd_soc_codec *codec, unsigned int reg, cache[reg] = val; } #endif
+#if AC97_VERIFY_WRITE
- if (ac97_reg_cacheable(reg)) {
unsigned int valread = soc_ac97_ops.read(codec->ac97, reg);
if (valread != val)
pr_err("%s: reg=0x%02x, val=0x%04x, readback=0x%04x\n",
__func__, reg, val, valread);
- }
+#endif
- return 0;
}
-- 1.7.1
Alsa-devel mailing list Alsa-devel@alsa-project.org http://mailman.alsa-project.org/mailman/listinfo/alsa-devel