[alsa-devel] [PATCH][ASoC v2] Replace snd_soc_free_codec with snd_soc_unregister_codec
Takashi Iwai
tiwai at suse.de
Thu Apr 24 18:32:49 CEST 2008
At Thu, 24 Apr 2008 11:20:01 -0500,
Timur Tabi wrote:
>
> The functions snd_soc_register_codec() and snd_soc_free_codec() are companion
> functions, but snd_soc_free_codec() releases resources (via kfree) that were
> not allocated by snd_soc_register_codec(). This means that the caller of
> snd_soc_register_codec() has to use a specific method to allocate these
> resources.
>
> So we replace snd_soc_free_codec() with snd_soc_unregister_codec(). This new
> function only unregisters the codec but does not free the memory resources.
> The caller can now allocate and free the memory resources as it sees fit.
>
> Also updated all callers of snd_soc_free_codec() to call
> snd_soc_unregister_codec() instead and free the resources themselves.
>
> Signed-off-by: Timur Tabi <timur at freescale.com>
> ---
> include/sound/soc-codec.h | 2 +-
> sound/soc/codecs/wm8350.c | 8 ++++++--
> sound/soc/codecs/wm8731.c | 8 ++++++--
> sound/soc/codecs/wm8750.c | 8 ++++++--
> sound/soc/codecs/wm8753.c | 8 ++++++--
> sound/soc/codecs/wm9712.c | 8 ++++++--
> sound/soc/codecs/wm9713.c | 8 ++++++--
> sound/soc/soc-core.c | 11 ++++-------
> 8 files changed, 41 insertions(+), 20 deletions(-)
>
> diff --git a/include/sound/soc-codec.h b/include/sound/soc-codec.h
> index 3cf4819..6f132ba 100644
> --- a/include/sound/soc-codec.h
> +++ b/include/sound/soc-codec.h
> @@ -160,7 +160,7 @@ struct snd_soc_codec *snd_soc_new_codec(
>
> int snd_soc_register_codec(struct snd_soc_codec *codec, struct device *dev);
>
> -void snd_soc_free_codec(struct snd_soc_codec *codec);
> +void snd_soc_deregister_codec(struct snd_soc_codec *codec);
s/deregister/unregister/ ??
Takashi
>
> int snd_soc_new_ac97_codec(struct snd_soc_codec *codec,
> struct snd_ac97_bus_ops *ops, struct snd_card *card,
> diff --git a/sound/soc/codecs/wm8350.c b/sound/soc/codecs/wm8350.c
> index 3195d13..4ea8ced 100644
> --- a/sound/soc/codecs/wm8350.c
> +++ b/sound/soc/codecs/wm8350.c
> @@ -1436,7 +1436,9 @@ static int wm8350_codec_probe(struct platform_device *pdev)
> codec_err:
> kfree(wm8350);
> prv_err:
> - snd_soc_free_codec(codec);
> + snd_soc_unregister_codec(codec);
> + kfree(codec->reg_cache);
> + kfree(codec);
> return ret;
> }
>
> @@ -1446,7 +1448,9 @@ static int wm8350_codec_remove(struct platform_device *pdev)
> struct wm8350_data *wm8350 = codec->private_data;
>
> snd_soc_unregister_codec_dai(wm8350->dai);
> - snd_soc_free_codec(codec);
> + snd_soc_unregister_codec(codec);
> + kfree(codec->reg_cache);
> + kfree(codec);
> kfree(wm8350);
> return 0;
> }
> diff --git a/sound/soc/codecs/wm8731.c b/sound/soc/codecs/wm8731.c
> index 0fe8766..2195c77 100644
> --- a/sound/soc/codecs/wm8731.c
> +++ b/sound/soc/codecs/wm8731.c
> @@ -595,7 +595,9 @@ static int wm8731_codec_probe(struct platform_device *pdev)
> codec_err:
> kfree(wm8731);
> wm8731_err:
> - snd_soc_free_codec(codec);
> + snd_soc_unregister_codec(codec);
> + kfree(codec->reg_cache);
> + kfree(codec);
> return ret;
> }
>
> @@ -606,7 +608,9 @@ static int wm8731_codec_remove(struct platform_device *pdev)
>
> snd_soc_unregister_codec_dai(wm8731->dai);
> kfree(wm8731);
> - snd_soc_free_codec(codec);
> + snd_soc_unregister_codec(codec);
> + kfree(codec->reg_cache);
> + kfree(codec);
> return 0;
> }
>
> diff --git a/sound/soc/codecs/wm8750.c b/sound/soc/codecs/wm8750.c
> index 1b0296f..23e9126 100644
> --- a/sound/soc/codecs/wm8750.c
> +++ b/sound/soc/codecs/wm8750.c
> @@ -898,7 +898,9 @@ static int wm8750_codec_probe(struct platform_device *pdev)
> codec_err:
> kfree(wm8750);
> wm8750_err:
> - snd_soc_free_codec(codec);
> + snd_soc_unregister_codec(codec);
> + kfree(codec->reg_cache);
> + kfree(codec);
> return ret;
> }
>
> @@ -909,7 +911,9 @@ static int wm8750_codec_remove(struct platform_device *pdev)
>
> snd_soc_unregister_codec_dai(wm8750->dai);
> kfree(wm8750);
> - snd_soc_free_codec(codec);
> + snd_soc_unregister_codec(codec);
> + kfree(codec->reg_cache);
> + kfree(codec);
> return 0;
> }
> static struct platform_driver wm8750_codec_driver = {
> diff --git a/sound/soc/codecs/wm8753.c b/sound/soc/codecs/wm8753.c
> index 0d795f4..1cb2d64 100644
> --- a/sound/soc/codecs/wm8753.c
> +++ b/sound/soc/codecs/wm8753.c
> @@ -1584,7 +1584,9 @@ voice_err:
> codec_err:
> kfree(codec->private_data);
> err:
> - snd_soc_free_codec(codec);
> + snd_soc_unregister_codec(codec);
> + kfree(codec->reg_cache);
> + kfree(codec);
> return ret;
> }
>
> @@ -1603,7 +1605,9 @@ static int wm8753_codec_remove(struct platform_device *pdev)
>
> /* free codec */
> kfree(codec->private_data);
> - snd_soc_free_codec(codec);
> + snd_soc_unregister_codec(codec);
> + kfree(codec->reg_cache);
> + kfree(codec);
> return 0;
> }
>
> diff --git a/sound/soc/codecs/wm9712.c b/sound/soc/codecs/wm9712.c
> index 16b6a18..7014190 100644
> --- a/sound/soc/codecs/wm9712.c
> +++ b/sound/soc/codecs/wm9712.c
> @@ -715,7 +715,9 @@ aux_dai_err:
> codec_err:
> kfree(wm9712);
> priv_err:
> - snd_soc_free_codec(codec);
> + snd_soc_unregister_codec(codec);
> + kfree(codec->reg_cache);
> + kfree(codec);
> return ret;
> }
>
> @@ -728,7 +730,9 @@ static int wm9712_codec_remove(struct platform_device *pdev)
> snd_soc_unregister_codec_dai(wm9712->aux_dai);
>
> kfree(codec->private_data);
> - snd_soc_free_codec(codec);
> + snd_soc_unregister_codec(codec);
> + kfree(codec->reg_cache);
> + kfree(codec);
> return 0;
> }
>
> diff --git a/sound/soc/codecs/wm9713.c b/sound/soc/codecs/wm9713.c
> index 5e99bbe..d9ded51 100644
> --- a/sound/soc/codecs/wm9713.c
> +++ b/sound/soc/codecs/wm9713.c
> @@ -1154,7 +1154,9 @@ aux_dai_err:
> codec_err:
> kfree(wm9713);
> priv_err:
> - snd_soc_free_codec(codec);
> + snd_soc_unregister_codec(codec);
> + kfree(codec->reg_cache);
> + kfree(codec);
> return ret;
> }
>
> @@ -1168,7 +1170,9 @@ static int wm9713_codec_remove(struct platform_device *pdev)
> snd_soc_unregister_codec_dai(wm9713->voice_dai);
>
> kfree(codec->private_data);
> - snd_soc_free_codec(codec);
> + snd_soc_unregister_codec(codec);
> + kfree(codec->reg_cache);
> + kfree(codec);
> return 0;
> }
>
> diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c
> index 939b543..7dc6d68 100644
> --- a/sound/soc/soc-core.c
> +++ b/sound/soc/soc-core.c
> @@ -1856,21 +1856,18 @@ int snd_soc_register_codec(struct snd_soc_codec *codec, struct device *dev)
> EXPORT_SYMBOL_GPL(snd_soc_register_codec);
>
> /**
> - * snd_soc_free_codec - unregister and free codec.
> + * snd_soc_unregister_codec - unregister a codec.
> * @codec: codec driver
> *
> - * Unregisters a codec driver with the core and frees all its resources.
> + * Unregisters a codec driver with the core.
> */
> -void snd_soc_free_codec(struct snd_soc_codec *codec)
> +void snd_soc_unregister_codec(struct snd_soc_codec *codec)
> {
> mutex_lock(&client_mutex);
> list_del(&codec->list);
> mutex_unlock(&client_mutex);
> - if (codec->reg_cache)
> - kfree(codec->reg_cache);
> - kfree(codec);
> }
> -EXPORT_SYMBOL_GPL(snd_soc_free_codec);
> +EXPORT_SYMBOL_GPL(snd_soc_unregister_codec);
>
> /**
> * snd_soc_register_platform_dai - registers a platform DAI.
> --
> 1.5.5.1
>
> _______________________________________________
> Alsa-devel mailing list
> Alsa-devel at alsa-project.org
> http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
>
More information about the Alsa-devel
mailing list