[alsa-devel] [PATCH 1/4] ASoC: clean up cache read/write functions
Mark Brown
broonie at opensource.wolfsonmicro.com
Mon Dec 20 18:24:05 CET 2010
On Mon, Dec 20, 2010 at 05:01:09PM +0100, Takashi Iwai wrote:
> +static int do_hw_write(struct snd_soc_codec *codec, unsigned int reg,
> + unsigned int value, void *data, unsigned int size)
> +{
> + int ret;
> +
> + if (!snd_soc_codec_volatile_register(codec, reg) &&
> + reg < codec->driver->reg_cache_size) {
> + ret = snd_soc_cache_write(codec, reg, value);
> + if (ret < 0)
> + return -1;
> + }
This isn't actually doing a hardware write, though - it's the entire
write path which may or may not end up at the hardware. The whole
passing of both the mangled and unmangled versions also feels a bit odd
here.
I think it'd be clearer to do this by making this a plain function and
adding a mangle operation set by the cache types which gets called out
to at the appropriate moment, that'd probably make the code flow more
naturally.
> +static unsigned int snd_soc_4_12_read(struct snd_soc_codec *codec,
> + unsigned int reg)
> +{
> + return do_hw_read(codec, reg);
> +}
> +
> static unsigned int snd_soc_7_9_read(struct snd_soc_codec *codec,
> unsigned int reg)
> {
> - int ret;
> - unsigned int val;
> -
> - if (reg >= codec->driver->reg_cache_size ||
> - snd_soc_codec_volatile_register(codec, reg)) {
> - if (codec->cache_only)
> - return -1;
> -
> - BUG_ON(!codec->hw_read);
> - return codec->hw_read(codec, reg);
> - }
> -
> - ret = snd_soc_cache_read(codec, reg, &val);
> - if (ret < 0)
> - return -1;
> - return val;
> + return do_hw_read(codec, reg);
If this is OK to do we should just be making do_hw_read() the operation
directly.
More information about the Alsa-devel
mailing list