mirror of
https://github.com/torvalds/linux.git
synced 2024-11-10 22:21:40 +00:00
ASoC: ux500_msp_i2s: better use devm functions and fix error return code
Remove unnecessary calls to devm_kfree and replace iounmap by devm_iounmap (and use resource_size for the third argument). These changes make it possible to remove the error-handling code at the end of ux500_msp_i2s_init_msp, and all of the gotos become direct returns. In the case of the second call to devm_kzalloc, the return variable ret was not initialized. Here it is changed to a direct return of -ENOMEM. A simplified version of the semantic match that finds the second problem is as follows: (http://coccinelle.lip6.fr/) // <smpl> ( if@p1 (\(ret < 0\|ret != 0\)) { ... return ret; } | ret@p1 = 0 ) ... when != ret = e1 when != &ret *if(...) { ... when != ret = e2 when forall return ret; } // </smpl> Signed-off-by: Julia Lawall <Julia.Lawall@lip6.fr> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
This commit is contained in:
parent
db8b624d55
commit
b18e93a493
@ -663,7 +663,6 @@ int ux500_msp_i2s_init_msp(struct platform_device *pdev,
|
||||
struct ux500_msp **msp_p,
|
||||
struct msp_i2s_platform_data *platform_data)
|
||||
{
|
||||
int ret = 0;
|
||||
struct resource *res = NULL;
|
||||
struct i2s_controller *i2s_cont;
|
||||
struct ux500_msp *msp;
|
||||
@ -685,15 +684,14 @@ int ux500_msp_i2s_init_msp(struct platform_device *pdev,
|
||||
if (res == NULL) {
|
||||
dev_err(&pdev->dev, "%s: ERROR: Unable to get resource!\n",
|
||||
__func__);
|
||||
ret = -ENOMEM;
|
||||
goto err_res;
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
msp->registers = ioremap(res->start, (res->end - res->start + 1));
|
||||
msp->registers = devm_ioremap(&pdev->dev, res->start,
|
||||
resource_size(res));
|
||||
if (msp->registers == NULL) {
|
||||
dev_err(&pdev->dev, "%s: ERROR: ioremap failed!\n", __func__);
|
||||
ret = -ENOMEM;
|
||||
goto err_res;
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
msp->msp_state = MSP_STATE_IDLE;
|
||||
@ -705,7 +703,7 @@ int ux500_msp_i2s_init_msp(struct platform_device *pdev,
|
||||
dev_err(&pdev->dev,
|
||||
"%s: ERROR: Failed to allocate I2S-controller!\n",
|
||||
__func__);
|
||||
goto err_i2s_cont;
|
||||
return -ENOMEM;
|
||||
}
|
||||
i2s_cont->dev.parent = &pdev->dev;
|
||||
i2s_cont->data = (void *)msp;
|
||||
@ -716,14 +714,6 @@ int ux500_msp_i2s_init_msp(struct platform_device *pdev,
|
||||
msp->i2s_cont = i2s_cont;
|
||||
|
||||
return 0;
|
||||
|
||||
err_i2s_cont:
|
||||
iounmap(msp->registers);
|
||||
|
||||
err_res:
|
||||
devm_kfree(&pdev->dev, msp);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
void ux500_msp_i2s_cleanup_msp(struct platform_device *pdev,
|
||||
@ -732,11 +722,6 @@ void ux500_msp_i2s_cleanup_msp(struct platform_device *pdev,
|
||||
dev_dbg(msp->dev, "%s: Enter (id = %d).\n", __func__, msp->id);
|
||||
|
||||
device_unregister(&msp->i2s_cont->dev);
|
||||
devm_kfree(&pdev->dev, msp->i2s_cont);
|
||||
|
||||
iounmap(msp->registers);
|
||||
|
||||
devm_kfree(&pdev->dev, msp);
|
||||
}
|
||||
|
||||
MODULE_LICENSE("GPL v2");
|
||||
|
Loading…
Reference in New Issue
Block a user