Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3f78decc authored by Graeme Gregory's avatar Graeme Gregory Committed by Samuel Ortiz
Browse files

mfd: palmas: Improve the error exit path



Improve the error exit path so that we correctly de-allocate resources
that have been allocated upto the point where error occurs.

Signed-off-by: default avatarGraeme Gregory <gg@slimlogic.co.uk>
Signed-off-by: default avatarSamuel Ortiz <sameo@linux.intel.com>
parent 81a21cdd
Loading
Loading
Loading
Loading
+11 −8
Original line number Diff line number Diff line
@@ -377,11 +377,11 @@ static int __devinit palmas_i2c_probe(struct i2c_client *i2c,
		reg = pdata->pad1;
		ret = regmap_write(palmas->regmap[slave], addr, reg);
		if (ret)
			goto err;
			goto err_irq;
	} else {
		ret = regmap_read(palmas->regmap[slave], addr, &reg);
		if (ret)
			goto err;
			goto err_irq;
	}

	if (!(reg & PALMAS_PRIMARY_SECONDARY_PAD1_GPIO_0))
@@ -412,11 +412,11 @@ static int __devinit palmas_i2c_probe(struct i2c_client *i2c,
		reg = pdata->pad2;
		ret = regmap_write(palmas->regmap[slave], addr, reg);
		if (ret)
			goto err;
			goto err_irq;
	} else {
		ret = regmap_read(palmas->regmap[slave], addr, &reg);
		if (ret)
			goto err;
			goto err_irq;
	}

	if (!(reg & PALMAS_PRIMARY_SECONDARY_PAD2_GPIO_4))
@@ -439,13 +439,13 @@ static int __devinit palmas_i2c_probe(struct i2c_client *i2c,

	ret = regmap_write(palmas->regmap[slave], addr, reg);
	if (ret)
		goto err;
		goto err_irq;

	children = kmemdup(palmas_children, sizeof(palmas_children),
			   GFP_KERNEL);
	if (!children) {
		ret = -ENOMEM;
		goto err;
		goto err_irq;
	}

	children[PALMAS_PMIC_ID].platform_data = pdata->pmic_pdata;
@@ -458,12 +458,15 @@ static int __devinit palmas_i2c_probe(struct i2c_client *i2c,
	kfree(children);

	if (ret < 0)
		goto err;
		goto err_devices;

	return ret;

err:
err_devices:
	mfd_remove_devices(palmas->dev);
err_irq:
	regmap_del_irq_chip(palmas->irq, palmas->irq_data);
err:
	return ret;
}