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
9199addf
Commit
9199addf
authored
Dec 10, 2012
by
Mark Brown
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'regulator/topic/max77686' into regulator-next
parents
0d2cff8b
38d34035
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
155 additions
and
9 deletions
+155
-9
drivers/regulator/max77686.c
drivers/regulator/max77686.c
+155
-9
No files found.
drivers/regulator/max77686.c
View file @
9199addf
...
@@ -67,8 +67,94 @@ enum max77686_ramp_rate {
...
@@ -67,8 +67,94 @@ enum max77686_ramp_rate {
struct
max77686_data
{
struct
max77686_data
{
struct
regulator_dev
*
rdev
[
MAX77686_REGULATORS
];
struct
regulator_dev
*
rdev
[
MAX77686_REGULATORS
];
unsigned
int
opmode
[
MAX77686_REGULATORS
];
};
};
/* Some BUCKS supports Normal[ON/OFF] mode during suspend */
static
int
max77686_buck_set_suspend_disable
(
struct
regulator_dev
*
rdev
)
{
unsigned
int
val
;
struct
max77686_data
*
max77686
=
rdev_get_drvdata
(
rdev
);
if
(
rdev
->
desc
->
id
==
MAX77686_BUCK1
)
val
=
0x1
;
else
val
=
0x1
<<
MAX77686_OPMODE_BUCK234_SHIFT
;
max77686
->
opmode
[
rdev
->
desc
->
id
]
=
val
;
return
regmap_update_bits
(
rdev
->
regmap
,
rdev
->
desc
->
enable_reg
,
rdev
->
desc
->
enable_mask
,
val
);
}
/* Some LDOs supports [LPM/Normal]ON mode during suspend state */
static
int
max77686_set_suspend_mode
(
struct
regulator_dev
*
rdev
,
unsigned
int
mode
)
{
struct
max77686_data
*
max77686
=
rdev_get_drvdata
(
rdev
);
unsigned
int
val
;
/* BUCK[5-9] doesn't support this feature */
if
(
rdev
->
desc
->
id
>=
MAX77686_BUCK5
)
return
0
;
switch
(
mode
)
{
case
REGULATOR_MODE_IDLE
:
/* ON in LP Mode */
val
=
0x2
<<
MAX77686_OPMODE_SHIFT
;
break
;
case
REGULATOR_MODE_NORMAL
:
/* ON in Normal Mode */
val
=
0x3
<<
MAX77686_OPMODE_SHIFT
;
break
;
default:
pr_warn
(
"%s: regulator_suspend_mode : 0x%x not supported
\n
"
,
rdev
->
desc
->
name
,
mode
);
return
-
EINVAL
;
}
max77686
->
opmode
[
rdev
->
desc
->
id
]
=
val
;
return
regmap_update_bits
(
rdev
->
regmap
,
rdev
->
desc
->
enable_reg
,
rdev
->
desc
->
enable_mask
,
val
);
}
/* Some LDOs supports LPM-ON/OFF/Normal-ON mode during suspend state */
static
int
max77686_ldo_set_suspend_mode
(
struct
regulator_dev
*
rdev
,
unsigned
int
mode
)
{
unsigned
int
val
;
struct
max77686_data
*
max77686
=
rdev_get_drvdata
(
rdev
);
switch
(
mode
)
{
case
REGULATOR_MODE_STANDBY
:
/* switch off */
val
=
0x1
<<
MAX77686_OPMODE_SHIFT
;
break
;
case
REGULATOR_MODE_IDLE
:
/* ON in LP Mode */
val
=
0x2
<<
MAX77686_OPMODE_SHIFT
;
break
;
case
REGULATOR_MODE_NORMAL
:
/* ON in Normal Mode */
val
=
0x3
<<
MAX77686_OPMODE_SHIFT
;
break
;
default:
pr_warn
(
"%s: regulator_suspend_mode : 0x%x not supported
\n
"
,
rdev
->
desc
->
name
,
mode
);
return
-
EINVAL
;
}
max77686
->
opmode
[
rdev
->
desc
->
id
]
=
val
;
return
regmap_update_bits
(
rdev
->
regmap
,
rdev
->
desc
->
enable_reg
,
rdev
->
desc
->
enable_mask
,
val
);
}
static
int
max77686_enable
(
struct
regulator_dev
*
rdev
)
{
struct
max77686_data
*
max77686
=
rdev_get_drvdata
(
rdev
);
return
regmap_update_bits
(
rdev
->
regmap
,
rdev
->
desc
->
enable_reg
,
rdev
->
desc
->
enable_mask
,
max77686
->
opmode
[
rdev
->
desc
->
id
]);
}
static
int
max77686_set_ramp_delay
(
struct
regulator_dev
*
rdev
,
int
ramp_delay
)
static
int
max77686_set_ramp_delay
(
struct
regulator_dev
*
rdev
,
int
ramp_delay
)
{
{
unsigned
int
ramp_value
=
RAMP_RATE_NO_CTRL
;
unsigned
int
ramp_value
=
RAMP_RATE_NO_CTRL
;
...
@@ -98,23 +184,49 @@ static struct regulator_ops max77686_ops = {
...
@@ -98,23 +184,49 @@ static struct regulator_ops max77686_ops = {
.
list_voltage
=
regulator_list_voltage_linear
,
.
list_voltage
=
regulator_list_voltage_linear
,
.
map_voltage
=
regulator_map_voltage_linear
,
.
map_voltage
=
regulator_map_voltage_linear
,
.
is_enabled
=
regulator_is_enabled_regmap
,
.
is_enabled
=
regulator_is_enabled_regmap
,
.
enable
=
regulator_enable_regmap
,
.
enable
=
max77686_enable
,
.
disable
=
regulator_disable_regmap
,
.
get_voltage_sel
=
regulator_get_voltage_sel_regmap
,
.
set_voltage_sel
=
regulator_set_voltage_sel_regmap
,
.
set_voltage_time_sel
=
regulator_set_voltage_time_sel
,
.
set_suspend_mode
=
max77686_set_suspend_mode
,
};
static
struct
regulator_ops
max77686_ldo_ops
=
{
.
list_voltage
=
regulator_list_voltage_linear
,
.
map_voltage
=
regulator_map_voltage_linear
,
.
is_enabled
=
regulator_is_enabled_regmap
,
.
enable
=
max77686_enable
,
.
disable
=
regulator_disable_regmap
,
.
disable
=
regulator_disable_regmap
,
.
get_voltage_sel
=
regulator_get_voltage_sel_regmap
,
.
get_voltage_sel
=
regulator_get_voltage_sel_regmap
,
.
set_voltage_sel
=
regulator_set_voltage_sel_regmap
,
.
set_voltage_sel
=
regulator_set_voltage_sel_regmap
,
.
set_voltage_time_sel
=
regulator_set_voltage_time_sel
,
.
set_voltage_time_sel
=
regulator_set_voltage_time_sel
,
.
set_suspend_mode
=
max77686_ldo_set_suspend_mode
,
};
static
struct
regulator_ops
max77686_buck1_ops
=
{
.
list_voltage
=
regulator_list_voltage_linear
,
.
map_voltage
=
regulator_map_voltage_linear
,
.
is_enabled
=
regulator_is_enabled_regmap
,
.
enable
=
max77686_enable
,
.
disable
=
regulator_disable_regmap
,
.
get_voltage_sel
=
regulator_get_voltage_sel_regmap
,
.
set_voltage_sel
=
regulator_set_voltage_sel_regmap
,
.
set_voltage_time_sel
=
regulator_set_voltage_time_sel
,
.
set_suspend_disable
=
max77686_buck_set_suspend_disable
,
};
};
static
struct
regulator_ops
max77686_buck_dvs_ops
=
{
static
struct
regulator_ops
max77686_buck_dvs_ops
=
{
.
list_voltage
=
regulator_list_voltage_linear
,
.
list_voltage
=
regulator_list_voltage_linear
,
.
map_voltage
=
regulator_map_voltage_linear
,
.
map_voltage
=
regulator_map_voltage_linear
,
.
is_enabled
=
regulator_is_enabled_regmap
,
.
is_enabled
=
regulator_is_enabled_regmap
,
.
enable
=
regulator_enable_regmap
,
.
enable
=
max77686_enable
,
.
disable
=
regulator_disable_regmap
,
.
disable
=
regulator_disable_regmap
,
.
get_voltage_sel
=
regulator_get_voltage_sel_regmap
,
.
get_voltage_sel
=
regulator_get_voltage_sel_regmap
,
.
set_voltage_sel
=
regulator_set_voltage_sel_regmap
,
.
set_voltage_sel
=
regulator_set_voltage_sel_regmap
,
.
set_voltage_time_sel
=
regulator_set_voltage_time_sel
,
.
set_voltage_time_sel
=
regulator_set_voltage_time_sel
,
.
set_ramp_delay
=
max77686_set_ramp_delay
,
.
set_ramp_delay
=
max77686_set_ramp_delay
,
.
set_suspend_disable
=
max77686_buck_set_suspend_disable
,
};
};
#define regulator_desc_ldo(num) { \
#define regulator_desc_ldo(num) { \
...
@@ -133,7 +245,39 @@ static struct regulator_ops max77686_buck_dvs_ops = {
...
@@ -133,7 +245,39 @@ static struct regulator_ops max77686_buck_dvs_ops = {
.enable_mask = MAX77686_OPMODE_MASK \
.enable_mask = MAX77686_OPMODE_MASK \
<< MAX77686_OPMODE_SHIFT, \
<< MAX77686_OPMODE_SHIFT, \
}
}
#define regulator_desc_lpm_ldo(num) { \
.name = "LDO"#num, \
.id = MAX77686_LDO##num, \
.ops = &max77686_ldo_ops, \
.type = REGULATOR_VOLTAGE, \
.owner = THIS_MODULE, \
.min_uV = MAX77686_LDO_MINUV, \
.uV_step = MAX77686_LDO_UVSTEP, \
.ramp_delay = MAX77686_RAMP_DELAY, \
.n_voltages = MAX77686_VSEL_MASK + 1, \
.vsel_reg = MAX77686_REG_LDO1CTRL1 + num - 1, \
.vsel_mask = MAX77686_VSEL_MASK, \
.enable_reg = MAX77686_REG_LDO1CTRL1 + num - 1, \
.enable_mask = MAX77686_OPMODE_MASK \
<< MAX77686_OPMODE_SHIFT, \
}
#define regulator_desc_ldo_low(num) { \
#define regulator_desc_ldo_low(num) { \
.name = "LDO"#num, \
.id = MAX77686_LDO##num, \
.ops = &max77686_ldo_ops, \
.type = REGULATOR_VOLTAGE, \
.owner = THIS_MODULE, \
.min_uV = MAX77686_LDO_LOW_MINUV, \
.uV_step = MAX77686_LDO_LOW_UVSTEP, \
.ramp_delay = MAX77686_RAMP_DELAY, \
.n_voltages = MAX77686_VSEL_MASK + 1, \
.vsel_reg = MAX77686_REG_LDO1CTRL1 + num - 1, \
.vsel_mask = MAX77686_VSEL_MASK, \
.enable_reg = MAX77686_REG_LDO1CTRL1 + num - 1, \
.enable_mask = MAX77686_OPMODE_MASK \
<< MAX77686_OPMODE_SHIFT, \
}
#define regulator_desc_ldo1_low(num) { \
.name = "LDO"#num, \
.name = "LDO"#num, \
.id = MAX77686_LDO##num, \
.id = MAX77686_LDO##num, \
.ops = &max77686_ops, \
.ops = &max77686_ops, \
...
@@ -167,7 +311,7 @@ static struct regulator_ops max77686_buck_dvs_ops = {
...
@@ -167,7 +311,7 @@ static struct regulator_ops max77686_buck_dvs_ops = {
#define regulator_desc_buck1(num) { \
#define regulator_desc_buck1(num) { \
.name = "BUCK"#num, \
.name = "BUCK"#num, \
.id = MAX77686_BUCK##num, \
.id = MAX77686_BUCK##num, \
.ops = &max77686_ops, \
.ops = &max77686_
buck1_
ops, \
.type = REGULATOR_VOLTAGE, \
.type = REGULATOR_VOLTAGE, \
.owner = THIS_MODULE, \
.owner = THIS_MODULE, \
.min_uV = MAX77686_BUCK_MINUV, \
.min_uV = MAX77686_BUCK_MINUV, \
...
@@ -197,7 +341,7 @@ static struct regulator_ops max77686_buck_dvs_ops = {
...
@@ -197,7 +341,7 @@ static struct regulator_ops max77686_buck_dvs_ops = {
}
}
static
struct
regulator_desc
regulators
[]
=
{
static
struct
regulator_desc
regulators
[]
=
{
regulator_desc_ldo_low
(
1
),
regulator_desc_ldo
1
_low
(
1
),
regulator_desc_ldo_low
(
2
),
regulator_desc_ldo_low
(
2
),
regulator_desc_ldo
(
3
),
regulator_desc_ldo
(
3
),
regulator_desc_ldo
(
4
),
regulator_desc_ldo
(
4
),
...
@@ -206,13 +350,13 @@ static struct regulator_desc regulators[] = {
...
@@ -206,13 +350,13 @@ static struct regulator_desc regulators[] = {
regulator_desc_ldo_low
(
7
),
regulator_desc_ldo_low
(
7
),
regulator_desc_ldo_low
(
8
),
regulator_desc_ldo_low
(
8
),
regulator_desc_ldo
(
9
),
regulator_desc_ldo
(
9
),
regulator_desc_ldo
(
10
),
regulator_desc_l
pm_l
do
(
10
),
regulator_desc_ldo
(
11
),
regulator_desc_l
pm_l
do
(
11
),
regulator_desc_ldo
(
12
),
regulator_desc_l
pm_l
do
(
12
),
regulator_desc_ldo
(
13
),
regulator_desc_ldo
(
13
),
regulator_desc_ldo
(
14
),
regulator_desc_l
pm_l
do
(
14
),
regulator_desc_ldo_low
(
15
),
regulator_desc_ldo_low
(
15
),
regulator_desc_ldo
(
16
),
regulator_desc_l
pm_l
do
(
16
),
regulator_desc_ldo
(
17
),
regulator_desc_ldo
(
17
),
regulator_desc_ldo
(
18
),
regulator_desc_ldo
(
18
),
regulator_desc_ldo
(
19
),
regulator_desc_ldo
(
19
),
...
@@ -314,12 +458,14 @@ static int max77686_pmic_probe(struct platform_device *pdev)
...
@@ -314,12 +458,14 @@ static int max77686_pmic_probe(struct platform_device *pdev)
config
.
dev
=
&
pdev
->
dev
;
config
.
dev
=
&
pdev
->
dev
;
config
.
regmap
=
iodev
->
regmap
;
config
.
regmap
=
iodev
->
regmap
;
config
.
driver_data
=
max77686
;
platform_set_drvdata
(
pdev
,
max77686
);
platform_set_drvdata
(
pdev
,
max77686
);
for
(
i
=
0
;
i
<
MAX77686_REGULATORS
;
i
++
)
{
for
(
i
=
0
;
i
<
MAX77686_REGULATORS
;
i
++
)
{
config
.
init_data
=
pdata
->
regulators
[
i
].
initdata
;
config
.
init_data
=
pdata
->
regulators
[
i
].
initdata
;
config
.
of_node
=
pdata
->
regulators
[
i
].
of_node
;
config
.
of_node
=
pdata
->
regulators
[
i
].
of_node
;
max77686
->
opmode
[
i
]
=
regulators
[
i
].
enable_mask
;
max77686
->
rdev
[
i
]
=
regulator_register
(
&
regulators
[
i
],
&
config
);
max77686
->
rdev
[
i
]
=
regulator_register
(
&
regulators
[
i
],
&
config
);
if
(
IS_ERR
(
max77686
->
rdev
[
i
]))
{
if
(
IS_ERR
(
max77686
->
rdev
[
i
]))
{
ret
=
PTR_ERR
(
max77686
->
rdev
[
i
]);
ret
=
PTR_ERR
(
max77686
->
rdev
[
i
]);
...
...
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