mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-05-12 18:23:45 +00:00
ASoC: Add resource managed snd_soc_register_platform()
Simplify error handling and remove repetitive (and rarely executed) code for unregistration by providing a devm_snd_soc_register_platform() platform. Signed-off-by: Peter Ujfalusi <peter.ujfalusi@ti.com> Signed-off-by: Mark Brown <broonie@linaro.org>
This commit is contained in:
parent
c9eaa447e7
commit
8931bf6208
2 changed files with 36 additions and 0 deletions
|
@ -377,6 +377,8 @@ int snd_soc_resume(struct device *dev);
|
||||||
int snd_soc_poweroff(struct device *dev);
|
int snd_soc_poweroff(struct device *dev);
|
||||||
int snd_soc_register_platform(struct device *dev,
|
int snd_soc_register_platform(struct device *dev,
|
||||||
const struct snd_soc_platform_driver *platform_drv);
|
const struct snd_soc_platform_driver *platform_drv);
|
||||||
|
int devm_snd_soc_register_platform(struct device *dev,
|
||||||
|
const struct snd_soc_platform_driver *platform_drv);
|
||||||
void snd_soc_unregister_platform(struct device *dev);
|
void snd_soc_unregister_platform(struct device *dev);
|
||||||
int snd_soc_add_platform(struct device *dev, struct snd_soc_platform *platform,
|
int snd_soc_add_platform(struct device *dev, struct snd_soc_platform *platform,
|
||||||
const struct snd_soc_platform_driver *platform_drv);
|
const struct snd_soc_platform_driver *platform_drv);
|
||||||
|
|
|
@ -52,6 +52,40 @@ int devm_snd_soc_register_component(struct device *dev,
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(devm_snd_soc_register_component);
|
EXPORT_SYMBOL_GPL(devm_snd_soc_register_component);
|
||||||
|
|
||||||
|
static void devm_platform_release(struct device *dev, void *res)
|
||||||
|
{
|
||||||
|
snd_soc_unregister_platform(*(struct device **)res);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* devm_snd_soc_register_platform - resource managed platform registration
|
||||||
|
* @dev: Device used to manage platform
|
||||||
|
* @platform: platform to register
|
||||||
|
*
|
||||||
|
* Register a platform driver with automatic unregistration when the device is
|
||||||
|
* unregistered.
|
||||||
|
*/
|
||||||
|
int devm_snd_soc_register_platform(struct device *dev,
|
||||||
|
const struct snd_soc_platform_driver *platform_drv)
|
||||||
|
{
|
||||||
|
struct device **ptr;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
ptr = devres_alloc(devm_platform_release, sizeof(*ptr), GFP_KERNEL);
|
||||||
|
if (!ptr)
|
||||||
|
return -ENOMEM;
|
||||||
|
|
||||||
|
ret = snd_soc_register_platform(dev, platform_drv);
|
||||||
|
if (ret == 0) {
|
||||||
|
*ptr = dev;
|
||||||
|
devres_add(dev, ptr);
|
||||||
|
} else {
|
||||||
|
devres_free(ptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
static void devm_card_release(struct device *dev, void *res)
|
static void devm_card_release(struct device *dev, void *res)
|
||||||
{
|
{
|
||||||
snd_soc_unregister_card(*(struct snd_soc_card **)res);
|
snd_soc_unregister_card(*(struct snd_soc_card **)res);
|
||||||
|
|
Loading…
Add table
Reference in a new issue