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
nexedi
linux
Commits
fca8e13f
Commit
fca8e13f
authored
Feb 08, 2015
by
Mark Brown
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'regulator/topic/dt-cb' into regulator-next
parents
a9877b60
f47531b1
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
43 additions
and
5 deletions
+43
-5
drivers/regulator/core.c
drivers/regulator/core.c
+17
-5
drivers/regulator/internal.h
drivers/regulator/internal.h
+2
-0
drivers/regulator/of_regulator.c
drivers/regulator/of_regulator.c
+11
-0
include/linux/regulator/driver.h
include/linux/regulator/driver.h
+13
-0
No files found.
drivers/regulator/core.c
View file @
fca8e13f
...
...
@@ -3561,7 +3561,7 @@ static void rdev_init_debugfs(struct regulator_dev *rdev)
/**
* regulator_register - register regulator
* @regulator_desc: regulator to register
* @c
onfi
g: runtime configuration for regulator
* @c
f
g: runtime configuration for regulator
*
* Called by regulator drivers to register a regulator.
* Returns a valid pointer to struct regulator_dev on success
...
...
@@ -3569,20 +3569,21 @@ static void rdev_init_debugfs(struct regulator_dev *rdev)
*/
struct
regulator_dev
*
regulator_register
(
const
struct
regulator_desc
*
regulator_desc
,
const
struct
regulator_config
*
c
onfi
g
)
const
struct
regulator_config
*
c
f
g
)
{
const
struct
regulation_constraints
*
constraints
=
NULL
;
const
struct
regulator_init_data
*
init_data
;
struct
regulator_config
*
config
=
NULL
;
static
atomic_t
regulator_no
=
ATOMIC_INIT
(
-
1
);
struct
regulator_dev
*
rdev
;
struct
device
*
dev
;
int
ret
,
i
;
const
char
*
supply
=
NULL
;
if
(
regulator_desc
==
NULL
||
c
onfi
g
==
NULL
)
if
(
regulator_desc
==
NULL
||
c
f
g
==
NULL
)
return
ERR_PTR
(
-
EINVAL
);
dev
=
c
onfi
g
->
dev
;
dev
=
c
f
g
->
dev
;
WARN_ON
(
!
dev
);
if
(
regulator_desc
->
name
==
NULL
||
regulator_desc
->
ops
==
NULL
)
...
...
@@ -3612,7 +3613,17 @@ regulator_register(const struct regulator_desc *regulator_desc,
if
(
rdev
==
NULL
)
return
ERR_PTR
(
-
ENOMEM
);
init_data
=
regulator_of_get_init_data
(
dev
,
regulator_desc
,
/*
* Duplicate the config so the driver could override it after
* parsing init data.
*/
config
=
kmemdup
(
cfg
,
sizeof
(
*
cfg
),
GFP_KERNEL
);
if
(
config
==
NULL
)
{
kfree
(
rdev
);
return
ERR_PTR
(
-
ENOMEM
);
}
init_data
=
regulator_of_get_init_data
(
dev
,
regulator_desc
,
config
,
&
rdev
->
dev
.
of_node
);
if
(
!
init_data
)
{
init_data
=
config
->
init_data
;
...
...
@@ -3735,6 +3746,7 @@ regulator_register(const struct regulator_desc *regulator_desc,
rdev_init_debugfs
(
rdev
);
out:
mutex_unlock
(
&
regulator_list_mutex
);
kfree
(
config
);
return
rdev
;
unset_supplies:
...
...
drivers/regulator/internal.h
View file @
fca8e13f
...
...
@@ -38,11 +38,13 @@ struct regulator {
#ifdef CONFIG_OF
struct
regulator_init_data
*
regulator_of_get_init_data
(
struct
device
*
dev
,
const
struct
regulator_desc
*
desc
,
struct
regulator_config
*
config
,
struct
device_node
**
node
);
#else
static
inline
struct
regulator_init_data
*
regulator_of_get_init_data
(
struct
device
*
dev
,
const
struct
regulator_desc
*
desc
,
struct
regulator_config
*
config
,
struct
device_node
**
node
)
{
return
NULL
;
...
...
drivers/regulator/of_regulator.c
View file @
fca8e13f
...
...
@@ -270,6 +270,7 @@ EXPORT_SYMBOL_GPL(of_regulator_match);
struct
regulator_init_data
*
regulator_of_get_init_data
(
struct
device
*
dev
,
const
struct
regulator_desc
*
desc
,
struct
regulator_config
*
config
,
struct
device_node
**
node
)
{
struct
device_node
*
search
,
*
child
;
...
...
@@ -307,6 +308,16 @@ struct regulator_init_data *regulator_of_get_init_data(struct device *dev,
break
;
}
if
(
desc
->
of_parse_cb
)
{
if
(
desc
->
of_parse_cb
(
child
,
desc
,
config
))
{
dev_err
(
dev
,
"driver callback failed to parse DT for regulator %s
\n
"
,
child
->
name
);
init_data
=
NULL
;
break
;
}
}
of_node_get
(
child
);
*
node
=
child
;
break
;
...
...
include/linux/regulator/driver.h
View file @
fca8e13f
...
...
@@ -21,6 +21,7 @@
struct
regmap
;
struct
regulator_dev
;
struct
regulator_config
;
struct
regulator_init_data
;
struct
regulator_enable_gpio
;
...
...
@@ -205,6 +206,15 @@ enum regulator_type {
* @supply_name: Identifying the regulator supply
* @of_match: Name used to identify regulator in DT.
* @regulators_node: Name of node containing regulator definitions in DT.
* @of_parse_cb: Optional callback called only if of_match is present.
* Will be called for each regulator parsed from DT, during
* init_data parsing.
* The regulator_config passed as argument to the callback will
* be a copy of config passed to regulator_register, valid only
* for this particular call. Callback may freely change the
* config but it cannot store it for later usage.
* Callback should return 0 on success or negative ERRNO
* indicating failure.
* @id: Numerical identifier for the regulator.
* @ops: Regulator operations table.
* @irq: Interrupt number for the regulator.
...
...
@@ -251,6 +261,9 @@ struct regulator_desc {
const
char
*
supply_name
;
const
char
*
of_match
;
const
char
*
regulators_node
;
int
(
*
of_parse_cb
)(
struct
device_node
*
,
const
struct
regulator_desc
*
,
struct
regulator_config
*
);
int
id
;
bool
continuous_voltage_range
;
unsigned
n_voltages
;
...
...
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