mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-05 01:54:09 +08:00
ASoC: qcom: Use devm for resource management
Simplify the machine drivers for newer SoCs a bit by using the devm_* function calls that automatically release the resources when the driver is removed or when probing fails. Signed-off-by: Stephan Gerhold <stephan@gerhold.net> Tested-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org> Reviewed-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org> Cc: Srinivas Kandagatla <srinivas.kandagatla@linaro.org> Link: https://lore.kernel.org/r/20200723183904.321040-2-stephan@gerhold.net Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
d1e2a97b36
commit
ed3b53e7ff
@ -109,7 +109,7 @@ static int apq8096_platform_probe(struct platform_device *pdev)
|
||||
struct device *dev = &pdev->dev;
|
||||
int ret;
|
||||
|
||||
card = kzalloc(sizeof(*card), GFP_KERNEL);
|
||||
card = devm_kzalloc(dev, sizeof(*card), GFP_KERNEL);
|
||||
if (!card)
|
||||
return -ENOMEM;
|
||||
|
||||
@ -117,31 +117,10 @@ static int apq8096_platform_probe(struct platform_device *pdev)
|
||||
dev_set_drvdata(dev, card);
|
||||
ret = qcom_snd_parse_of(card);
|
||||
if (ret)
|
||||
goto err;
|
||||
return ret;
|
||||
|
||||
apq8096_add_be_ops(card);
|
||||
ret = snd_soc_register_card(card);
|
||||
if (ret)
|
||||
goto err_card_register;
|
||||
|
||||
return 0;
|
||||
|
||||
err_card_register:
|
||||
kfree(card->dai_link);
|
||||
err:
|
||||
kfree(card);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int apq8096_platform_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct snd_soc_card *card = dev_get_drvdata(&pdev->dev);
|
||||
|
||||
snd_soc_unregister_card(card);
|
||||
kfree(card->dai_link);
|
||||
kfree(card);
|
||||
|
||||
return 0;
|
||||
return devm_snd_soc_register_card(dev, card);
|
||||
}
|
||||
|
||||
static const struct of_device_id msm_snd_apq8096_dt_match[] = {
|
||||
@ -153,7 +132,6 @@ MODULE_DEVICE_TABLE(of, msm_snd_apq8096_dt_match);
|
||||
|
||||
static struct platform_driver msm_snd_apq8096_driver = {
|
||||
.probe = apq8096_platform_probe,
|
||||
.remove = apq8096_platform_remove,
|
||||
.driver = {
|
||||
.name = "msm-snd-apq8096",
|
||||
.of_match_table = msm_snd_apq8096_dt_match,
|
||||
|
@ -36,7 +36,7 @@ int qcom_snd_parse_of(struct snd_soc_card *card)
|
||||
num_links = of_get_child_count(dev->of_node);
|
||||
|
||||
/* Allocate the DAI link array */
|
||||
card->dai_link = kcalloc(num_links, sizeof(*link), GFP_KERNEL);
|
||||
card->dai_link = devm_kcalloc(dev, num_links, sizeof(*link), GFP_KERNEL);
|
||||
if (!card->dai_link)
|
||||
return -ENOMEM;
|
||||
|
||||
@ -143,7 +143,6 @@ err:
|
||||
of_node_put(cpu);
|
||||
of_node_put(codec);
|
||||
of_node_put(platform);
|
||||
kfree(card->dai_link);
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL(qcom_snd_parse_of);
|
||||
|
@ -543,16 +543,14 @@ static int sdm845_snd_platform_probe(struct platform_device *pdev)
|
||||
struct device *dev = &pdev->dev;
|
||||
int ret;
|
||||
|
||||
card = kzalloc(sizeof(*card), GFP_KERNEL);
|
||||
card = devm_kzalloc(dev, sizeof(*card), GFP_KERNEL);
|
||||
if (!card)
|
||||
return -ENOMEM;
|
||||
|
||||
/* Allocate the private data */
|
||||
data = kzalloc(sizeof(*data), GFP_KERNEL);
|
||||
if (!data) {
|
||||
ret = -ENOMEM;
|
||||
goto data_alloc_fail;
|
||||
}
|
||||
data = devm_kzalloc(dev, sizeof(*data), GFP_KERNEL);
|
||||
if (!data)
|
||||
return -ENOMEM;
|
||||
|
||||
card->dapm_widgets = sdm845_snd_widgets;
|
||||
card->num_dapm_widgets = ARRAY_SIZE(sdm845_snd_widgets);
|
||||
@ -560,38 +558,13 @@ static int sdm845_snd_platform_probe(struct platform_device *pdev)
|
||||
dev_set_drvdata(dev, card);
|
||||
ret = qcom_snd_parse_of(card);
|
||||
if (ret)
|
||||
goto parse_dt_fail;
|
||||
return ret;
|
||||
|
||||
data->card = card;
|
||||
snd_soc_card_set_drvdata(card, data);
|
||||
|
||||
sdm845_add_ops(card);
|
||||
ret = snd_soc_register_card(card);
|
||||
if (ret) {
|
||||
dev_err(dev, "Sound card registration failed\n");
|
||||
goto register_card_fail;
|
||||
}
|
||||
return ret;
|
||||
|
||||
register_card_fail:
|
||||
kfree(card->dai_link);
|
||||
parse_dt_fail:
|
||||
kfree(data);
|
||||
data_alloc_fail:
|
||||
kfree(card);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int sdm845_snd_platform_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct snd_soc_card *card = dev_get_drvdata(&pdev->dev);
|
||||
struct sdm845_snd_data *data = snd_soc_card_get_drvdata(card);
|
||||
|
||||
snd_soc_unregister_card(card);
|
||||
kfree(card->dai_link);
|
||||
kfree(data);
|
||||
kfree(card);
|
||||
return 0;
|
||||
return devm_snd_soc_register_card(dev, card);
|
||||
}
|
||||
|
||||
static const struct of_device_id sdm845_snd_device_id[] = {
|
||||
@ -604,7 +577,6 @@ MODULE_DEVICE_TABLE(of, sdm845_snd_device_id);
|
||||
|
||||
static struct platform_driver sdm845_snd_driver = {
|
||||
.probe = sdm845_snd_platform_probe,
|
||||
.remove = sdm845_snd_platform_remove,
|
||||
.driver = {
|
||||
.name = "msm-snd-sdm845",
|
||||
.of_match_table = sdm845_snd_device_id,
|
||||
|
Loading…
Reference in New Issue
Block a user