linux/sound/soc
Dimitris Papastamos a7f387d5af ASoC: soc-cache: Add support for rbtree based register caching
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.

Consider a sample device with a large sparse register map.  The
register indices are between [0, 0x31ff].  An array of 12800 registers
is thus created each of which is 2 bytes.  This results in a 25kB
region.  This array normally lives outside soc-core, normally in the
driver itself.  The original soc-core code would kmemdup this region
resulting in 50kB total memory.  When using the rbtree compression
technique and __devinitconst on the original array the figures are
as follows.  For this typical device, you might have 100 initialized
registers, that is registers that are nonzero by default.  We build
an rbtree with 100 nodes, each of which is 24 bytes.  This results
in ~2kB of memory.  Assuming that the target arch can freeup the
memory used by the initial __devinitconst array, we end up using
about ~2kB bytes of actual memory.  The memory footprint will increase
as uninitialized registers get written and thus new nodes created in
the rbtree.  In practice, most of those registers are never changed.
If the target arch can't freeup the __devinitconst array, we end up
using a total of ~27kB.  The difference between the rbtree and the LZO
caching techniques, is that if using the LZO technique the size of
the cache will increase slower as more uninitialized registers get
changed.

Signed-off-by: Dimitris Papastamos <dp@opensource.wolfsonmicro.com>
Acked-by: Liam Girdwood <lrg@slimlogic.co.uk>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2010-11-11 15:59:22 +00:00
..
atmel ASoC: Decouple DAPM from CODECs 2010-11-06 11:28:29 -04:00
au1x ASoC: fix au1x platform 2010-08-31 13:06:31 +01:00
blackfin Merge branch 'for-2.6.36' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound-2.6 into for-2.6.37 2010-08-15 14:56:40 +01:00
codecs Merge branch 'for-2.6.37' into for-2.6.38 2010-11-10 15:41:12 +00:00
davinci ASoC: Decouple DAPM from CODECs 2010-11-06 11:28:29 -04:00
ep93xx ASoC: Decouple DAPM from CODECs 2010-11-06 11:28:29 -04:00
fsl ASoC: Return proper error if snd_soc_register_dais fails in psc_i2s_of_probe 2010-11-08 16:28:33 +00:00
imx ASoC: Decouple DAPM from CODECs 2010-11-06 11:28:29 -04:00
jz4740 ASoC: Decouple DAPM from CODECs 2010-11-06 11:28:29 -04:00
kirkwood ASoC: Decouple DAPM from CODECs 2010-11-06 11:28:29 -04:00
nuc900 ASoC: remove duplicated include for nuc900 2010-10-05 19:26:00 -07:00
omap ASoC: Decouple DAPM from CODECs 2010-11-06 11:28:29 -04:00
pxa Merge branch 'for-2.6.37' into for-2.6.38 2010-11-06 11:35:44 -04:00
s3c24xx Merge branch 'for-2.6.37' into HEAD 2010-11-08 16:52:02 +00:00
s6000 ASoC: Decouple DAPM from CODECs 2010-11-06 11:28:29 -04:00
sh ASoC: Decouple DAPM from CODECs 2010-11-06 11:28:29 -04:00
txx9 ASoC: multi-component - ASoC Multi-Component Support 2010-08-12 14:00:00 +01:00
Kconfig ASoC: soc-cache: Add support for LZO register caching 2010-11-11 15:59:01 +00:00
Makefile ASoC: Fix sorting of Makefile and Kconfig 2010-07-05 23:35:29 +09:00
soc-cache.c ASoC: soc-cache: Add support for rbtree based register caching 2010-11-11 15:59:22 +00:00
soc-core.c ASoC: soc-cache: Add support for flat register caching 2010-11-11 15:58:41 +00:00
soc-dapm.c ASoC: Add DAPM trace events 2010-11-11 14:54:31 +00:00
soc-jack.c ASoC: Decouple DAPM from CODECs 2010-11-06 11:28:29 -04:00
soc-utils.c ASoC: Add BCLK calculation utility for TDM mode too 2009-11-25 19:55:46 +00:00