diff options
| author | Axel Lin <axel.lin@ingics.com> | 2013-01-27 21:16:56 +0800 | 
|---|---|---|
| committer | Mark Brown <broonie@opensource.wolfsonmicro.com> | 2013-01-30 18:50:27 +0800 | 
| commit | c92f5dd2c42fa61e0ef810fad4584b184ea2d50e (patch) | |
| tree | c0d7f598b23259342ea4e912607156fb7acef2d2 | |
| parent | 9c9588a7326bdebf49f5d205dd4243c0d1df73d5 (diff) | |
| download | olio-linux-3.10-c92f5dd2c42fa61e0ef810fad4584b184ea2d50e.tar.xz olio-linux-3.10-c92f5dd2c42fa61e0ef810fad4584b184ea2d50e.zip | |
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>
| -rw-r--r-- | drivers/regulator/88pm8607.c | 3 | ||||
| -rw-r--r-- | drivers/regulator/da9052-regulator.c | 5 | ||||
| -rw-r--r-- | drivers/regulator/max8907-regulator.c | 7 | ||||
| -rw-r--r-- | drivers/regulator/max8925-regulator.c | 3 | ||||
| -rw-r--r-- | drivers/regulator/max8997.c | 4 | ||||
| -rw-r--r-- | drivers/regulator/mc13xxx-regulator-core.c | 7 | ||||
| -rw-r--r-- | drivers/regulator/palmas-regulator.c | 2 | ||||
| -rw-r--r-- | drivers/regulator/tps65910-regulator.c | 6 | 
8 files changed, 26 insertions, 11 deletions
| diff --git a/drivers/regulator/88pm8607.c b/drivers/regulator/88pm8607.c index 2b557119ada..e99a3e48b88 100644 --- a/drivers/regulator/88pm8607.c +++ b/drivers/regulator/88pm8607.c @@ -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 diff --git a/drivers/regulator/da9052-regulator.c b/drivers/regulator/da9052-regulator.c index d0963090442..29d194c8a31 100644 --- a/drivers/regulator/da9052-regulator.c +++ b/drivers/regulator/da9052-regulator.c @@ -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  	} diff --git a/drivers/regulator/max8907-regulator.c b/drivers/regulator/max8907-regulator.c index d40cf7fdb54..4568c15fa78 100644 --- a/drivers/regulator/max8907-regulator.c +++ b/drivers/regulator/max8907-regulator.c @@ -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); diff --git a/drivers/regulator/max8925-regulator.c b/drivers/regulator/max8925-regulator.c index 446a8544555..0d5f64a805a 100644 --- a/drivers/regulator/max8925-regulator.c +++ b/drivers/regulator/max8925-regulator.c @@ -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; diff --git a/drivers/regulator/max8997.c b/drivers/regulator/max8997.c index 836908ce505..5abd0d3288f 100644 --- a/drivers/regulator/max8997.c +++ b/drivers/regulator/max8997.c @@ -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; diff --git a/drivers/regulator/mc13xxx-regulator-core.c b/drivers/regulator/mc13xxx-regulator-core.c index 2ecf1d8b6a9..5d2ab2ea0c8 100644 --- a/drivers/regulator/mc13xxx-regulator-core.c +++ b/drivers/regulator/mc13xxx-regulator-core.c @@ -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; diff --git a/drivers/regulator/palmas-regulator.c b/drivers/regulator/palmas-regulator.c index c9e912f583b..cbaf22627bd 100644 --- a/drivers/regulator/palmas-regulator.c +++ b/drivers/regulator/palmas-regulator.c @@ -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; diff --git a/drivers/regulator/tps65910-regulator.c b/drivers/regulator/tps65910-regulator.c index b0e4c0bc85c..6ba6931ac85 100644 --- a/drivers/regulator/tps65910-regulator.c +++ b/drivers/regulator/tps65910-regulator.c @@ -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); |