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
0dbf165e
Commit
0dbf165e
authored
Feb 19, 2013
by
Mark Brown
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'regulator/topic/anatop' into regulator-next
parents
19f949f5
ff1ce057
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
49 additions
and
0 deletions
+49
-0
Documentation/devicetree/bindings/regulator/anatop-regulator.txt
...tation/devicetree/bindings/regulator/anatop-regulator.txt
+8
-0
drivers/regulator/anatop-regulator.c
drivers/regulator/anatop-regulator.c
+41
-0
No files found.
Documentation/devicetree/bindings/regulator/anatop-regulator.txt
View file @
0dbf165e
...
...
@@ -9,6 +9,11 @@ Required properties:
- anatop-min-voltage: Minimum voltage of this regulator
- anatop-max-voltage: Maximum voltage of this regulator
Optional properties:
- anatop-delay-reg-offset: Anatop MFD step time register offset
- anatop-delay-bit-shift: Bit shift for the step time register
- anatop-delay-bit-width: Number of bits used in the step time register
Any property defined as part of the core regulator
binding, defined in regulator.txt, can also be used.
...
...
@@ -23,6 +28,9 @@ Example:
anatop-reg-offset = <0x140>;
anatop-vol-bit-shift = <9>;
anatop-vol-bit-width = <5>;
anatop-delay-reg-offset = <0x170>;
anatop-delay-bit-shift = <24>;
anatop-delay-bit-width = <2>;
anatop-min-bit-val = <1>;
anatop-min-voltage = <725000>;
anatop-max-voltage = <1300000>;
...
...
drivers/regulator/anatop-regulator.c
View file @
0dbf165e
...
...
@@ -31,12 +31,18 @@
#include <linux/regulator/driver.h>
#include <linux/regulator/of_regulator.h>
#define LDO_RAMP_UP_UNIT_IN_CYCLES 64
/* 64 cycles per step */
#define LDO_RAMP_UP_FREQ_IN_MHZ 24
/* cycle based on 24M OSC */
struct
anatop_regulator
{
const
char
*
name
;
u32
control_reg
;
struct
regmap
*
anatop
;
int
vol_bit_shift
;
int
vol_bit_width
;
u32
delay_reg
;
int
delay_bit_shift
;
int
delay_bit_width
;
int
min_bit_val
;
int
min_voltage
;
int
max_voltage
;
...
...
@@ -55,6 +61,32 @@ static int anatop_regmap_set_voltage_sel(struct regulator_dev *reg,
return
regulator_set_voltage_sel_regmap
(
reg
,
selector
);
}
static
int
anatop_regmap_set_voltage_time_sel
(
struct
regulator_dev
*
reg
,
unsigned
int
old_sel
,
unsigned
int
new_sel
)
{
struct
anatop_regulator
*
anatop_reg
=
rdev_get_drvdata
(
reg
);
u32
val
;
int
ret
=
0
;
/* check whether need to care about LDO ramp up speed */
if
(
anatop_reg
->
delay_bit_width
&&
new_sel
>
old_sel
)
{
/*
* the delay for LDO ramp up time is
* based on the register setting, we need
* to calculate how many steps LDO need to
* ramp up, and how much delay needed. (us)
*/
regmap_read
(
anatop_reg
->
anatop
,
anatop_reg
->
delay_reg
,
&
val
);
val
=
(
val
>>
anatop_reg
->
delay_bit_shift
)
&
((
1
<<
anatop_reg
->
delay_bit_width
)
-
1
);
ret
=
(
new_sel
-
old_sel
)
*
(
LDO_RAMP_UP_UNIT_IN_CYCLES
<<
val
)
/
LDO_RAMP_UP_FREQ_IN_MHZ
+
1
;
}
return
ret
;
}
static
int
anatop_regmap_get_voltage_sel
(
struct
regulator_dev
*
reg
)
{
struct
anatop_regulator
*
anatop_reg
=
rdev_get_drvdata
(
reg
);
...
...
@@ -67,6 +99,7 @@ static int anatop_regmap_get_voltage_sel(struct regulator_dev *reg)
static
struct
regulator_ops
anatop_rops
=
{
.
set_voltage_sel
=
anatop_regmap_set_voltage_sel
,
.
set_voltage_time_sel
=
anatop_regmap_set_voltage_time_sel
,
.
get_voltage_sel
=
anatop_regmap_get_voltage_sel
,
.
list_voltage
=
regulator_list_voltage_linear
,
.
map_voltage
=
regulator_map_voltage_linear
,
...
...
@@ -143,6 +176,14 @@ static int anatop_regulator_probe(struct platform_device *pdev)
goto
anatop_probe_end
;
}
/* read LDO ramp up setting, only for core reg */
of_property_read_u32
(
np
,
"anatop-delay-reg-offset"
,
&
sreg
->
delay_reg
);
of_property_read_u32
(
np
,
"anatop-delay-bit-width"
,
&
sreg
->
delay_bit_width
);
of_property_read_u32
(
np
,
"anatop-delay-bit-shift"
,
&
sreg
->
delay_bit_shift
);
rdesc
->
n_voltages
=
(
sreg
->
max_voltage
-
sreg
->
min_voltage
)
/
25000
+
1
+
sreg
->
min_bit_val
;
rdesc
->
min_uV
=
sreg
->
min_voltage
;
...
...
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