Commit ed3b53e7 authored by Stephan Gerhold's avatar Stephan Gerhold Committed by Mark Brown

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: default avatarStephan Gerhold <stephan@gerhold.net>
Tested-by: default avatarSrinivas Kandagatla <srinivas.kandagatla@linaro.org>
Reviewed-by: default avatarSrinivas Kandagatla <srinivas.kandagatla@linaro.org>
Cc: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Link: https://lore.kernel.org/r/20200723183904.321040-2-stephan@gerhold.netSigned-off-by: default avatarMark Brown <broonie@kernel.org>
parent d1e2a97b
...@@ -109,7 +109,7 @@ static int apq8096_platform_probe(struct platform_device *pdev) ...@@ -109,7 +109,7 @@ static int apq8096_platform_probe(struct platform_device *pdev)
struct device *dev = &pdev->dev; struct device *dev = &pdev->dev;
int ret; int ret;
card = kzalloc(sizeof(*card), GFP_KERNEL); card = devm_kzalloc(dev, sizeof(*card), GFP_KERNEL);
if (!card) if (!card)
return -ENOMEM; return -ENOMEM;
...@@ -117,31 +117,10 @@ static int apq8096_platform_probe(struct platform_device *pdev) ...@@ -117,31 +117,10 @@ static int apq8096_platform_probe(struct platform_device *pdev)
dev_set_drvdata(dev, card); dev_set_drvdata(dev, card);
ret = qcom_snd_parse_of(card); ret = qcom_snd_parse_of(card);
if (ret) if (ret)
goto err; return ret;
apq8096_add_be_ops(card); apq8096_add_be_ops(card);
ret = snd_soc_register_card(card); return devm_snd_soc_register_card(dev, 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;
} }
static const struct of_device_id msm_snd_apq8096_dt_match[] = { static const struct of_device_id msm_snd_apq8096_dt_match[] = {
...@@ -153,7 +132,6 @@ MODULE_DEVICE_TABLE(of, 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 = { static struct platform_driver msm_snd_apq8096_driver = {
.probe = apq8096_platform_probe, .probe = apq8096_platform_probe,
.remove = apq8096_platform_remove,
.driver = { .driver = {
.name = "msm-snd-apq8096", .name = "msm-snd-apq8096",
.of_match_table = msm_snd_apq8096_dt_match, .of_match_table = msm_snd_apq8096_dt_match,
......
...@@ -36,7 +36,7 @@ int qcom_snd_parse_of(struct snd_soc_card *card) ...@@ -36,7 +36,7 @@ int qcom_snd_parse_of(struct snd_soc_card *card)
num_links = of_get_child_count(dev->of_node); num_links = of_get_child_count(dev->of_node);
/* Allocate the DAI link array */ /* 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) if (!card->dai_link)
return -ENOMEM; return -ENOMEM;
...@@ -143,7 +143,6 @@ int qcom_snd_parse_of(struct snd_soc_card *card) ...@@ -143,7 +143,6 @@ int qcom_snd_parse_of(struct snd_soc_card *card)
of_node_put(cpu); of_node_put(cpu);
of_node_put(codec); of_node_put(codec);
of_node_put(platform); of_node_put(platform);
kfree(card->dai_link);
return ret; return ret;
} }
EXPORT_SYMBOL(qcom_snd_parse_of); EXPORT_SYMBOL(qcom_snd_parse_of);
......
...@@ -543,16 +543,14 @@ static int sdm845_snd_platform_probe(struct platform_device *pdev) ...@@ -543,16 +543,14 @@ static int sdm845_snd_platform_probe(struct platform_device *pdev)
struct device *dev = &pdev->dev; struct device *dev = &pdev->dev;
int ret; int ret;
card = kzalloc(sizeof(*card), GFP_KERNEL); card = devm_kzalloc(dev, sizeof(*card), GFP_KERNEL);
if (!card) if (!card)
return -ENOMEM; return -ENOMEM;
/* Allocate the private data */ /* Allocate the private data */
data = kzalloc(sizeof(*data), GFP_KERNEL); data = devm_kzalloc(dev, sizeof(*data), GFP_KERNEL);
if (!data) { if (!data)
ret = -ENOMEM; return -ENOMEM;
goto data_alloc_fail;
}
card->dapm_widgets = sdm845_snd_widgets; card->dapm_widgets = sdm845_snd_widgets;
card->num_dapm_widgets = ARRAY_SIZE(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) ...@@ -560,38 +558,13 @@ static int sdm845_snd_platform_probe(struct platform_device *pdev)
dev_set_drvdata(dev, card); dev_set_drvdata(dev, card);
ret = qcom_snd_parse_of(card); ret = qcom_snd_parse_of(card);
if (ret) if (ret)
goto parse_dt_fail; return ret;
data->card = card; data->card = card;
snd_soc_card_set_drvdata(card, data); snd_soc_card_set_drvdata(card, data);
sdm845_add_ops(card); sdm845_add_ops(card);
ret = snd_soc_register_card(card); return devm_snd_soc_register_card(dev, 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;
} }
static const struct of_device_id sdm845_snd_device_id[] = { static const struct of_device_id sdm845_snd_device_id[] = {
...@@ -604,7 +577,6 @@ MODULE_DEVICE_TABLE(of, sdm845_snd_device_id); ...@@ -604,7 +577,6 @@ MODULE_DEVICE_TABLE(of, sdm845_snd_device_id);
static struct platform_driver sdm845_snd_driver = { static struct platform_driver sdm845_snd_driver = {
.probe = sdm845_snd_platform_probe, .probe = sdm845_snd_platform_probe,
.remove = sdm845_snd_platform_remove,
.driver = { .driver = {
.name = "msm-snd-sdm845", .name = "msm-snd-sdm845",
.of_match_table = sdm845_snd_device_id, .of_match_table = sdm845_snd_device_id,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment