On 19 July 2015 at 21:12, Julia Lawall Julia.Lawall@lip6.fr wrote:
The explicit call to devm_regulator_put in the probe and remove functions does not seem to be necessary. In particular, the functions prcmu_qos_remove_requirement and ux500_msp_i2s_cleanup_msp in the remove function seem to do nothing that can interfere with devm_regulator_put, making it safe to allow devm_regulator_put to occur after the end of the remove function.
Convert the calls to clk_get to devm_clk_get, and remove the corresponding calls to clk_put in the probe and remove functions.
Replace various gotos by direct returns, and drop unneeded labels.
Signed-off-by: Julia Lawall Julia.Lawall@lip6.fr
Reviewed-by: Ulf Hansson ulf.hansson@linaro.org
Kind regards Uffe
sound/soc/ux500/ux500_msp_dai.c | 29 ++++++++++------------------- 1 file changed, 10 insertions(+), 19 deletions(-)
diff --git a/sound/soc/ux500/ux500_msp_dai.c b/sound/soc/ux500/ux500_msp_dai.c index 978f2d7..f5df08d 100644 --- a/sound/soc/ux500/ux500_msp_dai.c +++ b/sound/soc/ux500/ux500_msp_dai.c @@ -773,20 +773,22 @@ static int ux500_msp_drv_probe(struct platform_device *pdev) } prcmu_qos_add_requirement(PRCMU_QOS_APE_OPP, (char *)pdev->name, 50);
drvdata->pclk = clk_get(&pdev->dev, "apb_pclk");
drvdata->pclk = devm_clk_get(&pdev->dev, "apb_pclk"); if (IS_ERR(drvdata->pclk)) { ret = (int)PTR_ERR(drvdata->pclk);
dev_err(&pdev->dev, "%s: ERROR: clk_get of pclk failed (%d)!\n",
dev_err(&pdev->dev,
"%s: ERROR: devm_clk_get of pclk failed (%d)!\n", __func__, ret);
goto err_pclk;
return ret; }
drvdata->clk = clk_get(&pdev->dev, NULL);
drvdata->clk = devm_clk_get(&pdev->dev, NULL); if (IS_ERR(drvdata->clk)) { ret = (int)PTR_ERR(drvdata->clk);
dev_err(&pdev->dev, "%s: ERROR: clk_get failed (%d)!\n",
dev_err(&pdev->dev,
"%s: ERROR: devm_clk_get failed (%d)!\n", __func__, ret);
goto err_clk;
return ret; } ret = ux500_msp_i2s_init_msp(pdev, &drvdata->msp,
@@ -795,7 +797,7 @@ static int ux500_msp_drv_probe(struct platform_device *pdev) dev_err(&pdev->dev, "%s: ERROR: Failed to init MSP-struct (%d)!", __func__, ret);
goto err_init_msp;
return ret; } dev_set_drvdata(&pdev->dev, drvdata);
@@ -804,7 +806,7 @@ static int ux500_msp_drv_probe(struct platform_device *pdev) if (ret < 0) { dev_err(&pdev->dev, "Error: %s: Failed to register MSP%d!\n", __func__, drvdata->msp->id);
goto err_init_msp;
return ret; } ret = ux500_pcm_register_platform(pdev);
@@ -819,13 +821,6 @@ static int ux500_msp_drv_probe(struct platform_device *pdev)
err_reg_plat: snd_soc_unregister_component(&pdev->dev); -err_init_msp:
clk_put(drvdata->clk);
-err_clk:
clk_put(drvdata->pclk);
-err_pclk:
devm_regulator_put(drvdata->reg_vape);
return ret;
}
@@ -837,12 +832,8 @@ static int ux500_msp_drv_remove(struct platform_device *pdev)
snd_soc_unregister_component(&pdev->dev);
devm_regulator_put(drvdata->reg_vape); prcmu_qos_remove_requirement(PRCMU_QOS_APE_OPP, "ux500_msp_i2s");
clk_put(drvdata->clk);
clk_put(drvdata->pclk);
ux500_msp_i2s_cleanup_msp(pdev, drvdata->msp); return 0;
-- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/