mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	regulator: Add missing of_node_put()
of_find_node_by_name() returns a node pointer with refcount incremented, use of_node_put() on it when done. of_find_node_by_name() will call of_node_put() against from parameter, thus we also need to call of_node_get(from) before calling of_find_node_by_name(). Signed-off-by: Axel Lin <axel.lin@ingics.com> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
This commit is contained in:
		
							parent
							
								
									9c9588a732
								
							
						
					
					
						commit
						c92f5dd2c4
					
				
					 8 changed files with 26 additions and 11 deletions
				
			
		| 
						 | 
				
			
			@ -372,7 +372,7 @@ static int pm8607_regulator_dt_init(struct platform_device *pdev,
 | 
			
		|||
				    struct regulator_config *config)
 | 
			
		||||
{
 | 
			
		||||
	struct device_node *nproot, *np;
 | 
			
		||||
	nproot = pdev->dev.parent->of_node;
 | 
			
		||||
	nproot = of_node_get(pdev->dev.parent->of_node);
 | 
			
		||||
	if (!nproot)
 | 
			
		||||
		return -ENODEV;
 | 
			
		||||
	nproot = of_find_node_by_name(nproot, "regulators");
 | 
			
		||||
| 
						 | 
				
			
			@ -388,6 +388,7 @@ static int pm8607_regulator_dt_init(struct platform_device *pdev,
 | 
			
		|||
			break;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	of_node_put(nproot);
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
#else
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -395,9 +395,9 @@ static int da9052_regulator_probe(struct platform_device *pdev)
 | 
			
		|||
		config.init_data = pdata->regulators[pdev->id];
 | 
			
		||||
	} else {
 | 
			
		||||
#ifdef CONFIG_OF
 | 
			
		||||
		struct device_node *nproot = da9052->dev->of_node;
 | 
			
		||||
		struct device_node *np;
 | 
			
		||||
		struct device_node *nproot, *np;
 | 
			
		||||
 | 
			
		||||
		nproot = of_node_get(da9052->dev->of_node);
 | 
			
		||||
		if (!nproot)
 | 
			
		||||
			return -ENODEV;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -414,6 +414,7 @@ static int da9052_regulator_probe(struct platform_device *pdev)
 | 
			
		|||
				break;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		of_node_put(nproot);
 | 
			
		||||
#endif
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -224,11 +224,11 @@ static struct of_regulator_match max8907_matches[] = {
 | 
			
		|||
 | 
			
		||||
static int max8907_regulator_parse_dt(struct platform_device *pdev)
 | 
			
		||||
{
 | 
			
		||||
	struct device_node *np = pdev->dev.parent->of_node;
 | 
			
		||||
	struct device_node *regulators;
 | 
			
		||||
	struct device_node *np, *regulators;
 | 
			
		||||
	int ret;
 | 
			
		||||
 | 
			
		||||
	if (!pdev->dev.parent->of_node)
 | 
			
		||||
	np = of_node_get(pdev->dev.parent->of_node);
 | 
			
		||||
	if (!np)
 | 
			
		||||
		return 0;
 | 
			
		||||
 | 
			
		||||
	regulators = of_find_node_by_name(np, "regulators");
 | 
			
		||||
| 
						 | 
				
			
			@ -239,6 +239,7 @@ static int max8907_regulator_parse_dt(struct platform_device *pdev)
 | 
			
		|||
 | 
			
		||||
	ret = of_regulator_match(&pdev->dev, regulators, max8907_matches,
 | 
			
		||||
				 ARRAY_SIZE(max8907_matches));
 | 
			
		||||
	of_node_put(regulators);
 | 
			
		||||
	if (ret < 0) {
 | 
			
		||||
		dev_err(&pdev->dev, "Error parsing regulator init data: %d\n",
 | 
			
		||||
			ret);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -252,7 +252,7 @@ static int max8925_regulator_dt_init(struct platform_device *pdev,
 | 
			
		|||
{
 | 
			
		||||
	struct device_node *nproot, *np;
 | 
			
		||||
	int rcount;
 | 
			
		||||
	nproot = pdev->dev.parent->of_node;
 | 
			
		||||
	nproot = of_node_get(pdev->dev.parent->of_node);
 | 
			
		||||
	if (!nproot)
 | 
			
		||||
		return -ENODEV;
 | 
			
		||||
	np = of_find_node_by_name(nproot, "regulators");
 | 
			
		||||
| 
						 | 
				
			
			@ -263,6 +263,7 @@ static int max8925_regulator_dt_init(struct platform_device *pdev,
 | 
			
		|||
 | 
			
		||||
	rcount = of_regulator_match(&pdev->dev, np,
 | 
			
		||||
				&max8925_regulator_matches[ridx], 1);
 | 
			
		||||
	of_node_put(np);
 | 
			
		||||
	if (rcount < 0)
 | 
			
		||||
		return -ENODEV;
 | 
			
		||||
	config->init_data =	max8925_regulator_matches[ridx].init_data;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -960,7 +960,7 @@ static int max8997_pmic_dt_parse_pdata(struct platform_device *pdev,
 | 
			
		|||
	struct max8997_regulator_data *rdata;
 | 
			
		||||
	unsigned int i, dvs_voltage_nr = 1, ret;
 | 
			
		||||
 | 
			
		||||
	pmic_np = iodev->dev->of_node;
 | 
			
		||||
	pmic_np = of_node_get(iodev->dev->of_node);
 | 
			
		||||
	if (!pmic_np) {
 | 
			
		||||
		dev_err(&pdev->dev, "could not find pmic sub-node\n");
 | 
			
		||||
		return -ENODEV;
 | 
			
		||||
| 
						 | 
				
			
			@ -980,6 +980,7 @@ static int max8997_pmic_dt_parse_pdata(struct platform_device *pdev,
 | 
			
		|||
	rdata = devm_kzalloc(&pdev->dev, sizeof(*rdata) *
 | 
			
		||||
				pdata->num_regulators, GFP_KERNEL);
 | 
			
		||||
	if (!rdata) {
 | 
			
		||||
		of_node_put(regulators_np);
 | 
			
		||||
		dev_err(&pdev->dev, "could not allocate memory for regulator data\n");
 | 
			
		||||
		return -ENOMEM;
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -1002,6 +1003,7 @@ static int max8997_pmic_dt_parse_pdata(struct platform_device *pdev,
 | 
			
		|||
		rdata->reg_node = reg_np;
 | 
			
		||||
		rdata++;
 | 
			
		||||
	}
 | 
			
		||||
	of_node_put(regulators_np);
 | 
			
		||||
 | 
			
		||||
	if (of_get_property(pmic_np, "max8997,pmic-buck1-uses-gpio-dvs", NULL))
 | 
			
		||||
		pdata->buck1_gpiodvs = true;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -175,6 +175,7 @@ int mc13xxx_get_num_regulators_dt(struct platform_device *pdev)
 | 
			
		|||
	for_each_child_of_node(parent, child)
 | 
			
		||||
		num++;
 | 
			
		||||
 | 
			
		||||
	of_node_put(parent);
 | 
			
		||||
	return num;
 | 
			
		||||
}
 | 
			
		||||
EXPORT_SYMBOL_GPL(mc13xxx_get_num_regulators_dt);
 | 
			
		||||
| 
						 | 
				
			
			@ -197,8 +198,11 @@ struct mc13xxx_regulator_init_data *mc13xxx_parse_regulators_dt(
 | 
			
		|||
 | 
			
		||||
	data = devm_kzalloc(&pdev->dev, sizeof(*data) * priv->num_regulators,
 | 
			
		||||
			    GFP_KERNEL);
 | 
			
		||||
	if (!data)
 | 
			
		||||
	if (!data) {
 | 
			
		||||
		of_node_put(parent);
 | 
			
		||||
		return NULL;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	p = data;
 | 
			
		||||
 | 
			
		||||
	for_each_child_of_node(parent, child) {
 | 
			
		||||
| 
						 | 
				
			
			@ -217,6 +221,7 @@ struct mc13xxx_regulator_init_data *mc13xxx_parse_regulators_dt(
 | 
			
		|||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	of_node_put(parent);
 | 
			
		||||
 | 
			
		||||
	*num_parsed = parsed;
 | 
			
		||||
	return data;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -527,6 +527,7 @@ static void palmas_dt_to_pdata(struct device *dev,
 | 
			
		|||
	u32 prop;
 | 
			
		||||
	int idx, ret;
 | 
			
		||||
 | 
			
		||||
	node = of_node_get(node);
 | 
			
		||||
	regulators = of_find_node_by_name(node, "regulators");
 | 
			
		||||
	if (!regulators) {
 | 
			
		||||
		dev_info(dev, "regulator node not found\n");
 | 
			
		||||
| 
						 | 
				
			
			@ -535,6 +536,7 @@ static void palmas_dt_to_pdata(struct device *dev,
 | 
			
		|||
 | 
			
		||||
	ret = of_regulator_match(dev, regulators, palmas_matches,
 | 
			
		||||
			PALMAS_NUM_REGS);
 | 
			
		||||
	of_node_put(regulators);
 | 
			
		||||
	if (ret < 0) {
 | 
			
		||||
		dev_err(dev, "Error parsing regulator init data: %d\n", ret);
 | 
			
		||||
		return;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -964,8 +964,7 @@ static struct tps65910_board *tps65910_parse_dt_reg_data(
 | 
			
		|||
{
 | 
			
		||||
	struct tps65910_board *pmic_plat_data;
 | 
			
		||||
	struct tps65910 *tps65910 = dev_get_drvdata(pdev->dev.parent);
 | 
			
		||||
	struct device_node *np = pdev->dev.parent->of_node;
 | 
			
		||||
	struct device_node *regulators;
 | 
			
		||||
	struct device_node *np, *regulators;
 | 
			
		||||
	struct of_regulator_match *matches;
 | 
			
		||||
	unsigned int prop;
 | 
			
		||||
	int idx = 0, ret, count;
 | 
			
		||||
| 
						 | 
				
			
			@ -978,6 +977,7 @@ static struct tps65910_board *tps65910_parse_dt_reg_data(
 | 
			
		|||
		return NULL;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	np = of_node_get(pdev->dev.parent->of_node);
 | 
			
		||||
	regulators = of_find_node_by_name(np, "regulators");
 | 
			
		||||
	if (!regulators) {
 | 
			
		||||
		dev_err(&pdev->dev, "regulator node not found\n");
 | 
			
		||||
| 
						 | 
				
			
			@ -994,11 +994,13 @@ static struct tps65910_board *tps65910_parse_dt_reg_data(
 | 
			
		|||
		matches = tps65911_matches;
 | 
			
		||||
		break;
 | 
			
		||||
	default:
 | 
			
		||||
		of_node_put(regulators);
 | 
			
		||||
		dev_err(&pdev->dev, "Invalid tps chip version\n");
 | 
			
		||||
		return NULL;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	ret = of_regulator_match(&pdev->dev, regulators, matches, count);
 | 
			
		||||
	of_node_put(regulators);
 | 
			
		||||
	if (ret < 0) {
 | 
			
		||||
		dev_err(&pdev->dev, "Error parsing regulator init data: %d\n",
 | 
			
		||||
			ret);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue