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
f7abb7e3
Commit
f7abb7e3
authored
Jan 23, 2020
by
Mark Brown
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'regulator-5.5' into regulator-linus
parents
def9d278
3d7610e8
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
25 additions
and
15 deletions
+25
-15
drivers/regulator/core.c
drivers/regulator/core.c
+2
-0
drivers/regulator/vctrl-regulator.c
drivers/regulator/vctrl-regulator.c
+23
-15
No files found.
drivers/regulator/core.c
View file @
f7abb7e3
...
...
@@ -3470,6 +3470,7 @@ int regulator_set_voltage_rdev(struct regulator_dev *rdev, int min_uV,
out:
return
ret
;
}
EXPORT_SYMBOL_GPL
(
regulator_set_voltage_rdev
);
static
int
regulator_limit_voltage_step
(
struct
regulator_dev
*
rdev
,
int
*
current_uV
,
int
*
min_uV
)
...
...
@@ -4034,6 +4035,7 @@ int regulator_get_voltage_rdev(struct regulator_dev *rdev)
return
ret
;
return
ret
-
rdev
->
constraints
->
uV_offset
;
}
EXPORT_SYMBOL_GPL
(
regulator_get_voltage_rdev
);
/**
* regulator_get_voltage - get regulator output voltage
...
...
drivers/regulator/vctrl-regulator.c
View file @
f7abb7e3
...
...
@@ -11,10 +11,13 @@
#include <linux/module.h>
#include <linux/of.h>
#include <linux/of_device.h>
#include <linux/regulator/coupler.h>
#include <linux/regulator/driver.h>
#include <linux/regulator/of_regulator.h>
#include <linux/sort.h>
#include "internal.h"
struct
vctrl_voltage_range
{
int
min_uV
;
int
max_uV
;
...
...
@@ -79,7 +82,7 @@ static int vctrl_calc_output_voltage(struct vctrl_data *vctrl, int ctrl_uV)
static
int
vctrl_get_voltage
(
struct
regulator_dev
*
rdev
)
{
struct
vctrl_data
*
vctrl
=
rdev_get_drvdata
(
rdev
);
int
ctrl_uV
=
regulator_get_voltage
(
vctrl
->
ctrl_reg
);
int
ctrl_uV
=
regulator_get_voltage
_rdev
(
vctrl
->
ctrl_reg
->
rdev
);
return
vctrl_calc_output_voltage
(
vctrl
,
ctrl_uV
);
}
...
...
@@ -90,16 +93,16 @@ static int vctrl_set_voltage(struct regulator_dev *rdev,
{
struct
vctrl_data
*
vctrl
=
rdev_get_drvdata
(
rdev
);
struct
regulator
*
ctrl_reg
=
vctrl
->
ctrl_reg
;
int
orig_ctrl_uV
=
regulator_get_voltage
(
ctrl_reg
);
int
orig_ctrl_uV
=
regulator_get_voltage
_rdev
(
ctrl_reg
->
rdev
);
int
uV
=
vctrl_calc_output_voltage
(
vctrl
,
orig_ctrl_uV
);
int
ret
;
if
(
req_min_uV
>=
uV
||
!
vctrl
->
ovp_threshold
)
/* voltage rising or no OVP */
return
regulator_set_voltage
(
ctrl_reg
,
return
regulator_set_voltage_rdev
(
ctrl_reg
->
rdev
,
vctrl_calc_ctrl_voltage
(
vctrl
,
req_min_uV
),
vctrl_calc_ctrl_voltage
(
vctrl
,
req_max_uV
));
vctrl_calc_ctrl_voltage
(
vctrl
,
req_max_uV
),
PM_SUSPEND_ON
);
while
(
uV
>
req_min_uV
)
{
int
max_drop_uV
=
(
uV
*
vctrl
->
ovp_threshold
)
/
100
;
...
...
@@ -114,9 +117,10 @@ static int vctrl_set_voltage(struct regulator_dev *rdev,
next_uV
=
max_t
(
int
,
req_min_uV
,
uV
-
max_drop_uV
);
next_ctrl_uV
=
vctrl_calc_ctrl_voltage
(
vctrl
,
next_uV
);
ret
=
regulator_set_voltage
(
ctrl_reg
,
ret
=
regulator_set_voltage_rdev
(
ctrl_reg
->
rdev
,
next_ctrl_uV
,
next_ctrl_uV
,
next_ctrl_uV
);
PM_SUSPEND_ON
);
if
(
ret
)
goto
err
;
...
...
@@ -130,7 +134,8 @@ static int vctrl_set_voltage(struct regulator_dev *rdev,
err:
/* Try to go back to original voltage */
regulator_set_voltage
(
ctrl_reg
,
orig_ctrl_uV
,
orig_ctrl_uV
);
regulator_set_voltage_rdev
(
ctrl_reg
->
rdev
,
orig_ctrl_uV
,
orig_ctrl_uV
,
PM_SUSPEND_ON
);
return
ret
;
}
...
...
@@ -155,9 +160,10 @@ static int vctrl_set_voltage_sel(struct regulator_dev *rdev,
if
(
selector
>=
vctrl
->
sel
||
!
vctrl
->
ovp_threshold
)
{
/* voltage rising or no OVP */
ret
=
regulator_set_voltage
(
ctrl_reg
,
ret
=
regulator_set_voltage_rdev
(
ctrl_reg
->
rdev
,
vctrl
->
vtable
[
selector
].
ctrl
,
vctrl
->
vtable
[
selector
].
ctrl
,
vctrl
->
vtable
[
selector
].
ctrl
);
PM_SUSPEND_ON
);
if
(
!
ret
)
vctrl
->
sel
=
selector
;
...
...
@@ -173,9 +179,10 @@ static int vctrl_set_voltage_sel(struct regulator_dev *rdev,
else
next_sel
=
vctrl
->
vtable
[
vctrl
->
sel
].
ovp_min_sel
;
ret
=
regulator_set_voltage
(
ctrl_reg
,
ret
=
regulator_set_voltage
_rdev
(
ctrl_reg
->
rdev
,
vctrl
->
vtable
[
next_sel
].
ctrl
,
vctrl
->
vtable
[
next_sel
].
ctrl
);
vctrl
->
vtable
[
next_sel
].
ctrl
,
PM_SUSPEND_ON
);
if
(
ret
)
{
dev_err
(
&
rdev
->
dev
,
"failed to set control voltage to %duV
\n
"
,
...
...
@@ -195,9 +202,10 @@ static int vctrl_set_voltage_sel(struct regulator_dev *rdev,
err:
if
(
vctrl
->
sel
!=
orig_sel
)
{
/* Try to go back to original voltage */
if
(
!
regulator_set_voltage
(
ctrl_reg
,
if
(
!
regulator_set_voltage_rdev
(
ctrl_reg
->
rdev
,
vctrl
->
vtable
[
orig_sel
].
ctrl
,
vctrl
->
vtable
[
orig_sel
].
ctrl
,
vctrl
->
vtable
[
orig_sel
].
ctrl
))
PM_SUSPEND_ON
))
vctrl
->
sel
=
orig_sel
;
else
dev_warn
(
&
rdev
->
dev
,
...
...
@@ -482,7 +490,7 @@ static int vctrl_probe(struct platform_device *pdev)
if
(
ret
)
return
ret
;
ctrl_uV
=
regulator_get_voltage
(
vctrl
->
ctrl_reg
);
ctrl_uV
=
regulator_get_voltage
_rdev
(
vctrl
->
ctrl_reg
->
rdev
);
if
(
ctrl_uV
<
0
)
{
dev_err
(
&
pdev
->
dev
,
"failed to get control voltage
\n
"
);
return
ctrl_uV
;
...
...
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