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
fc221525
Commit
fc221525
authored
Feb 19, 2013
by
Mark Brown
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'regulator/topic/apply' into regulator-next
parents
0dbf165e
c6f0a0ef
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
39 additions
and
111 deletions
+39
-111
drivers/regulator/88pm8607.c
drivers/regulator/88pm8607.c
+6
-31
drivers/regulator/core.c
drivers/regulator/core.c
+11
-1
drivers/regulator/da9052-regulator.c
drivers/regulator/da9052-regulator.c
+6
-35
drivers/regulator/tps6586x-regulator.c
drivers/regulator/tps6586x-regulator.c
+10
-44
include/linux/regulator/driver.h
include/linux/regulator/driver.h
+6
-0
No files found.
drivers/regulator/88pm8607.c
View file @
fc221525
...
...
@@ -30,8 +30,6 @@ struct pm8607_regulator_info {
unsigned
int
*
vol_table
;
unsigned
int
*
vol_suspend
;
int
update_reg
;
int
update_bit
;
int
slope_double
;
};
...
...
@@ -222,29 +220,6 @@ static int pm8607_list_voltage(struct regulator_dev *rdev, unsigned index)
return
ret
;
}
static
int
pm8607_set_voltage_sel
(
struct
regulator_dev
*
rdev
,
unsigned
selector
)
{
struct
pm8607_regulator_info
*
info
=
rdev_get_drvdata
(
rdev
);
uint8_t
val
;
int
ret
;
val
=
(
uint8_t
)(
selector
<<
(
ffs
(
rdev
->
desc
->
vsel_mask
)
-
1
));
ret
=
pm860x_set_bits
(
info
->
i2c
,
rdev
->
desc
->
vsel_reg
,
rdev
->
desc
->
vsel_mask
,
val
);
if
(
ret
)
return
ret
;
switch
(
info
->
desc
.
id
)
{
case
PM8607_ID_BUCK1
:
case
PM8607_ID_BUCK3
:
ret
=
pm860x_set_bits
(
info
->
i2c
,
info
->
update_reg
,
1
<<
info
->
update_bit
,
1
<<
info
->
update_bit
);
break
;
}
return
ret
;
}
static
int
pm8606_preg_enable
(
struct
regulator_dev
*
rdev
)
{
struct
pm8607_regulator_info
*
info
=
rdev_get_drvdata
(
rdev
);
...
...
@@ -276,7 +251,7 @@ static int pm8606_preg_is_enabled(struct regulator_dev *rdev)
static
struct
regulator_ops
pm8607_regulator_ops
=
{
.
list_voltage
=
pm8607_list_voltage
,
.
set_voltage_sel
=
pm8607_set_voltage_sel
,
.
set_voltage_sel
=
regulator_set_voltage_sel_regmap
,
.
get_voltage_sel
=
regulator_get_voltage_sel_regmap
,
.
enable
=
regulator_enable_regmap
,
.
disable
=
regulator_disable_regmap
,
...
...
@@ -313,11 +288,11 @@ static struct regulator_ops pm8606_preg_ops = {
.n_voltages = ARRAY_SIZE(vreg##_table), \
.vsel_reg = PM8607_##vreg, \
.vsel_mask = ARRAY_SIZE(vreg##_table) - 1, \
.apply_reg = PM8607_##ureg, \
.apply_bit = (ubit), \
.enable_reg = PM8607_##ereg, \
.enable_mask = 1 << (ebit), \
}, \
.update_reg = PM8607_##ureg, \
.update_bit = (ubit), \
.slope_double = (0), \
.vol_table = (unsigned int *)&vreg##_table, \
.vol_suspend = (unsigned int *)&vreg##_suspend_table, \
...
...
@@ -343,9 +318,9 @@ static struct regulator_ops pm8606_preg_ops = {
}
static
struct
pm8607_regulator_info
pm8607_regulator_info
[]
=
{
PM8607_DVC
(
BUCK1
,
GO
,
0
,
SUPPLIES_EN11
,
0
),
PM8607_DVC
(
BUCK2
,
GO
,
1
,
SUPPLIES_EN11
,
1
),
PM8607_DVC
(
BUCK3
,
GO
,
2
,
SUPPLIES_EN11
,
2
),
PM8607_DVC
(
BUCK1
,
GO
,
BIT
(
0
)
,
SUPPLIES_EN11
,
0
),
PM8607_DVC
(
BUCK2
,
GO
,
BIT
(
1
)
,
SUPPLIES_EN11
,
1
),
PM8607_DVC
(
BUCK3
,
GO
,
BIT
(
2
)
,
SUPPLIES_EN11
,
2
),
PM8607_LDO
(
1
,
LDO1
,
0
,
SUPPLIES_EN11
,
3
),
PM8607_LDO
(
2
,
LDO2
,
0
,
SUPPLIES_EN11
,
4
),
...
...
drivers/regulator/core.c
View file @
fc221525
...
...
@@ -2080,10 +2080,20 @@ EXPORT_SYMBOL_GPL(regulator_get_voltage_sel_regmap);
*/
int
regulator_set_voltage_sel_regmap
(
struct
regulator_dev
*
rdev
,
unsigned
sel
)
{
int
ret
;
sel
<<=
ffs
(
rdev
->
desc
->
vsel_mask
)
-
1
;
ret
urn
regmap_update_bits
(
rdev
->
regmap
,
rdev
->
desc
->
vsel_reg
,
ret
=
regmap_update_bits
(
rdev
->
regmap
,
rdev
->
desc
->
vsel_reg
,
rdev
->
desc
->
vsel_mask
,
sel
);
if
(
ret
)
return
ret
;
if
(
rdev
->
desc
->
apply_bit
)
ret
=
regmap_update_bits
(
rdev
->
regmap
,
rdev
->
desc
->
apply_reg
,
rdev
->
desc
->
apply_bit
,
rdev
->
desc
->
apply_bit
);
return
ret
;
}
EXPORT_SYMBOL_GPL
(
regulator_set_voltage_sel_regmap
);
...
...
drivers/regulator/da9052-regulator.c
View file @
fc221525
...
...
@@ -70,7 +70,6 @@ struct da9052_regulator_info {
int
step_uV
;
int
min_uV
;
int
max_uV
;
unsigned
char
activate_bit
;
};
struct
da9052_regulator
{
...
...
@@ -210,36 +209,6 @@ static int da9052_map_voltage(struct regulator_dev *rdev,
return
sel
;
}
static
int
da9052_regulator_set_voltage_sel
(
struct
regulator_dev
*
rdev
,
unsigned
int
selector
)
{
struct
da9052_regulator
*
regulator
=
rdev_get_drvdata
(
rdev
);
struct
da9052_regulator_info
*
info
=
regulator
->
info
;
int
id
=
rdev_get_id
(
rdev
);
int
ret
;
ret
=
da9052_reg_update
(
regulator
->
da9052
,
rdev
->
desc
->
vsel_reg
,
rdev
->
desc
->
vsel_mask
,
selector
);
if
(
ret
<
0
)
return
ret
;
/* Some LDOs and DCDCs are DVC controlled which requires enabling of
* the activate bit to implment the changes on the output.
*/
switch
(
id
)
{
case
DA9052_ID_BUCK1
:
case
DA9052_ID_BUCK2
:
case
DA9052_ID_BUCK3
:
case
DA9052_ID_LDO2
:
case
DA9052_ID_LDO3
:
ret
=
da9052_reg_update
(
regulator
->
da9052
,
DA9052_SUPPLY_REG
,
info
->
activate_bit
,
info
->
activate_bit
);
break
;
}
return
ret
;
}
static
struct
regulator_ops
da9052_dcdc_ops
=
{
.
get_current_limit
=
da9052_dcdc_get_current_limit
,
.
set_current_limit
=
da9052_dcdc_set_current_limit
,
...
...
@@ -247,7 +216,7 @@ static struct regulator_ops da9052_dcdc_ops = {
.
list_voltage
=
da9052_list_voltage
,
.
map_voltage
=
da9052_map_voltage
,
.
get_voltage_sel
=
regulator_get_voltage_sel_regmap
,
.
set_voltage_sel
=
da9052_regulator_set_voltage_sel
,
.
set_voltage_sel
=
regulator_set_voltage_sel_regmap
,
.
is_enabled
=
regulator_is_enabled_regmap
,
.
enable
=
regulator_enable_regmap
,
.
disable
=
regulator_disable_regmap
,
...
...
@@ -257,7 +226,7 @@ static struct regulator_ops da9052_ldo_ops = {
.
list_voltage
=
da9052_list_voltage
,
.
map_voltage
=
da9052_map_voltage
,
.
get_voltage_sel
=
regulator_get_voltage_sel_regmap
,
.
set_voltage_sel
=
da9052_regulator_set_voltage_sel
,
.
set_voltage_sel
=
regulator_set_voltage_sel_regmap
,
.
is_enabled
=
regulator_is_enabled_regmap
,
.
enable
=
regulator_enable_regmap
,
.
disable
=
regulator_disable_regmap
,
...
...
@@ -274,13 +243,14 @@ static struct regulator_ops da9052_ldo_ops = {
.owner = THIS_MODULE,\
.vsel_reg = DA9052_BUCKCORE_REG + DA9052_ID_##_id, \
.vsel_mask = (1 << (sbits)) - 1,\
.apply_reg = DA9052_SUPPLY_REG, \
.apply_bit = (abits), \
.enable_reg = DA9052_BUCKCORE_REG + DA9052_ID_##_id, \
.enable_mask = 1 << (ebits),\
},\
.min_uV = (min) * 1000,\
.max_uV = (max) * 1000,\
.step_uV = (step) * 1000,\
.activate_bit = (abits),\
}
#define DA9052_DCDC(_id, step, min, max, sbits, ebits, abits) \
...
...
@@ -294,13 +264,14 @@ static struct regulator_ops da9052_ldo_ops = {
.owner = THIS_MODULE,\
.vsel_reg = DA9052_BUCKCORE_REG + DA9052_ID_##_id, \
.vsel_mask = (1 << (sbits)) - 1,\
.apply_reg = DA9052_SUPPLY_REG, \
.apply_bit = (abits), \
.enable_reg = DA9052_BUCKCORE_REG + DA9052_ID_##_id, \
.enable_mask = 1 << (ebits),\
},\
.min_uV = (min) * 1000,\
.max_uV = (max) * 1000,\
.step_uV = (step) * 1000,\
.activate_bit = (abits),\
}
static
struct
da9052_regulator_info
da9052_regulator_info
[]
=
{
...
...
drivers/regulator/tps6586x-regulator.c
View file @
fc221525
...
...
@@ -61,10 +61,6 @@ struct tps6586x_regulator {
int
enable_bit
[
2
];
int
enable_reg
[
2
];
/* for DVM regulators */
int
go_reg
;
int
go_bit
;
};
static
inline
struct
device
*
to_tps6586x_dev
(
struct
regulator_dev
*
rdev
)
...
...
@@ -72,37 +68,10 @@ static inline struct device *to_tps6586x_dev(struct regulator_dev *rdev)
return
rdev_get_dev
(
rdev
)
->
parent
;
}
static
int
tps6586x_set_voltage_sel
(
struct
regulator_dev
*
rdev
,
unsigned
selector
)
{
struct
tps6586x_regulator
*
ri
=
rdev_get_drvdata
(
rdev
);
struct
device
*
parent
=
to_tps6586x_dev
(
rdev
);
int
ret
,
val
,
rid
=
rdev_get_id
(
rdev
);
uint8_t
mask
;
val
=
selector
<<
(
ffs
(
rdev
->
desc
->
vsel_mask
)
-
1
);
mask
=
rdev
->
desc
->
vsel_mask
;
ret
=
tps6586x_update
(
parent
,
rdev
->
desc
->
vsel_reg
,
val
,
mask
);
if
(
ret
)
return
ret
;
/* Update go bit for DVM regulators */
switch
(
rid
)
{
case
TPS6586X_ID_LDO_2
:
case
TPS6586X_ID_LDO_4
:
case
TPS6586X_ID_SM_0
:
case
TPS6586X_ID_SM_1
:
ret
=
tps6586x_set_bits
(
parent
,
ri
->
go_reg
,
1
<<
ri
->
go_bit
);
break
;
}
return
ret
;
}
static
struct
regulator_ops
tps6586x_regulator_ops
=
{
.
list_voltage
=
regulator_list_voltage_table
,
.
get_voltage_sel
=
regulator_get_voltage_sel_regmap
,
.
set_voltage_sel
=
tps6586x_set_voltage_sel
,
.
set_voltage_sel
=
regulator_set_voltage_sel_regmap
,
.
is_enabled
=
regulator_is_enabled_regmap
,
.
enable
=
regulator_enable_regmap
,
...
...
@@ -142,7 +111,7 @@ static const unsigned int tps6586x_dvm_voltages[] = {
};
#define TPS6586X_REGULATOR(_id, _pin_name, vdata, vreg, shift, nbits, \
ereg0, ebit0, ereg1, ebit1
)
\
ereg0, ebit0, ereg1, ebit1
, goreg, gobit)
\
.desc = { \
.supply_name = _pin_name, \
.name = "REG-" #_id, \
...
...
@@ -156,29 +125,26 @@ static const unsigned int tps6586x_dvm_voltages[] = {
.enable_mask = 1 << (ebit0), \
.vsel_reg = TPS6586X_##vreg, \
.vsel_mask = ((1 << (nbits)) - 1) << (shift), \
.apply_reg = (goreg), \
.apply_bit = (gobit), \
}, \
.enable_reg[0] = TPS6586X_SUPPLY##ereg0, \
.enable_bit[0] = (ebit0), \
.enable_reg[1] = TPS6586X_SUPPLY##ereg1, \
.enable_bit[1] = (ebit1),
#define TPS6586X_REGULATOR_DVM_GOREG(goreg, gobit) \
.go_reg = TPS6586X_##goreg, \
.go_bit = (gobit),
#define TPS6586X_LDO(_id, _pname, vdata, vreg, shift, nbits, \
ereg0, ebit0, ereg1, ebit1) \
{ \
TPS6586X_REGULATOR(_id, _pname, vdata, vreg, shift, nbits, \
ereg0, ebit0, ereg1, ebit1
)
\
ereg0, ebit0, ereg1, ebit1
, 0, 0)
\
}
#define TPS6586X_DVM(_id, _pname, vdata, vreg, shift, nbits, \
ereg0, ebit0, ereg1, ebit1, goreg, gobit) \
{ \
TPS6586X_REGULATOR(_id, _pname, vdata, vreg, shift, nbits, \
ereg0, ebit0, ereg1, ebit1) \
TPS6586X_REGULATOR_DVM_GOREG(goreg, gobit) \
ereg0, ebit0, ereg1, ebit1, goreg, gobit) \
}
#define TPS6586X_SYS_REGULATOR() \
...
...
@@ -207,13 +173,13 @@ static struct tps6586x_regulator tps6586x_regulator[] = {
TPS6586X_LDO
(
SM_2
,
"vin-sm2"
,
sm2
,
SUPPLYV2
,
0
,
5
,
ENC
,
7
,
END
,
7
),
TPS6586X_DVM
(
LDO_2
,
"vinldo23"
,
dvm
,
LDO2BV1
,
0
,
5
,
ENA
,
3
,
ENB
,
3
,
VCC2
,
6
),
ENB
,
3
,
TPS6586X_VCC2
,
BIT
(
6
)
),
TPS6586X_DVM
(
LDO_4
,
"vinldo4"
,
ldo4
,
LDO4V1
,
0
,
5
,
ENC
,
3
,
END
,
3
,
VCC1
,
6
),
END
,
3
,
TPS6586X_VCC1
,
BIT
(
6
)
),
TPS6586X_DVM
(
SM_0
,
"vin-sm0"
,
dvm
,
SM0V1
,
0
,
5
,
ENA
,
1
,
ENB
,
1
,
VCC1
,
2
),
ENB
,
1
,
TPS6586X_VCC1
,
BIT
(
2
)
),
TPS6586X_DVM
(
SM_1
,
"vin-sm1"
,
dvm
,
SM1V1
,
0
,
5
,
ENA
,
0
,
ENB
,
0
,
VCC1
,
0
),
ENB
,
0
,
TPS6586X_VCC1
,
BIT
(
0
)
),
};
/*
...
...
include/linux/regulator/driver.h
View file @
fc221525
...
...
@@ -193,6 +193,10 @@ enum regulator_type {
*
* @vsel_reg: Register for selector when using regulator_regmap_X_voltage_
* @vsel_mask: Mask for register bitfield used for selector
* @apply_reg: Register for initiate voltage change on the output when
* using regulator_set_voltage_sel_regmap
* @apply_bit: Register bitfield used for initiate voltage change on the
* output when using regulator_set_voltage_sel_regmap
* @enable_reg: Register for control when using regmap enable/disable ops
* @enable_mask: Mask for control when using regmap enable/disable ops
*
...
...
@@ -218,6 +222,8 @@ struct regulator_desc {
unsigned
int
vsel_reg
;
unsigned
int
vsel_mask
;
unsigned
int
apply_reg
;
unsigned
int
apply_bit
;
unsigned
int
enable_reg
;
unsigned
int
enable_mask
;
unsigned
int
bypass_reg
;
...
...
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