diff options
Diffstat (limited to 'drivers/regulator')
| -rw-r--r-- | drivers/regulator/Kconfig | 10 | ||||
| -rw-r--r-- | drivers/regulator/core.c | 49 | 
2 files changed, 15 insertions, 44 deletions
diff --git a/drivers/regulator/Kconfig b/drivers/regulator/Kconfig index 9869064f9f03..75c04b8b3ec2 100644 --- a/drivers/regulator/Kconfig +++ b/drivers/regulator/Kconfig @@ -28,16 +28,6 @@ config REGULATOR_DEBUG  	help  	  Say yes here to enable debugging support. -config REGULATOR_DUMMY -	bool "Provide a dummy regulator if regulator lookups fail" -	help -	  If this option is enabled then when a regulator lookup fails -	  and the board has not specified that it has provided full -	  constraints the regulator core will provide an always -	  enabled dummy regulator, allowing consumer drivers to continue. - -	  A warning will be generated when this substitution is done. -  config REGULATOR_FIXED_VOLTAGE  	tristate "Fixed voltage regulator support"  	help diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c index 960103a61000..6382f0af353b 100644 --- a/drivers/regulator/core.c +++ b/drivers/regulator/core.c @@ -55,7 +55,6 @@ static LIST_HEAD(regulator_map_list);  static LIST_HEAD(regulator_ena_gpio_list);  static LIST_HEAD(regulator_supply_alias_list);  static bool has_full_constraints; -static bool board_wants_dummy_regulator;  static struct dentry *debugfs_root; @@ -1303,12 +1302,12 @@ static struct regulator_dev *regulator_dev_lookup(struct device *dev,  /* Internal regulator request function */  static struct regulator *_regulator_get(struct device *dev, const char *id, -					bool exclusive) +					bool exclusive, bool allow_dummy)  {  	struct regulator_dev *rdev;  	struct regulator *regulator = ERR_PTR(-EPROBE_DEFER);  	const char *devname = NULL; -	int ret = 0; +	int ret = -EPROBE_DEFER;  	if (id == NULL) {  		pr_err("get() with no identifier\n"); @@ -1324,34 +1323,32 @@ static struct regulator *_regulator_get(struct device *dev, const char *id,  	if (rdev)  		goto found; +	regulator = ERR_PTR(ret); +  	/*  	 * If we have return value from dev_lookup fail, we do not expect to  	 * succeed, so, quit with appropriate error value  	 */ -	if (ret) { -		regulator = ERR_PTR(ret); +	if (ret && ret != -ENODEV) {  		goto out;  	} -	if (board_wants_dummy_regulator) { -		rdev = dummy_regulator_rdev; -		goto found; -	} - -#ifdef CONFIG_REGULATOR_DUMMY  	if (!devname)  		devname = "deviceless"; -	/* If the board didn't flag that it was fully constrained then -	 * substitute in a dummy regulator so consumers can continue. +	/* +	 * Assume that a regulator is physically present and enabled +	 * even if it isn't hooked up and just provide a dummy.  	 */ -	if (!has_full_constraints) { +	if (has_full_constraints && allow_dummy) {  		pr_warn("%s supply %s not found, using dummy regulator\n",  			devname, id); +  		rdev = dummy_regulator_rdev;  		goto found; +	} else { +		dev_err(dev, "dummy supplies not allowed\n");  	} -#endif  	mutex_unlock(®ulator_list_mutex);  	return regulator; @@ -1409,7 +1406,7 @@ out:   */  struct regulator *regulator_get(struct device *dev, const char *id)  { -	return _regulator_get(dev, id, false); +	return _regulator_get(dev, id, false, true);  }  EXPORT_SYMBOL_GPL(regulator_get); @@ -1436,7 +1433,7 @@ EXPORT_SYMBOL_GPL(regulator_get);   */  struct regulator *regulator_get_exclusive(struct device *dev, const char *id)  { -	return _regulator_get(dev, id, true); +	return _regulator_get(dev, id, true, false);  }  EXPORT_SYMBOL_GPL(regulator_get_exclusive); @@ -1465,7 +1462,7 @@ EXPORT_SYMBOL_GPL(regulator_get_exclusive);   */  struct regulator *regulator_get_optional(struct device *dev, const char *id)  { -	return _regulator_get(dev, id, 0); +	return _regulator_get(dev, id, false, false);  }  EXPORT_SYMBOL_GPL(regulator_get_optional); @@ -3664,22 +3661,6 @@ void regulator_has_full_constraints(void)  EXPORT_SYMBOL_GPL(regulator_has_full_constraints);  /** - * regulator_use_dummy_regulator - Provide a dummy regulator when none is found - * - * Calling this function will cause the regulator API to provide a - * dummy regulator to consumers if no physical regulator is found, - * allowing most consumers to proceed as though a regulator were - * configured.  This allows systems such as those with software - * controllable regulators for the CPU core only to be brought up more - * readily. - */ -void regulator_use_dummy_regulator(void) -{ -	board_wants_dummy_regulator = true; -} -EXPORT_SYMBOL_GPL(regulator_use_dummy_regulator); - -/**   * rdev_get_drvdata - get rdev regulator driver data   * @rdev: regulator   *  |