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