[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CAF+7xWkVLNgToGiEn+xqgnii7QozNu0QAf2U-kXRNRtVK0dkqA@mail.gmail.com>
Date: Fri, 14 Oct 2011 06:39:43 +0800
From: Axel Lin <axel.lin@...il.com>
To: Mark Brown <broonie@...nsource.wolfsonmicro.com>
Cc: linux-kernel@...r.kernel.org,
Arnaud Patard <arnaud.patard@...-net.org>,
Liam Girdwood <lrg@...com>, alsa-devel@...a-project.org
Subject: Re: [PATCH 1/3] ASoC: alc5623: Convert codec->hw_read to regmap_read
2011/10/14 Mark Brown <broonie@...nsource.wolfsonmicro.com>:
> On Thu, Oct 13, 2011 at 03:22:55PM +0800, Axel Lin wrote:
>> codec->hw_read is broken now, let's covert to regmap_read.
>>
>> Signed-off-by: Axel Lin <axel.lin@...il.com>
>
> I'd rather not fix these like this because when we convert these drivers
> to use regmap directly it won't be quite so obvious what's going on and
> we'll easily introduce bugs where we start using the cached values from
> a regmap level cache.
>
> Probably the best thing here is to convert all these drivers to use
> cache_bypass to read directly through the cache - the same thing will
> then work with direct regmap usage.
>
I don't complete understand "use cache_bypass to read directly through
the cache".
Can you illustrate it?
The purpose of original implementation is to read h/w then fill the cache.
The cache is zeroed before we call alc5623_fill_cache().
Or do you mean changes like below instead of calling regmap_read directly?
diff --git a/sound/soc/codecs/alc5623.c b/sound/soc/codecs/alc5623.c
index 557b3af..43006b3 100644
--- a/sound/soc/codecs/alc5623.c
+++ b/sound/soc/codecs/alc5623.c
@@ -51,10 +51,15 @@ static void alc5623_fill_cache(struct snd_soc_codec *codec)
{
int i, step = codec->driver->reg_cache_step;
u16 *cache = codec->reg_cache;
+ unsigned int val;
/* not really efficient ... */
- for (i = 0 ; i < codec->driver->reg_cache_size ; i += step)
- cache[i] = codec->hw_read(codec, i);
+ codec->cache_bypass = 1;
+ for (i = 0 ; i < codec->driver->reg_cache_size ; i += step) {
+ snd_soc_read(codec, i);
+ cache[i] = val;
+ }
+ codec->cache_bypass = 0;
}
static inline int alc5623_reset(struct snd_soc_codec *codec)
Thanks,
Axel
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists