[alsa-devel] [PATCH 1/4] ASoC: clean up cache read/write functions
Takashi Iwai
tiwai at suse.de
Mon Dec 20 18:32:02 CET 2010
At Mon, 20 Dec 2010 17:24:05 +0000,
Mark Brown wrote:
>
> 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.
Yes, this could be done better in the common place before write op is
called.
> 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.
Sounds reasonable.
> > +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.
My patch is just a clean up, and I kept the code "reg &= 0xff" in some
places. Without these, all can be the same function.
Takashi
More information about the Alsa-devel
mailing list