mirror of
https://github.com/torvalds/linux.git
synced 2026-06-06 05:27:07 +02:00
mfd: fsl-imx25: Fix an error handling path in mx25_tsadc_setup_irq()
[ Upstream commit3fa9e4cfb5] If devm_of_platform_populate() fails, some resources need to be released. Introduce a mx25_tsadc_unset_irq() function that undoes mx25_tsadc_setup_irq() and call it both from the new error handling path of the probe and in the remove function. Fixes:a55196eff6("mfd: fsl-imx25: Use devm_of_platform_populate()") Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr> Signed-off-by: Lee Jones <lee@kernel.org> Link: https://lore.kernel.org/r/d404e04828fc06bcfddf81f9f3e9b4babbe35415.1659269156.git.christophe.jaillet@wanadoo.fr Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
28868b940b
commit
08d4051803
|
|
@ -84,6 +84,19 @@ static int mx25_tsadc_setup_irq(struct platform_device *pdev,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int mx25_tsadc_unset_irq(struct platform_device *pdev)
|
||||||
|
{
|
||||||
|
struct mx25_tsadc *tsadc = platform_get_drvdata(pdev);
|
||||||
|
int irq = platform_get_irq(pdev, 0);
|
||||||
|
|
||||||
|
if (irq) {
|
||||||
|
irq_set_chained_handler_and_data(irq, NULL, NULL);
|
||||||
|
irq_domain_remove(tsadc->domain);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static void mx25_tsadc_setup_clk(struct platform_device *pdev,
|
static void mx25_tsadc_setup_clk(struct platform_device *pdev,
|
||||||
struct mx25_tsadc *tsadc)
|
struct mx25_tsadc *tsadc)
|
||||||
{
|
{
|
||||||
|
|
@ -171,18 +184,21 @@ static int mx25_tsadc_probe(struct platform_device *pdev)
|
||||||
|
|
||||||
platform_set_drvdata(pdev, tsadc);
|
platform_set_drvdata(pdev, tsadc);
|
||||||
|
|
||||||
return devm_of_platform_populate(dev);
|
ret = devm_of_platform_populate(dev);
|
||||||
|
if (ret)
|
||||||
|
goto err_irq;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
err_irq:
|
||||||
|
mx25_tsadc_unset_irq(pdev);
|
||||||
|
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int mx25_tsadc_remove(struct platform_device *pdev)
|
static int mx25_tsadc_remove(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
struct mx25_tsadc *tsadc = platform_get_drvdata(pdev);
|
mx25_tsadc_unset_irq(pdev);
|
||||||
int irq = platform_get_irq(pdev, 0);
|
|
||||||
|
|
||||||
if (irq) {
|
|
||||||
irq_set_chained_handler_and_data(irq, NULL, NULL);
|
|
||||||
irq_domain_remove(tsadc->domain);
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user