Skip to content

Commit

Permalink
Regulators: tps6507x-regulator - mark probe method as __devinit
Browse files Browse the repository at this point in the history
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: Dmitry Torokhov <dtor@mail.ru>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
  • Loading branch information
Dmitry Torokhov authored and Liam Girdwood committed Mar 3, 2010
1 parent 54d13ab commit 56c2349
Showing 1 changed file with 15 additions and 19 deletions.
34 changes: 15 additions & 19 deletions drivers/regulator/tps6507x-regulator.c
Original file line number Diff line number Diff line change
Expand Up @@ -538,15 +538,16 @@ 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;
struct regulator_init_data *init_data;
struct regulator_dev *rdev;
struct tps_pmic *tps;
int i;
int error;

if (!i2c_check_functionality(client->adapter,
I2C_FUNC_SMBUS_BYTE_DATA))
Expand All @@ -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;

Expand Down Expand Up @@ -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 */
Expand All @@ -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;
}

/**
Expand All @@ -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;
Expand Down

0 comments on commit 56c2349

Please sign in to comment.