Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
aef393da
Commit
aef393da
authored
Oct 24, 2013
by
Mark Brown
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'regulator/topic/optional' into regulator-next
parents
88c260a1
4040394e
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
15 additions
and
49 deletions
+15
-49
drivers/regulator/Kconfig
drivers/regulator/Kconfig
+0
-10
drivers/regulator/core.c
drivers/regulator/core.c
+15
-34
include/linux/regulator/machine.h
include/linux/regulator/machine.h
+0
-5
No files found.
drivers/regulator/Kconfig
View file @
aef393da
...
...
@@ -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
...
...
drivers/regulator/core.c
View file @
aef393da
...
...
@@ -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
(
&
regulator_list_mutex
);
return
regulator
;
...
...
@@ -1409,7 +1406,7 @@ static struct regulator *_regulator_get(struct device *dev, const char *id,
*/
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
...
...
include/linux/regulator/machine.h
View file @
aef393da
...
...
@@ -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
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment