lkml.org 
[lkml]   [2022]   [Oct]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 6.0 575/862] mfd: fsl-imx25: Fix an error handling path in mx25_tsadc_setup_irq()
    Date
    From: Christophe JAILLET <christophe.jaillet@wanadoo.fr>

    [ Upstream commit 3fa9e4cfb55da512ebfd57336fde468830719298 ]

    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: a55196eff6d6 ("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>
    ---
    drivers/mfd/fsl-imx25-tsadc.c | 32 ++++++++++++++++++++++++--------
    1 file changed, 24 insertions(+), 8 deletions(-)

    diff --git a/drivers/mfd/fsl-imx25-tsadc.c b/drivers/mfd/fsl-imx25-tsadc.c
    index 37e5e02a1d05..85f7982d26d2 100644
    --- a/drivers/mfd/fsl-imx25-tsadc.c
    +++ b/drivers/mfd/fsl-imx25-tsadc.c
    @@ -84,6 +84,19 @@ static int mx25_tsadc_setup_irq(struct platform_device *pdev,
    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,
    struct mx25_tsadc *tsadc)
    {
    @@ -171,18 +184,21 @@ static int mx25_tsadc_probe(struct platform_device *pdev)

    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)
    {
    - 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);
    - }
    + mx25_tsadc_unset_irq(pdev);

    return 0;
    }
    --
    2.35.1


    \
     
     \ /
      Last update: 2022-10-19 11:17    [W:4.209 / U:0.104 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site