[alsa-devel] [PATCH 4/4] ASoC: soc-cache: Add support for rbtree based register caching
Dimitris Papastamos
dp at opensource.wolfsonmicro.com
Fri Nov 5 10:38:35 CET 2010
On Thu, 2010-11-04 at 14:49 -0400, Mark Brown wrote:
> On Thu, Nov 04, 2010 at 02:22:44PM +0000, Dimitris Papastamos wrote:
>
> > This patch adds support for rbtree compression when storing the
> > register cache. It does this by not adding any uninitialized registers
> > (those whose value is 0). If any of those registers is written
> > with a nonzero value they get added into the rbtree.
>
> > + rbtree_ctx = codec->reg_cache;
> > + for (node = rb_first(&rbtree_ctx->root); node; node = rb_next(node)) {
> > + rbnode = rb_entry(node, struct snd_soc_rbtree_node, node);
> > + if (!rbnode->dirty)
> > + continue;
> > + snd_soc_cache_read(codec, rbnode->reg, &val);
> > + snd_soc_write(codec, rbnode->reg, val);
> > + dev_dbg(codec->dev, "Synced register %#x, value = %#x\n",
> > + rbnode->reg, val);
>
> Hrm, dirty handling is kind of interesting. It is unconditionally set
> in the write function and never cleared so we'll always rewrite a
> register if it's ever been touched. Is it worth remembering the default
> values and just comparing with them, the memory overhead will probably
> be low since we only have one bitfield value here... (and remember that
> we'll be unlikely to allocate memory in 21 byte packed hunks with no
> overhead...).
Yes, I have deliberately not cleared those bits because at the moment I
don't the default value of the register saved anywhere. So what I will
do is, I will save the default value, and then I will only sync those
registers whose value differs from their default value.
Thanks,
Dimitrios
More information about the Alsa-devel
mailing list