Merge remote-tracking branch 'regulator/topic/optional' into regulator-next
This commit is contained in:
		
				commit
				
					
						aef393da75
					
				
			
		
					 3 changed files with 15 additions and 49 deletions
				
			
		| 
						 | 
				
			
			@ -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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -3663,22 +3660,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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -195,15 +195,10 @@ int regulator_suspend_finish(void);
 | 
			
		|||
 | 
			
		||||
#ifdef CONFIG_REGULATOR
 | 
			
		||||
void regulator_has_full_constraints(void);
 | 
			
		||||
void regulator_use_dummy_regulator(void);
 | 
			
		||||
#else
 | 
			
		||||
static inline void regulator_has_full_constraints(void)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static inline void regulator_use_dummy_regulator(void)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue