diff options
Diffstat (limited to 'drivers/regulator/max77686.c')
| -rw-r--r-- | drivers/regulator/max77686.c | 34 | 
1 files changed, 9 insertions, 25 deletions
diff --git a/drivers/regulator/max77686.c b/drivers/regulator/max77686.c index f563057e569..ef1af2debbd 100644 --- a/drivers/regulator/max77686.c +++ b/drivers/regulator/max77686.c @@ -65,7 +65,6 @@ enum max77686_ramp_rate {  };  struct max77686_data { -	struct regulator_dev *rdev[MAX77686_REGULATORS];  	unsigned int opmode[MAX77686_REGULATORS];  }; @@ -400,7 +399,7 @@ static int max77686_pmic_dt_parse_pdata(struct platform_device *pdev,  	unsigned int i;  	pmic_np = iodev->dev->of_node; -	regulators_np = of_find_node_by_name(pmic_np, "voltage-regulators"); +	regulators_np = of_get_child_by_name(pmic_np, "voltage-regulators");  	if (!regulators_np) {  		dev_err(&pdev->dev, "could not find regulators sub-node\n");  		return -EINVAL; @@ -410,8 +409,7 @@ static int max77686_pmic_dt_parse_pdata(struct platform_device *pdev,  	rdata = devm_kzalloc(&pdev->dev, sizeof(*rdata) *  			     pdata->num_regulators, GFP_KERNEL);  	if (!rdata) { -		dev_err(&pdev->dev, -			"could not allocate memory for regulator data\n"); +		of_node_put(regulators_np);  		return -ENOMEM;  	} @@ -425,6 +423,7 @@ static int max77686_pmic_dt_parse_pdata(struct platform_device *pdev,  	}  	pdata->regulators = rdata; +	of_node_put(regulators_np);  	return 0;  } @@ -474,36 +473,22 @@ static int max77686_pmic_probe(struct platform_device *pdev)  	platform_set_drvdata(pdev, max77686);  	for (i = 0; i < MAX77686_REGULATORS; i++) { +		struct regulator_dev *rdev; +  		config.init_data = pdata->regulators[i].initdata;  		config.of_node = pdata->regulators[i].of_node;  		max77686->opmode[i] = regulators[i].enable_mask; -		max77686->rdev[i] = regulator_register(®ulators[i], &config); -		if (IS_ERR(max77686->rdev[i])) { -			ret = PTR_ERR(max77686->rdev[i]); +		rdev = devm_regulator_register(&pdev->dev, +						®ulators[i], &config); +		if (IS_ERR(rdev)) {  			dev_err(&pdev->dev,  				"regulator init failed for %d\n", i); -			max77686->rdev[i] = NULL; -			goto err; +			return PTR_ERR(rdev);  		}  	}  	return 0; -err: -	while (--i >= 0) -		regulator_unregister(max77686->rdev[i]); -	return ret; -} - -static int max77686_pmic_remove(struct platform_device *pdev) -{ -	struct max77686_data *max77686 = platform_get_drvdata(pdev); -	int i; - -	for (i = 0; i < MAX77686_REGULATORS; i++) -		regulator_unregister(max77686->rdev[i]); - -	return 0;  }  static const struct platform_device_id max77686_pmic_id[] = { @@ -518,7 +503,6 @@ static struct platform_driver max77686_pmic_driver = {  		.owner = THIS_MODULE,  	},  	.probe = max77686_pmic_probe, -	.remove = max77686_pmic_remove,  	.id_table = max77686_pmic_id,  };  | 
