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

Commit 56c23492 authored by Dmitry Torokhov's avatar Dmitry Torokhov Committed by Liam Girdwood
Browse files

Regulators: tps6507x-regulator - mark probe method as __devinit



Also move error handling in probe() out of line and do not bother
to reset fields in structures that are about to be freed.

Signed-off-by: default avatarDmitry Torokhov <dtor@mail.ru>
Acked-by: default avatarMark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: default avatarLiam Girdwood <lrg@slimlogic.co.uk>
parent 54d13ab1
Loading
Loading
Loading
Loading
+15 −19
Original line number Diff line number Diff line
@@ -538,8 +538,8 @@ static struct regulator_ops tps6507x_ldo_ops = {
	.list_voltage = tps6507x_ldo_list_voltage,
};

static
int tps_6507x_probe(struct i2c_client *client, const struct i2c_device_id *id)
static int __devinit tps_6507x_probe(struct i2c_client *client,
				     const struct i2c_device_id *id)
{
	static int desc_id;
	const struct tps_info *info = (void *)id->driver_data;
@@ -547,6 +547,7 @@ int tps_6507x_probe(struct i2c_client *client, const struct i2c_device_id *id)
	struct regulator_dev *rdev;
	struct tps_pmic *tps;
	int i;
	int error;

	if (!i2c_check_functionality(client->adapter,
				I2C_FUNC_SMBUS_BYTE_DATA))
@@ -557,7 +558,6 @@ int tps_6507x_probe(struct i2c_client *client, const struct i2c_device_id *id)
	 * coming from the board-evm file.
	 */
	init_data = client->dev.platform_data;

	if (!init_data)
		return -EIO;

@@ -586,18 +586,8 @@ int tps_6507x_probe(struct i2c_client *client, const struct i2c_device_id *id)
		if (IS_ERR(rdev)) {
			dev_err(&client->dev, "failed to register %s\n",
				id->name);

			/* Unregister */
			while (i)
				regulator_unregister(tps->rdev[--i]);

			tps->client = NULL;

			/* clear the client data in i2c */
			i2c_set_clientdata(client, NULL);

			kfree(tps);
			return PTR_ERR(rdev);
			error = PTR_ERR(rdev);
			goto fail;
		}

		/* Save regulator for cleanup */
@@ -607,6 +597,13 @@ int tps_6507x_probe(struct i2c_client *client, const struct i2c_device_id *id)
	i2c_set_clientdata(client, tps);

	return 0;

fail:
	while (--i >= 0)
		regulator_unregister(tps->rdev[i]);

	kfree(tps);
	return error;
}

/**
@@ -620,13 +617,12 @@ static int __devexit tps_6507x_remove(struct i2c_client *client)
	struct tps_pmic *tps = i2c_get_clientdata(client);
	int i;

	/* clear the client data in i2c */
	i2c_set_clientdata(client, NULL);

	for (i = 0; i < TPS6507X_NUM_REGULATOR; i++)
		regulator_unregister(tps->rdev[i]);

	tps->client = NULL;

	/* clear the client data in i2c */
	i2c_set_clientdata(client, NULL);
	kfree(tps);

	return 0;