提交 688fe99a 编写于 作者: M Mark Brown 提交者: Liam Girdwood

regulator: Add option for machine drivers to enable the dummy regulator

Allow machine drivers to explicitly enable the use of the dummy regulator,
enabling simpler support for systems with only a few specific supplies
visible to software.

It is strongly recommended that this is not used on systems with
substantial software control over their PMICs, for maximum functionality
constrints should be as fully specified as possible.
Signed-off-by: NMark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: NLiam Girdwood <lrg@slimlogic.co.uk>
上级 993af7c0
...@@ -3,14 +3,13 @@ ...@@ -3,14 +3,13 @@
# #
obj-$(CONFIG_REGULATOR) += core.o obj-$(CONFIG_REGULATOR) += core.o dummy.o
obj-$(CONFIG_REGULATOR_FIXED_VOLTAGE) += fixed.o obj-$(CONFIG_REGULATOR_FIXED_VOLTAGE) += fixed.o
obj-$(CONFIG_REGULATOR_VIRTUAL_CONSUMER) += virtual.o obj-$(CONFIG_REGULATOR_VIRTUAL_CONSUMER) += virtual.o
obj-$(CONFIG_REGULATOR_USERSPACE_CONSUMER) += userspace-consumer.o obj-$(CONFIG_REGULATOR_USERSPACE_CONSUMER) += userspace-consumer.o
obj-$(CONFIG_REGULATOR_AD5398) += ad5398.o obj-$(CONFIG_REGULATOR_AD5398) += ad5398.o
obj-$(CONFIG_REGULATOR_BQ24022) += bq24022.o obj-$(CONFIG_REGULATOR_BQ24022) += bq24022.o
obj-$(CONFIG_REGULATOR_DUMMY) += dummy.o
obj-$(CONFIG_REGULATOR_LP3971) += lp3971.o obj-$(CONFIG_REGULATOR_LP3971) += lp3971.o
obj-$(CONFIG_REGULATOR_LP3972) += lp3972.o obj-$(CONFIG_REGULATOR_LP3972) += lp3972.o
obj-$(CONFIG_REGULATOR_MAX1586) += max1586.o obj-$(CONFIG_REGULATOR_MAX1586) += max1586.o
......
...@@ -33,6 +33,7 @@ static DEFINE_MUTEX(regulator_list_mutex); ...@@ -33,6 +33,7 @@ static DEFINE_MUTEX(regulator_list_mutex);
static LIST_HEAD(regulator_list); static LIST_HEAD(regulator_list);
static LIST_HEAD(regulator_map_list); static LIST_HEAD(regulator_map_list);
static int has_full_constraints; static int has_full_constraints;
static bool board_wants_dummy_regulator;
/* /*
* struct regulator_map * struct regulator_map
...@@ -1108,6 +1109,11 @@ static struct regulator *_regulator_get(struct device *dev, const char *id, ...@@ -1108,6 +1109,11 @@ static struct regulator *_regulator_get(struct device *dev, const char *id,
} }
} }
if (board_wants_dummy_regulator) {
rdev = dummy_regulator_rdev;
goto found;
}
#ifdef CONFIG_REGULATOR_DUMMY #ifdef CONFIG_REGULATOR_DUMMY
if (!devname) if (!devname)
devname = "deviceless"; devname = "deviceless";
...@@ -2462,6 +2468,22 @@ void regulator_has_full_constraints(void) ...@@ -2462,6 +2468,22 @@ void regulator_has_full_constraints(void)
} }
EXPORT_SYMBOL_GPL(regulator_has_full_constraints); 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_get_drvdata - get rdev regulator driver data
* @rdev: regulator * @rdev: regulator
......
...@@ -189,10 +189,15 @@ int regulator_suspend_prepare(suspend_state_t state); ...@@ -189,10 +189,15 @@ int regulator_suspend_prepare(suspend_state_t state);
#ifdef CONFIG_REGULATOR #ifdef CONFIG_REGULATOR
void regulator_has_full_constraints(void); void regulator_has_full_constraints(void);
void regulator_use_dummy_regulator(void);
#else #else
static inline void regulator_has_full_constraints(void) static inline void regulator_has_full_constraints(void)
{ {
} }
static inline void regulator_use_dummy_regulator(void)
{
}
#endif #endif
#endif #endif
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册