ASoC: soc-link: introduce exit() callback
authorPierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Mon, 22 Jun 2020 15:42:37 +0000 (10:42 -0500)
committerMark Brown <broonie@kernel.org>
Tue, 23 Jun 2020 11:25:37 +0000 (12:25 +0100)
commit21a00fb33790f828a34b9ce50ab9f9130bc1ffb4
tree0bb6db04d63c65bccd6ef1b43045dc640f9ac522
parent39853b1438bf9b07349c8c44b48f6c2eda6f8840
ASoC: soc-link: introduce exit() callback

Some machine drivers allocate or request resources with
snd_soc_link_init() phase of the card probe. These resources need to
be properly released when removing a card, and this patch suggests a
dual exit() callback.

The exit() is invoked in soc_remove_pcm_runtime(), which is not
completely symmetric with the init() invoked in soc_init_pcm_runtime().

Alternate solutions were considered, e.g. adding a .remove() callback
for the platform driver, but that's not symmetrical at all and would
be difficult to handle if there are more than one dailink implementing
an .init(). We looked also into using .remove_dai_link() callback, but
that would also be imbalanced.

Note that because of the error handling in snd_soc_bind_card(), which
jumps to probe_end, there is no way to guarantee the exit() is invoked
with resources allocated in the init(). Prior to releasing those
resources, implementations of the exit() callback shall check the
resources are valid.

Suggested-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Reviewed-by: Guennadi Liakhovetski <guennadi.liakhovetski@linux.intel.com>
Reviewed-by: Curtis Malainey <curtis@malainey.com>
Link: https://lore.kernel.org/r/20200622154241.29053-2-pierre-louis.bossart@linux.intel.com
Signed-off-by: Mark Brown <broonie@kernel.org>
include/sound/soc-link.h
include/sound/soc.h
sound/soc/soc-core.c
sound/soc/soc-link.c