[alsa-devel] Question about snd_soc_8_8_write
Dear Mark
I have question about snd_soc_8_8_write
----------------------------- static int snd_soc_8_8_write(struct snd_soc_codec *codec, unsigned int reg, unsigned int value) { u8 *cache = codec->reg_cache; u8 data[2];
BUG_ON(codec->volatile_register);
data[0] = reg & 0xff; data[1] = value & 0xff;
if (reg < codec->reg_cache_size) cache[reg] = value;
if (codec->hw_write(codec->control_data, data, 2) == 2) return 0; else return -EIO; } -----------------------------
I wounder this behavior.
if reg >= codec->reg_cache_size, this functions will call hw_write though cache[xx] ignore it.
And even though if reg < codec->reg_cache_size, if hw_write return error, cache[xx] value was still changed.
This is correct behavior ? Or are there any reason ?
Best regards -- Kuninori Morimoto
On Mon, Dec 14, 2009 at 01:30:06PM +0900, Kuninori Morimoto wrote:
I wounder this behavior.
if reg >= codec->reg_cache_size, this functions will call hw_write though cache[xx] ignore it.
That's there because there were a few devices which chose to cache only a subset of their registers. Usually this is because there are some extra partially documented registers at the end of the map and a lack of documented default values makes using the cache tricky.
even though if reg < codec->reg_cache_size, if hw_write return error, cache[xx] value was still changed.
This is correct behavior ? Or are there any reason ?
The error handling for failed writes isn't massively good. It's not always entirely clear if the best thing to do is to cache the result and hope that things work next time; for the most part if I/O starts failing the problem is usually
Dear Mark
Thank you for your answer
That's there because there were a few devices which chose to cache only a subset of their registers. Usually this is because there are some extra partially documented registers at the end of the map and a lack of documented default values makes using the cache tricky.
Ahhh... I understand I didn't know about that thank you.
Best regards -- Kuninori Morimoto
participants (2)
-
Kuninori Morimoto
-
Mark Brown