diff options
author | Mark Brown <broonie@linaro.org> | 2014-04-18 18:00:30 +0100 |
---|---|---|
committer | Mark Brown <broonie@linaro.org> | 2014-04-18 18:00:30 +0100 |
commit | 3819bfa23786fd1e8571fbb143e1b0b8f0fead86 (patch) | |
tree | 5620fc0d02dddd1e9f460d9875d5232c232c78b8 /sound | |
parent | b2e69054ea1a36f2c1ace15a55240937aa091cba (diff) | |
parent | 8931bf6208776292b1b888dd8534229f63e2eaa2 (diff) | |
download | linux-3819bfa23786fd1e8571fbb143e1b0b8f0fead86.tar.gz |
Merge branch 'topic/devm' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound into asoc-omap
Diffstat (limited to 'sound')
-rw-r--r-- | sound/soc/soc-devres.c | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/sound/soc/soc-devres.c b/sound/soc/soc-devres.c index 7ac745df1412..e94aa0277250 100644 --- a/sound/soc/soc-devres.c +++ b/sound/soc/soc-devres.c @@ -52,6 +52,40 @@ int devm_snd_soc_register_component(struct device *dev, } 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) { snd_soc_unregister_card(*(struct snd_soc_card **)res); |