[alsa-devel] [PATCH 2/4] ASoC: soc-cache: Add support for flat register caching
Mark Brown
broonie at opensource.wolfsonmicro.com
Thu Nov 4 19:31:40 CET 2010
On Thu, Nov 04, 2010 at 02:22:42PM +0000, Dimitris Papastamos wrote:
> This patch introduces the new caching API and migrates the
> old caching interface into the new one. The flat register caching
> technique does not use compression at all and it is equivalent to
Looks good - probably the main thing I'm asking for with the single
patches is to do stuff like squashing the first patch into this.
> @@ -680,6 +722,8 @@ int snd_soc_codec_set_cache_io(struct snd_soc_codec *codec,
> return -EINVAL;
> }
>
> + mutex_init(&cache_rw_mutex);
> +
I'd kind of expect this to be with the other cache setup? I'd also
expect the lock to be a member variable next to the cache, rather than a
global. Probably not a big deal but still nicer.
> + switch (codec_drv->reg_word_size) {
...
> + default:
> + return -EINVAL;
> + }
I'd kind of expect these to be BUG() so we don't silently fall back to
direct I/O if the cache support isn't implemented at all.
> +static int snd_soc_flat_cache_init(struct snd_soc_codec *codec)
> +{
> + struct snd_soc_codec_driver *codec_drv;
> + size_t reg_size;
> +
> + codec_drv = codec->driver;
> + reg_size = codec_drv->reg_cache_size * codec_drv->reg_word_size;
> +
> + if (codec_drv->reg_cache_default)
> + codec->reg_cache = kmemdup(codec_drv->reg_cache_default,
> + reg_size, GFP_KERNEL);
> + else
> + codec->reg_cache = kzalloc(reg_size, GFP_KERNEL);
> + if (!codec->reg_cache)
> + return -EINVAL;
-ENOMEM.
> +int snd_soc_cache_init(struct snd_soc_codec *codec)
> +{
> +EXPORT_SYMBOL_GPL(snd_soc_cache_init);
Does this need to be exported? Right now the only caller is in the
core.
> @@ -3261,6 +3244,16 @@ int snd_soc_register_codec(struct device *dev,
> INIT_LIST_HEAD(&codec->dapm_widgets);
> INIT_LIST_HEAD(&codec->dapm_paths);
>
> + /* allocate CODEC register cache */
> + if (codec_drv->reg_cache_size && codec_drv->reg_word_size) {
> + ret = snd_soc_cache_init(codec);
> + if (ret < 0) {
> + dev_err(codec->dev, "Failed to set cache compression type: %d\n",
> + ret);
> + goto error_cache;
> + }
> + }
Are you sure that all the CODECs that rely on the existing shared
register cache are going to call this?
More information about the Alsa-devel
mailing list