diff options
Diffstat (limited to 'drivers/regulator/max1586.c')
| -rw-r--r-- | drivers/regulator/max1586.c | 37 | 
1 files changed, 9 insertions, 28 deletions
diff --git a/drivers/regulator/max1586.c b/drivers/regulator/max1586.c index 3a599ee0a45..d23d0577754 100644 --- a/drivers/regulator/max1586.c +++ b/drivers/regulator/max1586.c @@ -46,8 +46,6 @@ struct max1586_data {  	unsigned int v3_curr_sel;  	unsigned int v6_curr_sel; - -	struct regulator_dev *rdev[0];  };  /* @@ -162,14 +160,12 @@ static struct regulator_desc max1586_reg[] = {  static int max1586_pmic_probe(struct i2c_client *client,  					const struct i2c_device_id *i2c_id)  { -	struct regulator_dev **rdev;  	struct max1586_platform_data *pdata = dev_get_platdata(&client->dev);  	struct regulator_config config = { };  	struct max1586_data *max1586; -	int i, id, ret = -ENOMEM; +	int i, id; -	max1586 = devm_kzalloc(&client->dev, sizeof(struct max1586_data) + -			sizeof(struct regulator_dev *) * (MAX1586_V6 + 1), +	max1586 = devm_kzalloc(&client->dev, sizeof(struct max1586_data),  			GFP_KERNEL);  	if (!max1586)  		return -ENOMEM; @@ -186,14 +182,15 @@ static int max1586_pmic_probe(struct i2c_client *client,  	max1586->v3_curr_sel = 24; /* 1.3V */  	max1586->v6_curr_sel = 0; -	rdev = max1586->rdev;  	for (i = 0; i < pdata->num_subdevs && i <= MAX1586_V6; i++) { +		struct regulator_dev *rdev; +  		id = pdata->subdevs[i].id;  		if (!pdata->subdevs[i].platform_data)  			continue;  		if (id < MAX1586_V3 || id > MAX1586_V6) {  			dev_err(&client->dev, "invalid regulator id %d\n", id); -			goto err; +			return -EINVAL;  		}  		if (id == MAX1586_V3) { @@ -207,33 +204,18 @@ static int max1586_pmic_probe(struct i2c_client *client,  		config.init_data = pdata->subdevs[i].platform_data;  		config.driver_data = max1586; -		rdev[i] = regulator_register(&max1586_reg[id], &config); -		if (IS_ERR(rdev[i])) { -			ret = PTR_ERR(rdev[i]); +		rdev = devm_regulator_register(&client->dev, +						  &max1586_reg[id], &config); +		if (IS_ERR(rdev)) {  			dev_err(&client->dev, "failed to register %s\n",  				max1586_reg[id].name); -			goto err; +			return PTR_ERR(rdev);  		}  	}  	i2c_set_clientdata(client, max1586);  	dev_info(&client->dev, "Maxim 1586 regulator driver loaded\n");  	return 0; - -err: -	while (--i >= 0) -		regulator_unregister(rdev[i]); -	return ret; -} - -static int max1586_pmic_remove(struct i2c_client *client) -{ -	struct max1586_data *max1586 = i2c_get_clientdata(client); -	int i; - -	for (i = 0; i <= MAX1586_V6; i++) -		regulator_unregister(max1586->rdev[i]); -	return 0;  }  static const struct i2c_device_id max1586_id[] = { @@ -244,7 +226,6 @@ MODULE_DEVICE_TABLE(i2c, max1586_id);  static struct i2c_driver max1586_pmic_driver = {  	.probe = max1586_pmic_probe, -	.remove = max1586_pmic_remove,  	.driver		= {  		.name	= "max1586",  		.owner	= THIS_MODULE,  | 
