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
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