i2c: bcm2835: Fix the error handling in 'bcm2835_i2c_probe()'
[ Upstream commitb205f58502
] Some resource should be released if an error occurs in 'bcm2835_i2c_probe()'. Add an error handling path and the needed 'clk_disable_unprepare()' and 'clk_rate_exclusive_put()' calls. While at it, rework the bottom of the function to use this newly added error handling path and have an explicit and more standard "return 0;" at the end of the normal path. Fixes:bebff81fb8
("i2c: bcm2835: Model Divider in CCF") Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr> [wsa: rebased] Signed-off-by: Wolfram Sang <wsa@kernel.org> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
Родитель
0b01811fc1
Коммит
0eec5e2748
|
@ -454,18 +454,20 @@ static int bcm2835_i2c_probe(struct platform_device *pdev)
|
|||
ret = clk_prepare_enable(i2c_dev->bus_clk);
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev, "Couldn't prepare clock");
|
||||
return ret;
|
||||
goto err_put_exclusive_rate;
|
||||
}
|
||||
|
||||
i2c_dev->irq = platform_get_irq(pdev, 0);
|
||||
if (i2c_dev->irq < 0)
|
||||
return i2c_dev->irq;
|
||||
if (i2c_dev->irq < 0) {
|
||||
ret = i2c_dev->irq;
|
||||
goto err_disable_unprepare_clk;
|
||||
}
|
||||
|
||||
ret = request_irq(i2c_dev->irq, bcm2835_i2c_isr, IRQF_SHARED,
|
||||
dev_name(&pdev->dev), i2c_dev);
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev, "Could not request IRQ\n");
|
||||
return -ENODEV;
|
||||
goto err_disable_unprepare_clk;
|
||||
}
|
||||
|
||||
adap = &i2c_dev->adapter;
|
||||
|
@ -489,7 +491,16 @@ static int bcm2835_i2c_probe(struct platform_device *pdev)
|
|||
|
||||
ret = i2c_add_adapter(adap);
|
||||
if (ret)
|
||||
free_irq(i2c_dev->irq, i2c_dev);
|
||||
goto err_free_irq;
|
||||
|
||||
return 0;
|
||||
|
||||
err_free_irq:
|
||||
free_irq(i2c_dev->irq, i2c_dev);
|
||||
err_disable_unprepare_clk:
|
||||
clk_disable_unprepare(i2c_dev->bus_clk);
|
||||
err_put_exclusive_rate:
|
||||
clk_rate_exclusive_put(i2c_dev->bus_clk);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче