Fix below issues: 1. If request_threaded_irq() fails, current code does not free all requested irqs. 2. Add missing extcon_dev_unregister() in error path if failed to read revision number.
Signed-off-by: Axel Lin <axel....@ingics.com> --- drivers/extcon/extcon-max77693.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/drivers/extcon/extcon-max77693.c b/drivers/extcon/extcon-max77693.c index e0ed622..9928c63 100644 --- a/drivers/extcon/extcon-max77693.c +++ b/drivers/extcon/extcon-max77693.c @@ -696,12 +696,8 @@ static int __devinit max77693_muic_probe(struct platform_device *pdev) IRQF_ONESHOT, muic_irq->name, info); if (ret) { dev_err(&pdev->dev, - "failed: irq request (IRQ: %d," - " error :%d)\n", + "failed: irq request (IRQ: %d, error :%d)\n", muic_irq->irq, ret); - - for (i = i - 1; i >= 0; i--) - free_irq(muic_irq->virq, info); goto err_irq; } } @@ -726,7 +722,7 @@ static int __devinit max77693_muic_probe(struct platform_device *pdev) MAX77693_MUIC_REG_ID, &id); if (ret < 0) { dev_err(&pdev->dev, "failed to read revision number\n"); - goto err_extcon; + goto err_read_reg; } dev_info(info->dev, "device ID : 0x%x\n", id); @@ -738,9 +734,13 @@ static int __devinit max77693_muic_probe(struct platform_device *pdev) return ret; +err_read_reg: + extcon_dev_unregister(info->edev); err_extcon: kfree(info->edev); err_irq: + while (--i >= 0) + free_irq(muic_irqs[i].virq, info); err_regmap: kfree(info); err_kfree: -- 1.7.9.5 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/