ASoC: qcom: Use devm for resource management
authorStephan Gerhold <stephan@gerhold.net>
Thu, 23 Jul 2020 18:38:58 +0000 (20:38 +0200)
committerMark Brown <broonie@kernel.org>
Fri, 24 Jul 2020 14:01:15 +0000 (15:01 +0100)
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>
sound/soc/qcom/apq8096.c
sound/soc/qcom/common.c
sound/soc/qcom/sdm845.c

index 6b5a381..2535496 100644 (file)
@@ -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,
index 8ada4ec..d677e83 100644 (file)
@@ -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);
index e77a887..0d10fba 100644 (file)
@@ -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,