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
a21da94f
Commit
a21da94f
authored
Nov 22, 2019
by
Mark Brown
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'regulator-5.5' into regulator-next
parents
c642e870
c15d5a64
Changes
40
Hide whitespace changes
Inline
Side-by-side
Showing
40 changed files
with
566 additions
and
226 deletions
+566
-226
Documentation/devicetree/bindings/mfd/da9062.txt
Documentation/devicetree/bindings/mfd/da9062.txt
+4
-0
Documentation/devicetree/bindings/regulator/fixed-regulator.yaml
...tation/devicetree/bindings/regulator/fixed-regulator.yaml
+4
-0
Documentation/devicetree/bindings/regulator/qcom,rpmh-regulator.txt
...ion/devicetree/bindings/regulator/qcom,rpmh-regulator.txt
+4
-0
Documentation/devicetree/bindings/regulator/qcom,smd-rpm-regulator.txt
.../devicetree/bindings/regulator/qcom,smd-rpm-regulator.txt
+21
-0
Documentation/devicetree/bindings/regulator/qcom,spmi-regulator.txt
...ion/devicetree/bindings/regulator/qcom,spmi-regulator.txt
+25
-0
Documentation/devicetree/bindings/regulator/regulator.yaml
Documentation/devicetree/bindings/regulator/regulator.yaml
+6
-1
drivers/gpio/gpiolib-devres.c
drivers/gpio/gpiolib-devres.c
+9
-24
drivers/gpio/gpiolib.c
drivers/gpio/gpiolib.c
+48
-0
drivers/mfd/tps6105x.c
drivers/mfd/tps6105x.c
+31
-3
drivers/regulator/Kconfig
drivers/regulator/Kconfig
+4
-4
drivers/regulator/ab8500.c
drivers/regulator/ab8500.c
+0
-17
drivers/regulator/bd718x7-regulator.c
drivers/regulator/bd718x7-regulator.c
+1
-0
drivers/regulator/core.c
drivers/regulator/core.c
+9
-1
drivers/regulator/da9062-regulator.c
drivers/regulator/da9062-regulator.c
+35
-28
drivers/regulator/da9063-regulator.c
drivers/regulator/da9063-regulator.c
+3
-6
drivers/regulator/da9211-regulator.c
drivers/regulator/da9211-regulator.c
+6
-6
drivers/regulator/fan53555.c
drivers/regulator/fan53555.c
+2
-0
drivers/regulator/fixed.c
drivers/regulator/fixed.c
+2
-0
drivers/regulator/max77686-regulator.c
drivers/regulator/max77686-regulator.c
+3
-2
drivers/regulator/max8907-regulator.c
drivers/regulator/max8907-regulator.c
+12
-3
drivers/regulator/pbias-regulator.c
drivers/regulator/pbias-regulator.c
+28
-47
drivers/regulator/pcap-regulator.c
drivers/regulator/pcap-regulator.c
+0
-4
drivers/regulator/qcom-rpmh-regulator.c
drivers/regulator/qcom-rpmh-regulator.c
+61
-1
drivers/regulator/qcom_smd-regulator.c
drivers/regulator/qcom_smd-regulator.c
+92
-0
drivers/regulator/qcom_spmi-regulator.c
drivers/regulator/qcom_spmi-regulator.c
+41
-0
drivers/regulator/rk808-regulator.c
drivers/regulator/rk808-regulator.c
+7
-22
drivers/regulator/s2mps11.c
drivers/regulator/s2mps11.c
+3
-4
drivers/regulator/s5m8767.c
drivers/regulator/s5m8767.c
+3
-4
drivers/regulator/slg51000-regulator.c
drivers/regulator/slg51000-regulator.c
+5
-8
drivers/regulator/stm32-vrefbuf.c
drivers/regulator/stm32-vrefbuf.c
+1
-3
drivers/regulator/stpmic1_regulator.c
drivers/regulator/stpmic1_regulator.c
+6
-0
drivers/regulator/tps6105x-regulator.c
drivers/regulator/tps6105x-regulator.c
+2
-0
drivers/regulator/tps65090-regulator.c
drivers/regulator/tps65090-regulator.c
+15
-11
drivers/regulator/tps65132-regulator.c
drivers/regulator/tps65132-regulator.c
+10
-7
drivers/regulator/uniphier-regulator.c
drivers/regulator/uniphier-regulator.c
+1
-3
drivers/regulator/vexpress-regulator.c
drivers/regulator/vexpress-regulator.c
+1
-4
include/dt-bindings/regulator/dlg,da9063-regulator.h
include/dt-bindings/regulator/dlg,da9063-regulator.h
+16
-0
include/linux/gpio/consumer.h
include/linux/gpio/consumer.h
+44
-10
include/linux/regulator/ab8500.h
include/linux/regulator/ab8500.h
+0
-3
include/linux/regulator/fixed.h
include/linux/regulator/fixed.h
+1
-0
No files found.
Documentation/devicetree/bindings/mfd/da9062.txt
View file @
a21da94f
...
...
@@ -66,6 +66,9 @@ Sub-nodes:
details of individual regulator device can be found in:
Documentation/devicetree/bindings/regulator/regulator.txt
regulator-initial-mode may be specified for buck regulators using mode values
from include/dt-bindings/regulator/dlg,da9063-regulator.h.
- rtc : This node defines settings required for the Real-Time Clock associated
with the DA9062. There are currently no entries in this binding, however
compatible = "dlg,da9062-rtc" should be added if a node is created.
...
...
@@ -96,6 +99,7 @@ Example:
regulator-max-microvolt = <1570000>;
regulator-min-microamp = <500000>;
regulator-max-microamp = <2000000>;
regulator-initial-mode = <DA9063_BUCK_MODE_SYNC>;
regulator-boot-on;
};
DA9062_LDO1: ldo1 {
...
...
Documentation/devicetree/bindings/regulator/fixed-regulator.yaml
View file @
a21da94f
...
...
@@ -50,6 +50,10 @@ properties:
description
:
startup time in microseconds
$ref
:
/schemas/types.yaml#/definitions/uint32
off-on-delay-us
:
description
:
off delay time in microseconds
$ref
:
/schemas/types.yaml#/definitions/uint32
enable-active-high
:
description
:
Polarity of GPIO is Active high. If this property is missing,
...
...
Documentation/devicetree/bindings/regulator/qcom,rpmh-regulator.txt
View file @
a21da94f
...
...
@@ -28,6 +28,8 @@ Supported regulator node names:
PM8150L: smps1 - smps8, ldo1 - ldo11, bob, flash, rgb
PM8998: smps1 - smps13, ldo1 - ldo28, lvs1 - lvs2
PMI8998: bob
PM6150: smps1 - smps5, ldo1 - ldo19
PM6150L: smps1 - smps8, ldo1 - ldo11, bob
========================
First Level Nodes - PMIC
...
...
@@ -43,6 +45,8 @@ First Level Nodes - PMIC
"qcom,pm8150l-rpmh-regulators"
"qcom,pm8998-rpmh-regulators"
"qcom,pmi8998-rpmh-regulators"
"qcom,pm6150-rpmh-regulators"
"qcom,pm6150l-rpmh-regulators"
- qcom,pmic-id
Usage: required
...
...
Documentation/devicetree/bindings/regulator/qcom,smd-rpm-regulator.txt
View file @
a21da94f
...
...
@@ -22,6 +22,7 @@ Regulator nodes are identified by their compatible:
"qcom,rpm-pm8841-regulators"
"qcom,rpm-pm8916-regulators"
"qcom,rpm-pm8941-regulators"
"qcom,rpm-pm8950-regulators"
"qcom,rpm-pm8994-regulators"
"qcom,rpm-pm8998-regulators"
"qcom,rpm-pma8084-regulators"
...
...
@@ -54,6 +55,26 @@ Regulator nodes are identified by their compatible:
Definition: reference to regulator supplying the input pin, as
described in the data sheet
- vdd_s1-supply:
- vdd_s2-supply:
- vdd_s3-supply:
- vdd_s4-supply:
- vdd_s4-supply:
- vdd_s5-supply:
- vdd_s6-supply:
- vdd_l1_l19-supply:
- vdd_l2_l23-supply:
- vdd_l3-supply:
- vdd_l4_l5_l6_l7_l16-supply:
- vdd_l8_l11_l12_l17_l22-supply:
- vdd_l9_l10_l13_l14_l15_l18-supply:
- vdd_l20-supply:
- vdd_l21-supply:
Usage: optional (pm8950 only)
Value type: <phandle>
Definition: reference to regulator supplying the input pin, as
described in the data sheet
- vdd_s1-supply:
- vdd_s2-supply:
- vdd_s3-supply:
...
...
Documentation/devicetree/bindings/regulator/qcom,spmi-regulator.txt
View file @
a21da94f
...
...
@@ -4,10 +4,12 @@ Qualcomm SPMI Regulators
Usage: required
Value type: <string>
Definition: must be one of:
"qcom,pm8004-regulators"
"qcom,pm8005-regulators"
"qcom,pm8841-regulators"
"qcom,pm8916-regulators"
"qcom,pm8941-regulators"
"qcom,pm8950-regulators"
"qcom,pm8994-regulators"
"qcom,pmi8994-regulators"
"qcom,pms405-regulators"
...
...
@@ -72,6 +74,26 @@ Qualcomm SPMI Regulators
Definition: Reference to regulator supplying the input pin, as
described in the data sheet.
- vdd_s1-supply:
- vdd_s2-supply:
- vdd_s3-supply:
- vdd_s4-supply:
- vdd_s4-supply:
- vdd_s5-supply:
- vdd_s6-supply:
- vdd_l1_l19-supply:
- vdd_l2_l23-supply:
- vdd_l3-supply:
- vdd_l4_l5_l6_l7_l16-supply:
- vdd_l8_l11_l12_l17_l22-supply:
- vdd_l9_l10_l13_l14_l15_l18-supply:
- vdd_l20-supply:
- vdd_l21-supply:
Usage: optional (pm8950 only)
Value type: <phandle>
Definition: reference to regulator supplying the input pin, as
described in the data sheet
- vdd_s1-supply:
- vdd_s2-supply:
- vdd_s3-supply:
...
...
@@ -139,6 +161,9 @@ The regulator node houses sub-nodes for each regulator within the device. Each
sub-node is identified using the node's name, with valid values listed for each
of the PMICs below.
pm8005:
s2, s5
pm8005:
s1, s2, s3, s4
...
...
Documentation/devicetree/bindings/regulator/regulator.yaml
View file @
a21da94f
...
...
@@ -38,7 +38,12 @@ properties:
type
:
boolean
regulator-boot-on
:
description
:
bootloader/firmware enabled regulator
description
:
bootloader/firmware enabled regulator.
It's expected that this regulator was left on by the bootloader.
If the bootloader didn't leave it on then OS should turn it on
at boot but shouldn't prevent it from being turned off later.
This property is intended to only be used for regulators where
software cannot read the state of the regulator.
type
:
boolean
regulator-allow-bypass
:
...
...
drivers/gpio/gpiolib-devres.c
View file @
a21da94f
...
...
@@ -185,12 +185,11 @@ struct gpio_desc *devm_gpiod_get_from_of_node(struct device *dev,
EXPORT_SYMBOL_GPL
(
devm_gpiod_get_from_of_node
);
/**
* devm_fwnode_get_index_gpiod_from_child - get a GPIO descriptor from a
* device's child node
* devm_fwnode_gpiod_get_index - get a GPIO descriptor from a given node
* @dev: GPIO consumer
* @fwnode: firmware node containing GPIO reference
* @con_id: function within the GPIO consumer
* @index: index of the GPIO to obtain in the consumer
* @child: firmware node (child of @dev)
* @flags: GPIO initialization flags
* @label: label to attach to the requested GPIO
*
...
...
@@ -200,35 +199,21 @@ EXPORT_SYMBOL_GPL(devm_gpiod_get_from_of_node);
* On successful request the GPIO pin is configured in accordance with
* provided @flags.
*/
struct
gpio_desc
*
devm_fwnode_g
et_index_gpiod_from_child
(
struct
device
*
dev
,
const
char
*
con_id
,
int
index
,
struct
fwnode_handle
*
child
,
enum
gpiod_flags
flags
,
const
char
*
label
)
struct
gpio_desc
*
devm_fwnode_g
piod_get_index
(
struct
device
*
dev
,
struct
fwnode_handle
*
fwnode
,
const
char
*
con_id
,
int
index
,
enum
gpiod_flags
flags
,
const
char
*
label
)
{
char
prop_name
[
32
];
/* 32 is max size of property name */
struct
gpio_desc
**
dr
;
struct
gpio_desc
*
desc
;
unsigned
int
i
;
dr
=
devres_alloc
(
devm_gpiod_release
,
sizeof
(
struct
gpio_desc
*
),
GFP_KERNEL
);
if
(
!
dr
)
return
ERR_PTR
(
-
ENOMEM
);
for
(
i
=
0
;
i
<
ARRAY_SIZE
(
gpio_suffixes
);
i
++
)
{
if
(
con_id
)
snprintf
(
prop_name
,
sizeof
(
prop_name
),
"%s-%s"
,
con_id
,
gpio_suffixes
[
i
]);
else
snprintf
(
prop_name
,
sizeof
(
prop_name
),
"%s"
,
gpio_suffixes
[
i
]);
desc
=
fwnode_get_named_gpiod
(
child
,
prop_name
,
index
,
flags
,
label
);
if
(
!
IS_ERR
(
desc
)
||
(
PTR_ERR
(
desc
)
!=
-
ENOENT
))
break
;
}
desc
=
fwnode_gpiod_get_index
(
fwnode
,
con_id
,
index
,
flags
,
label
);
if
(
IS_ERR
(
desc
))
{
devres_free
(
dr
);
return
desc
;
...
...
@@ -239,7 +224,7 @@ struct gpio_desc *devm_fwnode_get_index_gpiod_from_child(struct device *dev,
return
desc
;
}
EXPORT_SYMBOL_GPL
(
devm_fwnode_g
et_index_gpiod_from_child
);
EXPORT_SYMBOL_GPL
(
devm_fwnode_g
piod_get_index
);
/**
* devm_gpiod_get_index_optional - Resource-managed gpiod_get_index_optional()
...
...
drivers/gpio/gpiolib.c
View file @
a21da94f
...
...
@@ -4355,6 +4355,54 @@ static int platform_gpio_count(struct device *dev, const char *con_id)
return
count
;
}
/**
* fwnode_gpiod_get_index - obtain a GPIO from firmware node
* @fwnode: handle of the firmware node
* @con_id: function within the GPIO consumer
* @index: index of the GPIO to obtain for the consumer
* @flags: GPIO initialization flags
* @label: label to attach to the requested GPIO
*
* This function can be used for drivers that get their configuration
* from opaque firmware.
*
* The function properly finds the corresponding GPIO using whatever is the
* underlying firmware interface and then makes sure that the GPIO
* descriptor is requested before it is returned to the caller.
*
* Returns:
* On successful request the GPIO pin is configured in accordance with
* provided @flags.
*
* In case of error an ERR_PTR() is returned.
*/
struct
gpio_desc
*
fwnode_gpiod_get_index
(
struct
fwnode_handle
*
fwnode
,
const
char
*
con_id
,
int
index
,
enum
gpiod_flags
flags
,
const
char
*
label
)
{
struct
gpio_desc
*
desc
;
char
prop_name
[
32
];
/* 32 is max size of property name */
unsigned
int
i
;
for
(
i
=
0
;
i
<
ARRAY_SIZE
(
gpio_suffixes
);
i
++
)
{
if
(
con_id
)
snprintf
(
prop_name
,
sizeof
(
prop_name
),
"%s-%s"
,
con_id
,
gpio_suffixes
[
i
]);
else
snprintf
(
prop_name
,
sizeof
(
prop_name
),
"%s"
,
gpio_suffixes
[
i
]);
desc
=
fwnode_get_named_gpiod
(
fwnode
,
prop_name
,
index
,
flags
,
label
);
if
(
!
IS_ERR
(
desc
)
||
(
PTR_ERR
(
desc
)
!=
-
ENOENT
))
break
;
}
return
desc
;
}
EXPORT_SYMBOL_GPL
(
fwnode_gpiod_get_index
);
/**
* gpiod_count - return the number of GPIOs associated with a device / function
* or -ENOENT if no GPIO has been assigned to the requested function
...
...
drivers/mfd/tps6105x.c
View file @
a21da94f
...
...
@@ -91,6 +91,32 @@ static int tps6105x_add_device(struct tps6105x *tps6105x,
PLATFORM_DEVID_AUTO
,
cell
,
1
,
NULL
,
0
,
NULL
);
}
static
struct
tps6105x_platform_data
*
tps6105x_parse_dt
(
struct
device
*
dev
)
{
struct
device_node
*
np
=
dev
->
of_node
;
struct
tps6105x_platform_data
*
pdata
;
struct
device_node
*
child
;
if
(
!
np
)
return
ERR_PTR
(
-
EINVAL
);
if
(
of_get_available_child_count
(
np
)
>
1
)
{
dev_err
(
dev
,
"cannot support multiple operational modes"
);
return
ERR_PTR
(
-
EINVAL
);
}
pdata
=
devm_kzalloc
(
dev
,
sizeof
(
*
pdata
),
GFP_KERNEL
);
if
(
!
pdata
)
return
ERR_PTR
(
-
ENOMEM
);
pdata
->
mode
=
TPS6105X_MODE_SHUTDOWN
;
for_each_available_child_of_node
(
np
,
child
)
{
if
(
child
->
name
&&
!
of_node_cmp
(
child
->
name
,
"regulator"
))
pdata
->
mode
=
TPS6105X_MODE_VOLTAGE
;
else
if
(
child
->
name
&&
!
of_node_cmp
(
child
->
name
,
"led"
))
pdata
->
mode
=
TPS6105X_MODE_TORCH
;
}
return
pdata
;
}
static
int
tps6105x_probe
(
struct
i2c_client
*
client
,
const
struct
i2c_device_id
*
id
)
{
...
...
@@ -99,9 +125,11 @@ static int tps6105x_probe(struct i2c_client *client,
int
ret
;
pdata
=
dev_get_platdata
(
&
client
->
dev
);
if
(
!
pdata
)
{
dev_err
(
&
client
->
dev
,
"missing platform data
\n
"
);
return
-
ENODEV
;
if
(
!
pdata
)
pdata
=
tps6105x_parse_dt
(
&
client
->
dev
);
if
(
IS_ERR
(
pdata
))
{
dev_err
(
&
client
->
dev
,
"No platform data or DT found"
);
return
PTR_ERR
(
pdata
);
}
tps6105x
=
devm_kmalloc
(
&
client
->
dev
,
sizeof
(
*
tps6105x
),
GFP_KERNEL
);
...
...
drivers/regulator/Kconfig
View file @
a21da94f
...
...
@@ -841,10 +841,10 @@ config REGULATOR_SKY81452
will be called sky81452-regulator.
config REGULATOR_SLG51000
tristate "Dialog Semiconductor SLG51000 regulators"
depends on I2C
select REGMAP_I2C
help
tristate "Dialog Semiconductor SLG51000 regulators"
depends on I2C
select REGMAP_I2C
help
Say y here to support for the Dialog Semiconductor SLG51000.
The SLG51000 is seven compact and customizable low dropout
regulators.
...
...
drivers/regulator/ab8500.c
View file @
a21da94f
...
...
@@ -953,23 +953,6 @@ static struct ab8500_regulator_info
.
update_val_idle
=
0x82
,
.
update_val_normal
=
0x02
,
},
[
AB8505_LDO_USB
]
=
{
.
desc
=
{
.
name
=
"LDO-USB"
,
.
ops
=
&
ab8500_regulator_mode_ops
,
.
type
=
REGULATOR_VOLTAGE
,
.
id
=
AB8505_LDO_USB
,
.
owner
=
THIS_MODULE
,
.
n_voltages
=
1
,
.
volt_table
=
fixed_3300000_voltage
,
},
.
update_bank
=
0x03
,
.
update_reg
=
0x82
,
.
update_mask
=
0x03
,
.
update_val
=
0x01
,
.
update_val_idle
=
0x03
,
.
update_val_normal
=
0x01
,
},
[
AB8505_LDO_AUDIO
]
=
{
.
desc
=
{
.
name
=
"LDO-AUDIO"
,
...
...
drivers/regulator/bd718x7-regulator.c
View file @
a21da94f
...
...
@@ -1293,3 +1293,4 @@ module_platform_driver(bd718xx_regulator);
MODULE_AUTHOR
(
"Matti Vaittinen <matti.vaittinen@fi.rohmeurope.com>"
);
MODULE_DESCRIPTION
(
"BD71837/BD71847 voltage regulator driver"
);
MODULE_LICENSE
(
"GPL"
);
MODULE_ALIAS
(
"platform:bd718xx-pmic"
);
drivers/regulator/core.c
View file @
a21da94f
...
...
@@ -1403,7 +1403,9 @@ static int set_machine_constraints(struct regulator_dev *rdev,
rdev_err
(
rdev
,
"failed to enable
\n
"
);
return
ret
;
}
rdev
->
use_count
++
;
if
(
rdev
->
constraints
->
always_on
)
rdev
->
use_count
++
;
}
print_constraints
(
rdev
);
...
...
@@ -4967,6 +4969,12 @@ static int generic_coupler_attach(struct regulator_coupler *coupler,
return
-
EPERM
;
}
if
(
!
rdev
->
constraints
->
always_on
)
{
rdev_err
(
rdev
,
"Coupling of a non always-on regulator is unimplemented
\n
"
);
return
-
ENOTSUPP
;
}
return
0
;
}
...
...
drivers/regulator/da9062-regulator.c
View file @
a21da94f
...
...
@@ -16,6 +16,7 @@
#include <linux/regulator/of_regulator.h>
#include <linux/mfd/da9062/core.h>
#include <linux/mfd/da9062/registers.h>
#include <dt-bindings/regulator/dlg,da9063-regulator.h>
/* Regulator IDs */
enum
{
...
...
@@ -75,14 +76,6 @@ struct da9062_regulators {
struct
da9062_regulator
regulator
[
0
];
};
/* BUCK modes */
enum
{
BUCK_MODE_MANUAL
,
/* 0 */
BUCK_MODE_SLEEP
,
/* 1 */
BUCK_MODE_SYNC
,
/* 2 */
BUCK_MODE_AUTO
/* 3 */
};
/* Regulator operations */
/* Current limits array (in uA)
...
...
@@ -105,6 +98,20 @@ static const unsigned int da9062_buck_b_limits[] = {
2300000
,
2400000
,
2500000
,
2600000
,
2700000
,
2800000
,
2900000
,
3000000
};
static
unsigned
int
da9062_map_buck_mode
(
unsigned
int
mode
)
{
switch
(
mode
)
{
case
DA9063_BUCK_MODE_SLEEP
:
return
REGULATOR_MODE_STANDBY
;
case
DA9063_BUCK_MODE_SYNC
:
return
REGULATOR_MODE_FAST
;
case
DA9063_BUCK_MODE_AUTO
:
return
REGULATOR_MODE_NORMAL
;
default:
return
REGULATOR_MODE_INVALID
;
}
}
static
int
da9062_buck_set_mode
(
struct
regulator_dev
*
rdev
,
unsigned
mode
)
{
struct
da9062_regulator
*
regl
=
rdev_get_drvdata
(
rdev
);
...
...
@@ -112,13 +119,13 @@ static int da9062_buck_set_mode(struct regulator_dev *rdev, unsigned mode)
switch
(
mode
)
{
case
REGULATOR_MODE_FAST
:
val
=
BUCK_MODE_SYNC
;
val
=
DA9063_
BUCK_MODE_SYNC
;
break
;
case
REGULATOR_MODE_NORMAL
:
val
=
BUCK_MODE_AUTO
;
val
=
DA9063_
BUCK_MODE_AUTO
;
break
;
case
REGULATOR_MODE_STANDBY
:
val
=
BUCK_MODE_SLEEP
;
val
=
DA9063_
BUCK_MODE_SLEEP
;
break
;
default:
return
-
EINVAL
;
...
...
@@ -136,7 +143,7 @@ static int da9062_buck_set_mode(struct regulator_dev *rdev, unsigned mode)
static
unsigned
da9062_buck_get_mode
(
struct
regulator_dev
*
rdev
)
{
struct
da9062_regulator
*
regl
=
rdev_get_drvdata
(
rdev
);
unsigned
int
val
,
mode
=
0
;
unsigned
int
val
;
int
ret
;
ret
=
regmap_field_read
(
regl
->
mode
,
&
val
);
...
...
@@ -145,15 +152,13 @@ static unsigned da9062_buck_get_mode(struct regulator_dev *rdev)
switch
(
val
)
{
default:
case
BUCK_MODE_MANUAL
:
mode
=
REGULATOR_MODE_FAST
|
REGULATOR_MODE_STANDBY
;
/* Sleep flag bit decides the mode */
break
;
case
BUCK_MODE_SLEEP
:
case
DA9063_
BUCK_MODE_SLEEP
:
return
REGULATOR_MODE_STANDBY
;
case
BUCK_MODE_SYNC
:
case
DA9063_
BUCK_MODE_SYNC
:
return
REGULATOR_MODE_FAST
;
case
BUCK_MODE_AUTO
:
case
DA9063_
BUCK_MODE_AUTO
:
return
REGULATOR_MODE_NORMAL
;
}
...
...
@@ -162,11 +167,9 @@ static unsigned da9062_buck_get_mode(struct regulator_dev *rdev)
return
0
;
if
(
val
)
mode
&=
REGULATOR_MODE_STANDBY
;
return
REGULATOR_MODE_STANDBY
;
else
mode
&=
REGULATOR_MODE_NORMAL
|
REGULATOR_MODE_FAST
;
return
mode
;
return
REGULATOR_MODE_FAST
;
}
/*
...
...
@@ -282,13 +285,13 @@ static int da9062_buck_set_suspend_mode(struct regulator_dev *rdev,
switch
(
mode
)
{
case
REGULATOR_MODE_FAST
:
val
=
BUCK_MODE_SYNC
;
val
=
DA9063_
BUCK_MODE_SYNC
;
break
;
case
REGULATOR_MODE_NORMAL
:
val
=
BUCK_MODE_AUTO
;
val
=
DA9063_
BUCK_MODE_AUTO
;
break
;
case
REGULATOR_MODE_STANDBY
:
val
=
BUCK_MODE_SLEEP
;
val
=
DA9063_
BUCK_MODE_SLEEP
;
break
;
default:
return
-
EINVAL
;
...
...
@@ -371,6 +374,7 @@ static const struct da9062_regulator_info local_da9061_regulator_info[] = {
.
desc
.
vsel_reg
=
DA9062AA_VBUCK1_A
,
.
desc
.
vsel_mask
=
DA9062AA_VBUCK1_A_MASK
,
.
desc
.
linear_min_sel
=
0
,
.
desc
.
of_map_mode
=
da9062_map_buck_mode
,
.
sleep
=
REG_FIELD
(
DA9062AA_VBUCK1_A
,
__builtin_ffs
((
int
)
DA9062AA_BUCK1_SL_A_MASK
)
-
1
,
sizeof
(
unsigned
int
)
*
8
-
...
...
@@ -407,6 +411,7 @@ static const struct da9062_regulator_info local_da9061_regulator_info[] = {
.
desc
.
vsel_reg
=
DA9062AA_VBUCK3_A
,
.
desc
.
vsel_mask
=
DA9062AA_VBUCK3_A_MASK
,
.
desc
.
linear_min_sel
=
0
,
.
desc
.
of_map_mode
=
da9062_map_buck_mode
,
.
sleep
=
REG_FIELD
(
DA9062AA_VBUCK3_A
,
__builtin_ffs
((
int
)
DA9062AA_BUCK3_SL_A_MASK
)
-
1
,
sizeof
(
unsigned
int
)
*
8
-
...
...
@@ -443,6 +448,7 @@ static const struct da9062_regulator_info local_da9061_regulator_info[] = {
.
desc
.
vsel_reg
=
DA9062AA_VBUCK4_A
,
.
desc
.
vsel_mask
=
DA9062AA_VBUCK4_A_MASK
,
.
desc
.
linear_min_sel
=
0
,
.
desc
.
of_map_mode
=
da9062_map_buck_mode
,
.
sleep
=
REG_FIELD
(
DA9062AA_VBUCK4_A
,
__builtin_ffs
((
int
)
DA9062AA_BUCK4_SL_A_MASK
)
-
1
,
sizeof
(
unsigned
int
)
*
8
-
...
...
@@ -615,6 +621,7 @@ static const struct da9062_regulator_info local_da9062_regulator_info[] = {
.
desc
.
vsel_reg
=
DA9062AA_VBUCK1_A
,
.
desc
.
vsel_mask
=
DA9062AA_VBUCK1_A_MASK
,
.
desc
.
linear_min_sel
=
0
,
.
desc
.
of_map_mode
=
da9062_map_buck_mode
,
.
sleep
=
REG_FIELD
(
DA9062AA_VBUCK1_A
,
__builtin_ffs
((
int
)
DA9062AA_BUCK1_SL_A_MASK
)
-
1
,
sizeof
(
unsigned
int
)
*
8
-
...
...
@@ -651,6 +658,7 @@ static const struct da9062_regulator_info local_da9062_regulator_info[] = {
.
desc
.
vsel_reg
=
DA9062AA_VBUCK2_A
,
.
desc
.
vsel_mask
=
DA9062AA_VBUCK2_A_MASK
,
.
desc
.
linear_min_sel
=
0
,
.
desc
.
of_map_mode
=
da9062_map_buck_mode
,
.
sleep
=
REG_FIELD
(
DA9062AA_VBUCK2_A
,
__builtin_ffs
((
int
)
DA9062AA_BUCK2_SL_A_MASK
)
-
1
,
sizeof
(
unsigned
int
)
*
8
-
...
...
@@ -687,6 +695,7 @@ static const struct da9062_regulator_info local_da9062_regulator_info[] = {
.
desc
.
vsel_reg
=
DA9062AA_VBUCK3_A
,
.
desc
.
vsel_mask
=
DA9062AA_VBUCK3_A_MASK
,
.
desc
.
linear_min_sel
=
0
,
.
desc
.
of_map_mode
=
da9062_map_buck_mode
,
.
sleep
=
REG_FIELD
(
DA9062AA_VBUCK3_A
,
__builtin_ffs
((
int
)
DA9062AA_BUCK3_SL_A_MASK
)
-
1
,
sizeof
(
unsigned
int
)
*
8
-
...
...
@@ -723,6 +732,7 @@ static const struct da9062_regulator_info local_da9062_regulator_info[] = {
.
desc
.
vsel_reg
=
DA9062AA_VBUCK4_A
,
.
desc
.
vsel_mask
=
DA9062AA_VBUCK4_A_MASK
,
.
desc
.
linear_min_sel
=
0
,
.
desc
.
of_map_mode
=
da9062_map_buck_mode
,
.
sleep
=
REG_FIELD
(
DA9062AA_VBUCK4_A
,
__builtin_ffs
((
int
)
DA9062AA_BUCK4_SL_A_MASK
)
-
1
,
sizeof
(
unsigned
int
)
*
8
-
...
...
@@ -942,8 +952,7 @@ static int da9062_regulator_probe(struct platform_device *pdev)
regulators
->
n_regulators
=
max_regulators
;
platform_set_drvdata
(
pdev
,
regulators
);
n
=
0
;
while
(
n
<
regulators
->
n_regulators
)
{
for
(
n
=
0
;
n
<
regulators
->
n_regulators
;
n
++
)
{
/* Initialise regulator structure */
regl
=
&
regulators
->
regulator
[
n
];
regl
->
hw
=
chip
;
...
...
@@ -1002,8 +1011,6 @@ static int da9062_regulator_probe(struct platform_device *pdev)
regl
->
desc
.
name
);
return
PTR_ERR
(
regl
->
rdev
);
}
n
++
;
}
/* LDOs overcurrent event support */
...
...
drivers/regulator/da9063-regulator.c
View file @
a21da94f
...
...
@@ -225,7 +225,7 @@ static unsigned da9063_buck_get_mode(struct regulator_dev *rdev)
{
struct
da9063_regulator
*
regl
=
rdev_get_drvdata
(
rdev
);
struct
regmap_field
*
field
;
unsigned
int
val
,
mode
=
0
;
unsigned
int
val
;
int
ret
;
ret
=
regmap_field_read
(
regl
->
mode
,
&
val
);
...
...
@@ -235,7 +235,6 @@ static unsigned da9063_buck_get_mode(struct regulator_dev *rdev)
switch
(
val
)
{
default:
case
BUCK_MODE_MANUAL
:
mode
=
REGULATOR_MODE_FAST
|
REGULATOR_MODE_STANDBY
;
/* Sleep flag bit decides the mode */
break
;
case
BUCK_MODE_SLEEP
:
...
...
@@ -262,11 +261,9 @@ static unsigned da9063_buck_get_mode(struct regulator_dev *rdev)
return
0
;
if
(
val
)
mode
&=
REGULATOR_MODE_STANDBY
;
return
REGULATOR_MODE_STANDBY
;
else
mode
&=
REGULATOR_MODE_NORMAL
|
REGULATOR_MODE_FAST
;
return
mode
;
return
REGULATOR_MODE_FAST
;
}
/*
...
...
drivers/regulator/da9211-regulator.c
View file @
a21da94f
...
...
@@ -283,12 +283,12 @@ static struct da9211_pdata *da9211_parse_regulators_dt(
pdata
->
init_data
[
n
]
=
da9211_matches
[
i
].
init_data
;
pdata
->
reg_node
[
n
]
=
da9211_matches
[
i
].
of_node
;
pdata
->
gpiod_ren
[
n
]
=
devm_
gpiod_get_from_of_node
(
dev
,
da9211_matches
[
i
].
of_node
,
"enable-gpios
"
,
0
,
GPIOD_OUT_HIGH
|
GPIOD_FLAGS_BIT_NONEXCLUSIVE
,
"da9211-enable"
);
pdata
->
gpiod_ren
[
n
]
=
devm_
fwnode_gpiod_get
(
dev
,
of_fwnode_handle
(
pdata
->
reg_node
[
n
])
,
"enable
"
,
GPIOD_OUT_HIGH
|
GPIOD_FLAGS_BIT_NONEXCLUSIVE
,
"da9211-enable"
);
if
(
IS_ERR
(
pdata
->
gpiod_ren
[
n
]))
pdata
->
gpiod_ren
[
n
]
=
NULL
;
n
++
;
...
...
drivers/regulator/fan53555.c
View file @
a21da94f
...
...
@@ -83,6 +83,7 @@ enum {
enum
{
SILERGY_SYR82X
=
8
,
SILERGY_SYR83X
=
9
,
};
struct
fan53555_device_info
{
...
...
@@ -302,6 +303,7 @@ static int fan53555_voltages_setup_silergy(struct fan53555_device_info *di)
/* Init voltage range and step */
switch
(
di
->
chip_id
)
{
case
SILERGY_SYR82X
:
case
SILERGY_SYR83X
:
di
->
vsel_min
=
712500
;
di
->
vsel_step
=
12500
;
break
;
...
...
drivers/regulator/fixed.c
View file @
a21da94f
...
...
@@ -123,6 +123,7 @@ of_get_fixed_voltage_config(struct device *dev,
config
->
enabled_at_boot
=
true
;
of_property_read_u32
(
np
,
"startup-delay-us"
,
&
config
->
startup_delay
);
of_property_read_u32
(
np
,
"off-on-delay-us"
,
&
config
->
off_on_delay
);
if
(
of_find_property
(
np
,
"vin-supply"
,
NULL
))
config
->
input_supply
=
"vin"
;
...
...
@@ -189,6 +190,7 @@ static int reg_fixed_voltage_probe(struct platform_device *pdev)
}
drvdata
->
desc
.
enable_time
=
config
->
startup_delay
;
drvdata
->
desc
.
off_on_delay
=
config
->
off_on_delay
;
if
(
config
->
input_supply
)
{
drvdata
->
desc
.
supply_name
=
devm_kstrdup
(
&
pdev
->
dev
,
...
...
drivers/regulator/max77686-regulator.c
View file @
a21da94f
...
...
@@ -256,8 +256,9 @@ static int max77686_of_parse_cb(struct device_node *np,
case
MAX77686_BUCK8
:
case
MAX77686_BUCK9
:
case
MAX77686_LDO20
...
MAX77686_LDO22
:
config
->
ena_gpiod
=
gpiod_get_from_of_node
(
np
,
"maxim,ena-gpios"
,
config
->
ena_gpiod
=
fwnode_gpiod_get_index
(
of_fwnode_handle
(
np
),
"maxim,ena"
,
0
,
GPIOD_OUT_HIGH
|
GPIOD_FLAGS_BIT_NONEXCLUSIVE
,
"max77686-regulator"
);
...
...
drivers/regulator/max8907-regulator.c
View file @
a21da94f
...
...
@@ -296,7 +296,10 @@ static int max8907_regulator_probe(struct platform_device *pdev)
memcpy
(
pmic
->
desc
,
max8907_regulators
,
sizeof
(
pmic
->
desc
));
/* Backwards compatibility with MAX8907B; SD1 uses different voltages */
regmap_read
(
max8907
->
regmap_gen
,
MAX8907_REG_II2RR
,
&
val
);
ret
=
regmap_read
(
max8907
->
regmap_gen
,
MAX8907_REG_II2RR
,
&
val
);
if
(
ret
)
return
ret
;
if
((
val
&
MAX8907_II2RR_VERSION_MASK
)
==
MAX8907_II2RR_VERSION_REV_B
)
{
pmic
->
desc
[
MAX8907_SD1
].
min_uV
=
637500
;
...
...
@@ -333,14 +336,20 @@ static int max8907_regulator_probe(struct platform_device *pdev)
}
if
(
pmic
->
desc
[
i
].
ops
==
&
max8907_ldo_ops
)
{
regmap_read
(
config
.
regmap
,
pmic
->
desc
[
i
].
enable_reg
,
re
t
=
re
gmap_read
(
config
.
regmap
,
pmic
->
desc
[
i
].
enable_reg
,
&
val
);
if
(
ret
)
return
ret
;
if
((
val
&
MAX8907_MASK_LDO_SEQ
)
!=
MAX8907_MASK_LDO_SEQ
)
pmic
->
desc
[
i
].
ops
=
&
max8907_ldo_hwctl_ops
;
}
else
if
(
pmic
->
desc
[
i
].
ops
==
&
max8907_out5v_ops
)
{
regmap_read
(
config
.
regmap
,
pmic
->
desc
[
i
].
enable_reg
,
re
t
=
re
gmap_read
(
config
.
regmap
,
pmic
->
desc
[
i
].
enable_reg
,
&
val
);
if
(
ret
)
return
ret
;
if
((
val
&
(
MAX8907_MASK_OUT5V_VINEN
|
MAX8907_MASK_OUT5V_ENSRC
))
!=
MAX8907_MASK_OUT5V_ENSRC
)
...
...
drivers/regulator/pbias-regulator.c
View file @
a21da94f
...
...
@@ -38,15 +38,6 @@ struct pbias_reg_info {
int
n_voltages
;
};
struct
pbias_regulator_data
{
struct
regulator_desc
desc
;
void
__iomem
*
pbias_addr
;
struct
regulator_dev
*
dev
;
struct
regmap
*
syscon
;
const
struct
pbias_reg_info
*
info
;
int
voltage
;
};
struct
pbias_of_data
{
unsigned
int
offset
;
};
...
...
@@ -157,14 +148,13 @@ MODULE_DEVICE_TABLE(of, pbias_of_match);
static
int
pbias_regulator_probe
(
struct
platform_device
*
pdev
)
{
struct
device_node
*
np
=
pdev
->
dev
.
of_node
;
struct
pbias_regulator_data
*
drvdata
;
struct
resource
*
res
;
struct
regulator_config
cfg
=
{
};
struct
regulator_desc
*
desc
;
struct
regulator_dev
*
rdev
;
struct
regmap
*
syscon
;
const
struct
pbias_reg_info
*
info
;
int
ret
=
0
;
int
count
,
idx
,
data_idx
=
0
;
const
struct
of_device_id
*
match
;
int
ret
,
count
,
idx
;
const
struct
pbias_of_data
*
data
;
unsigned
int
offset
;
...
...
@@ -173,19 +163,16 @@ static int pbias_regulator_probe(struct platform_device *pdev)
if
(
count
<
0
)
return
count
;
drvdata
=
devm_kcalloc
(
&
pdev
->
dev
,
count
,
sizeof
(
struct
pbias_regulator_data
),
GFP_KERNEL
);
if
(
!
drvdata
)
desc
=
devm_kcalloc
(
&
pdev
->
dev
,
count
,
sizeof
(
*
desc
),
GFP_KERNEL
);
if
(
!
desc
)
return
-
ENOMEM
;
syscon
=
syscon_regmap_lookup_by_phandle
(
np
,
"syscon"
);
if
(
IS_ERR
(
syscon
))
return
PTR_ERR
(
syscon
);
match
=
of_match_device
(
of_match_ptr
(
pbias_of_match
),
&
pdev
->
dev
);
if
(
match
&&
match
->
data
)
{
data
=
match
->
data
;
data
=
of_device_get_match_data
(
&
pdev
->
dev
);
if
(
data
)
{
offset
=
data
->
offset
;
}
else
{
res
=
platform_get_resource
(
pdev
,
IORESOURCE_MEM
,
0
);
...
...
@@ -200,7 +187,7 @@ static int pbias_regulator_probe(struct platform_device *pdev)
cfg
.
regmap
=
syscon
;
cfg
.
dev
=
&
pdev
->
dev
;
for
(
idx
=
0
;
idx
<
PBIAS_NUM_REGS
&&
data_idx
<
count
;
idx
++
)
{
for
(
idx
=
0
;
idx
<
PBIAS_NUM_REGS
&&
count
;
idx
++
)
{
if
(
!
pbias_matches
[
idx
].
init_data
||
!
pbias_matches
[
idx
].
of_node
)
continue
;
...
...
@@ -209,41 +196,35 @@ static int pbias_regulator_probe(struct platform_device *pdev)
if
(
!
info
)
return
-
ENODEV
;
drvdata
[
data_idx
].
syscon
=
syscon
;
drvdata
[
data_idx
].
info
=
info
;
drvdata
[
data_idx
].
desc
.
name
=
info
->
name
;
drvdata
[
data_idx
].
desc
.
owner
=
THIS_MODULE
;
drvdata
[
data_idx
].
desc
.
type
=
REGULATOR_VOLTAGE
;
drvdata
[
data_idx
].
desc
.
ops
=
&
pbias_regulator_voltage_ops
;
drvdata
[
data_idx
].
desc
.
volt_table
=
info
->
pbias_volt_table
;
drvdata
[
data_idx
].
desc
.
n_voltages
=
info
->
n_voltages
;
drvdata
[
data_idx
].
desc
.
enable_time
=
info
->
enable_time
;
drvdata
[
data_idx
].
desc
.
vsel_reg
=
offset
;
drvdata
[
data_idx
].
desc
.
vsel_mask
=
info
->
vmode
;
drvdata
[
data_idx
].
desc
.
enable_reg
=
offset
;
drvdata
[
data_idx
].
desc
.
enable_mask
=
info
->
enable_mask
;
drvdata
[
data_idx
].
desc
.
enable_val
=
info
->
enable
;
drvdata
[
data_idx
].
desc
.
disable_val
=
info
->
disable_val
;
desc
->
name
=
info
->
name
;
desc
->
owner
=
THIS_MODULE
;
desc
->
type
=
REGULATOR_VOLTAGE
;
desc
->
ops
=
&
pbias_regulator_voltage_ops
;
desc
->
volt_table
=
info
->
pbias_volt_table
;
desc
->
n_voltages
=
info
->
n_voltages
;
desc
->
enable_time
=
info
->
enable_time
;
desc
->
vsel_reg
=
offset
;
desc
->
vsel_mask
=
info
->
vmode
;
desc
->
enable_reg
=
offset
;
desc
->
enable_mask
=
info
->
enable_mask
;
desc
->
enable_val
=
info
->
enable
;
desc
->
disable_val
=
info
->
disable_val
;
cfg
.
init_data
=
pbias_matches
[
idx
].
init_data
;
cfg
.
driver_data
=
&
drvdata
[
data_idx
];
cfg
.
of_node
=
pbias_matches
[
idx
].
of_node
;
drvdata
[
data_idx
].
dev
=
devm_regulator_register
(
&
pdev
->
dev
,
&
drvdata
[
data_idx
].
desc
,
&
cfg
);
if
(
IS_ERR
(
drvdata
[
data_idx
].
dev
))
{
ret
=
PTR_ERR
(
drvdata
[
data_idx
].
dev
);
rdev
=
devm_regulator_register
(
&
pdev
->
dev
,
desc
,
&
cfg
);
if
(
IS_ERR
(
rdev
))
{
ret
=
PTR_ERR
(
rdev
);
dev_err
(
&
pdev
->
dev
,
"Failed to register regulator: %d
\n
"
,
ret
);
goto
err_regulator
;
return
ret
;
}
data_idx
++
;
desc
++
;
count
--
;
}
platform_set_drvdata
(
pdev
,
drvdata
);
err_regulator:
return
ret
;
return
0
;
}
static
struct
platform_driver
pbias_regulator_driver
=
{
...
...
drivers/regulator/pcap-regulator.c
View file @
a21da94f
...
...
@@ -86,10 +86,6 @@ static const unsigned int SW1_table[] = {
#define SW2_table SW1_table
static
const
unsigned
int
SW3_table
[]
=
{
4000000
,
4500000
,
5000000
,
5500000
,
};
struct
pcap_regulator
{
const
u8
reg
;
const
u8
en
;
...
...
drivers/regulator/qcom-rpmh-regulator.c
View file @
a21da94f
// SPDX-License-Identifier: GPL-2.0
// Copyright (c) 2018, The Linux Foundation. All rights reserved.
// Copyright (c) 2018
-2019
, The Linux Foundation. All rights reserved.
#define pr_fmt(fmt) "%s: " fmt, __func__
...
...
@@ -878,6 +878,58 @@ static const struct rpmh_vreg_init_data pm8009_vreg_data[] = {
{},
};
static
const
struct
rpmh_vreg_init_data
pm6150_vreg_data
[]
=
{
RPMH_VREG
(
"smps1"
,
"smp%s1"
,
&
pmic5_ftsmps510
,
"vdd-s1"
),
RPMH_VREG
(
"smps2"
,
"smp%s2"
,
&
pmic5_ftsmps510
,
"vdd-s2"
),
RPMH_VREG
(
"smps3"
,
"smp%s3"
,
&
pmic5_ftsmps510
,
"vdd-s3"
),
RPMH_VREG
(
"smps4"
,
"smp%s4"
,
&
pmic5_hfsmps510
,
"vdd-s4"
),
RPMH_VREG
(
"smps5"
,
"smp%s5"
,
&
pmic5_hfsmps510
,
"vdd-s5"
),
RPMH_VREG
(
"ldo1"
,
"ldo%s1"
,
&
pmic5_nldo
,
"vdd-l1"
),
RPMH_VREG
(
"ldo2"
,
"ldo%s2"
,
&
pmic5_nldo
,
"vdd-l2-l3"
),
RPMH_VREG
(
"ldo3"
,
"ldo%s3"
,
&
pmic5_nldo
,
"vdd-l2-l3"
),
RPMH_VREG
(
"ldo4"
,
"ldo%s4"
,
&
pmic5_nldo
,
"vdd-l4-l7-l8"
),
RPMH_VREG
(
"ldo5"
,
"ldo%s5"
,
&
pmic5_pldo
,
"vdd-l5-l16-l17-l18-l19"
),
RPMH_VREG
(
"ldo6"
,
"ldo%s6"
,
&
pmic5_nldo
,
"vdd-l6"
),
RPMH_VREG
(
"ldo7"
,
"ldo%s7"
,
&
pmic5_nldo
,
"vdd-l4-l7-l8"
),
RPMH_VREG
(
"ldo8"
,
"ldo%s8"
,
&
pmic5_nldo
,
"vdd-l4-l7-l8"
),
RPMH_VREG
(
"ldo9"
,
"ldo%s9"
,
&
pmic5_nldo
,
"vdd-l9"
),
RPMH_VREG
(
"ldo10"
,
"ldo%s10"
,
&
pmic5_pldo_lv
,
"vdd-l10-l14-l15"
),
RPMH_VREG
(
"ldo11"
,
"ldo%s11"
,
&
pmic5_pldo_lv
,
"vdd-l11-l12-l13"
),
RPMH_VREG
(
"ldo12"
,
"ldo%s12"
,
&
pmic5_pldo_lv
,
"vdd-l11-l12-l13"
),
RPMH_VREG
(
"ldo13"
,
"ldo%s13"
,
&
pmic5_pldo_lv
,
"vdd-l11-l12-l13"
),
RPMH_VREG
(
"ldo14"
,
"ldo%s14"
,
&
pmic5_pldo_lv
,
"vdd-l10-l14-l15"
),
RPMH_VREG
(
"ldo15"
,
"ldo%s15"
,
&
pmic5_pldo_lv
,
"vdd-l10-l14-l15"
),
RPMH_VREG
(
"ldo16"
,
"ldo%s16"
,
&
pmic5_pldo
,
"vdd-l5-l16-l17-l18-l19"
),
RPMH_VREG
(
"ldo17"
,
"ldo%s17"
,
&
pmic5_pldo
,
"vdd-l5-l16-l17-l18-l19"
),
RPMH_VREG
(
"ldo18"
,
"ldo%s18"
,
&
pmic5_pldo
,
"vdd-l5-l16-l17-l18-l19"
),
RPMH_VREG
(
"ldo19"
,
"ldo%s19"
,
&
pmic5_pldo
,
"vdd-l5-l16-l17-l18-l19"
),
{},
};
static
const
struct
rpmh_vreg_init_data
pm6150l_vreg_data
[]
=
{
RPMH_VREG
(
"smps1"
,
"smp%s1"
,
&
pmic5_ftsmps510
,
"vdd-s1"
),
RPMH_VREG
(
"smps2"
,
"smp%s2"
,
&
pmic5_ftsmps510
,
"vdd-s2"
),
RPMH_VREG
(
"smps3"
,
"smp%s3"
,
&
pmic5_ftsmps510
,
"vdd-s3"
),
RPMH_VREG
(
"smps4"
,
"smp%s4"
,
&
pmic5_ftsmps510
,
"vdd-s4"
),
RPMH_VREG
(
"smps5"
,
"smp%s5"
,
&
pmic5_ftsmps510
,
"vdd-s5"
),
RPMH_VREG
(
"smps6"
,
"smp%s6"
,
&
pmic5_ftsmps510
,
"vdd-s6"
),
RPMH_VREG
(
"smps7"
,
"smp%s7"
,
&
pmic5_ftsmps510
,
"vdd-s7"
),
RPMH_VREG
(
"smps8"
,
"smp%s8"
,
&
pmic5_hfsmps510
,
"vdd-s8"
),
RPMH_VREG
(
"ldo1"
,
"ldo%s1"
,
&
pmic5_pldo_lv
,
"vdd-l1-l8"
),
RPMH_VREG
(
"ldo2"
,
"ldo%s2"
,
&
pmic5_nldo
,
"vdd-l2-l3"
),
RPMH_VREG
(
"ldo3"
,
"ldo%s3"
,
&
pmic5_nldo
,
"vdd-l2-l3"
),
RPMH_VREG
(
"ldo4"
,
"ldo%s4"
,
&
pmic5_pldo
,
"vdd-l4-l5-l6"
),
RPMH_VREG
(
"ldo5"
,
"ldo%s5"
,
&
pmic5_pldo
,
"vdd-l4-l5-l6"
),
RPMH_VREG
(
"ldo6"
,
"ldo%s6"
,
&
pmic5_pldo
,
"vdd-l4-l5-l6"
),
RPMH_VREG
(
"ldo7"
,
"ldo%s7"
,
&
pmic5_pldo
,
"vdd-l7-l11"
),
RPMH_VREG
(
"ldo8"
,
"ldo%s8"
,
&
pmic5_pldo
,
"vdd-l1-l8"
),
RPMH_VREG
(
"ldo9"
,
"ldo%s9"
,
&
pmic5_pldo
,
"vdd-l9-l10"
),
RPMH_VREG
(
"ldo10"
,
"ldo%s10"
,
&
pmic5_pldo
,
"vdd-l9-l10"
),
RPMH_VREG
(
"ldo11"
,
"ldo%s11"
,
&
pmic5_pldo
,
"vdd-l7-l11"
),
RPMH_VREG
(
"bob"
,
"bob%s1"
,
&
pmic5_bob
,
"vdd-bob"
),
{},
};
static
int
rpmh_regulator_probe
(
struct
platform_device
*
pdev
)
{
struct
device
*
dev
=
&
pdev
->
dev
;
...
...
@@ -940,6 +992,14 @@ static const struct of_device_id rpmh_regulator_match_table[] = {
.
compatible
=
"qcom,pmi8998-rpmh-regulators"
,
.
data
=
pmi8998_vreg_data
,
},
{
.
compatible
=
"qcom,pm6150-rpmh-regulators"
,
.
data
=
pm6150_vreg_data
,
},
{
.
compatible
=
"qcom,pm6150l-rpmh-regulators"
,
.
data
=
pm6150l_vreg_data
,
},
{}
};
MODULE_DEVICE_TABLE
(
of
,
rpmh_regulator_match_table
);
...
...
drivers/regulator/qcom_smd-regulator.c
View file @
a21da94f
...
...
@@ -338,6 +338,63 @@ static const struct regulator_desc pm8916_buck_hvo_smps = {
.
ops
=
&
rpm_smps_ldo_ops
,
};
static
const
struct
regulator_desc
pm8950_hfsmps
=
{
.
linear_ranges
=
(
struct
regulator_linear_range
[])
{
REGULATOR_LINEAR_RANGE
(
375000
,
0
,
95
,
12500
),
REGULATOR_LINEAR_RANGE
(
1550000
,
96
,
127
,
25000
),
},
.
n_linear_ranges
=
2
,
.
n_voltages
=
128
,
.
ops
=
&
rpm_smps_ldo_ops
,
};
static
const
struct
regulator_desc
pm8950_ftsmps2p5
=
{
.
linear_ranges
=
(
struct
regulator_linear_range
[])
{
REGULATOR_LINEAR_RANGE
(
80000
,
0
,
255
,
5000
),
REGULATOR_LINEAR_RANGE
(
160000
,
256
,
460
,
10000
),
},
.
n_linear_ranges
=
2
,
.
n_voltages
=
461
,
.
ops
=
&
rpm_smps_ldo_ops
,
};
static
const
struct
regulator_desc
pm8950_ult_nldo
=
{
.
linear_ranges
=
(
struct
regulator_linear_range
[])
{
REGULATOR_LINEAR_RANGE
(
375000
,
0
,
202
,
12500
),
},
.
n_linear_ranges
=
1
,
.
n_voltages
=
203
,
.
ops
=
&
rpm_smps_ldo_ops
,
};
static
const
struct
regulator_desc
pm8950_ult_pldo
=
{
.
linear_ranges
=
(
struct
regulator_linear_range
[])
{
REGULATOR_LINEAR_RANGE
(
1750000
,
0
,
127
,
12500
),
},
.
n_linear_ranges
=
1
,
.
n_voltages
=
128
,
.
ops
=
&
rpm_smps_ldo_ops
,
};
static
const
struct
regulator_desc
pm8950_pldo_lv
=
{
.
linear_ranges
=
(
struct
regulator_linear_range
[])
{
REGULATOR_LINEAR_RANGE
(
1500000
,
0
,
16
,
25000
),
},
.
n_linear_ranges
=
1
,
.
n_voltages
=
17
,
.
ops
=
&
rpm_smps_ldo_ops
,
};
static
const
struct
regulator_desc
pm8950_pldo
=
{
.
linear_ranges
=
(
struct
regulator_linear_range
[])
{
REGULATOR_LINEAR_RANGE
(
975000
,
0
,
164
,
12500
),
},
.
n_linear_ranges
=
1
,
.
n_voltages
=
165
,
.
ops
=
&
rpm_smps_ldo_ops
,
};
static
const
struct
regulator_desc
pm8994_hfsmps
=
{
.
linear_ranges
=
(
struct
regulator_linear_range
[])
{
REGULATOR_LINEAR_RANGE
(
375000
,
0
,
95
,
12500
),
...
...
@@ -638,6 +695,40 @@ static const struct rpm_regulator_data rpm_pma8084_regulators[] = {
{}
};
static
const
struct
rpm_regulator_data
rpm_pm8950_regulators
[]
=
{
{
"s1"
,
QCOM_SMD_RPM_SMPA
,
1
,
&
pm8950_hfsmps
,
"vdd_s1"
},
{
"s2"
,
QCOM_SMD_RPM_SMPA
,
2
,
&
pm8950_hfsmps
,
"vdd_s2"
},
{
"s3"
,
QCOM_SMD_RPM_SMPA
,
3
,
&
pm8950_hfsmps
,
"vdd_s3"
},
{
"s4"
,
QCOM_SMD_RPM_SMPA
,
4
,
&
pm8950_hfsmps
,
"vdd_s4"
},
{
"s5"
,
QCOM_SMD_RPM_SMPA
,
5
,
&
pm8950_ftsmps2p5
,
"vdd_s5"
},
{
"s6"
,
QCOM_SMD_RPM_SMPA
,
6
,
&
pm8950_hfsmps
,
"vdd_s6"
},
{
"l1"
,
QCOM_SMD_RPM_LDOA
,
1
,
&
pm8950_ult_nldo
,
"vdd_l1_l19"
},
{
"l2"
,
QCOM_SMD_RPM_LDOA
,
2
,
&
pm8950_ult_nldo
,
"vdd_l2_l23"
},
{
"l3"
,
QCOM_SMD_RPM_LDOA
,
3
,
&
pm8950_ult_nldo
,
"vdd_l3"
},
{
"l4"
,
QCOM_SMD_RPM_LDOA
,
4
,
&
pm8950_ult_pldo
,
"vdd_l4_l5_l6_l7_l16"
},
{
"l5"
,
QCOM_SMD_RPM_LDOA
,
5
,
&
pm8950_pldo_lv
,
"vdd_l4_l5_l6_l7_l16"
},
{
"l6"
,
QCOM_SMD_RPM_LDOA
,
6
,
&
pm8950_pldo_lv
,
"vdd_l4_l5_l6_l7_l16"
},
{
"l7"
,
QCOM_SMD_RPM_LDOA
,
7
,
&
pm8950_pldo_lv
,
"vdd_l4_l5_l6_l7_l16"
},
{
"l8"
,
QCOM_SMD_RPM_LDOA
,
8
,
&
pm8950_ult_pldo
,
"vdd_l8_l11_l12_l17_l22"
},
{
"l9"
,
QCOM_SMD_RPM_LDOA
,
9
,
&
pm8950_ult_pldo
,
"vdd_l9_l10_l13_l14_l15_l18"
},
{
"l10"
,
QCOM_SMD_RPM_LDOA
,
10
,
&
pm8950_ult_nldo
,
"vdd_l9_l10_l13_l14_l15_l18"
},
{
"l11"
,
QCOM_SMD_RPM_LDOA
,
11
,
&
pm8950_ult_pldo
,
"vdd_l8_l11_l12_l17_l22"
},
{
"l12"
,
QCOM_SMD_RPM_LDOA
,
12
,
&
pm8950_ult_pldo
,
"vdd_l8_l11_l12_l17_l22"
},
{
"l13"
,
QCOM_SMD_RPM_LDOA
,
13
,
&
pm8950_ult_pldo
,
"vdd_l9_l10_l13_l14_l15_l18"
},
{
"l14"
,
QCOM_SMD_RPM_LDOA
,
14
,
&
pm8950_ult_pldo
,
"vdd_l9_l10_l13_l14_l15_l18"
},
{
"l15"
,
QCOM_SMD_RPM_LDOA
,
15
,
&
pm8950_ult_pldo
,
"vdd_l9_l10_l13_l14_l15_l18"
},
{
"l16"
,
QCOM_SMD_RPM_LDOA
,
16
,
&
pm8950_ult_pldo
,
"vdd_l4_l5_l6_l7_l16"
},
{
"l17"
,
QCOM_SMD_RPM_LDOA
,
17
,
&
pm8950_ult_pldo
,
"vdd_l8_l11_l12_l17_l22"
},
{
"l18"
,
QCOM_SMD_RPM_LDOA
,
18
,
&
pm8950_ult_pldo
,
"vdd_l9_l10_l13_l14_l15_l18"
},
{
"l19"
,
QCOM_SMD_RPM_LDOA
,
18
,
&
pm8950_pldo
,
"vdd_l1_l19"
},
{
"l20"
,
QCOM_SMD_RPM_LDOA
,
18
,
&
pm8950_pldo
,
"vdd_l20"
},
{
"l21"
,
QCOM_SMD_RPM_LDOA
,
18
,
&
pm8950_pldo
,
"vdd_l21"
},
{
"l22"
,
QCOM_SMD_RPM_LDOA
,
18
,
&
pm8950_pldo
,
"vdd_l8_l11_l12_l17_l22"
},
{
"l23"
,
QCOM_SMD_RPM_LDOA
,
18
,
&
pm8950_pldo
,
"vdd_l2_l23"
},
{}
};
static
const
struct
rpm_regulator_data
rpm_pm8994_regulators
[]
=
{
{
"s1"
,
QCOM_SMD_RPM_SMPA
,
1
,
&
pm8994_ftsmps
,
"vdd_s1"
},
{
"s2"
,
QCOM_SMD_RPM_SMPA
,
2
,
&
pm8994_ftsmps
,
"vdd_s2"
},
...
...
@@ -767,6 +858,7 @@ static const struct of_device_id rpm_of_match[] = {
{
.
compatible
=
"qcom,rpm-pm8841-regulators"
,
.
data
=
&
rpm_pm8841_regulators
},
{
.
compatible
=
"qcom,rpm-pm8916-regulators"
,
.
data
=
&
rpm_pm8916_regulators
},
{
.
compatible
=
"qcom,rpm-pm8941-regulators"
,
.
data
=
&
rpm_pm8941_regulators
},
{
.
compatible
=
"qcom,rpm-pm8950-regulators"
,
.
data
=
&
rpm_pm8950_regulators
},
{
.
compatible
=
"qcom,rpm-pm8994-regulators"
,
.
data
=
&
rpm_pm8994_regulators
},
{
.
compatible
=
"qcom,rpm-pm8998-regulators"
,
.
data
=
&
rpm_pm8998_regulators
},
{
.
compatible
=
"qcom,rpm-pma8084-regulators"
,
.
data
=
&
rpm_pma8084_regulators
},
...
...
drivers/regulator/qcom_spmi-regulator.c
View file @
a21da94f
...
...
@@ -1869,6 +1869,39 @@ static const struct spmi_regulator_data pm8916_regulators[] = {
{
}
};
static
const
struct
spmi_regulator_data
pm8950_regulators
[]
=
{
{
"s1"
,
0x1400
,
"vdd_s1"
,
},
{
"s2"
,
0x1700
,
"vdd_s2"
,
},
{
"s3"
,
0x1a00
,
"vdd_s3"
,
},
{
"s4"
,
0x1d00
,
"vdd_s4"
,
},
{
"s5"
,
0x2000
,
"vdd_s5"
,
},
{
"s6"
,
0x2300
,
"vdd_s6"
,
},
{
"l1"
,
0x4000
,
"vdd_l1_l19"
,
},
{
"l2"
,
0x4100
,
"vdd_l2_l23"
,
},
{
"l3"
,
0x4200
,
"vdd_l3"
,
},
{
"l4"
,
0x4300
,
"vdd_l4_l5_l6_l7_l16"
,
},
{
"l5"
,
0x4400
,
"vdd_l4_l5_l6_l7_l16"
,
},
{
"l6"
,
0x4500
,
"vdd_l4_l5_l6_l7_l16"
,
},
{
"l7"
,
0x4600
,
"vdd_l4_l5_l6_l7_l16"
,
},
{
"l8"
,
0x4700
,
"vdd_l8_l11_l12_l17_l22"
,
},
{
"l9"
,
0x4800
,
"vdd_l9_l10_l13_l14_l15_l18"
,
},
{
"l10"
,
0x4900
,
"vdd_l9_l10_l13_l14_l15_l18"
,
},
{
"l11"
,
0x4a00
,
"vdd_l8_l11_l12_l17_l22"
,
},
{
"l12"
,
0x4b00
,
"vdd_l8_l11_l12_l17_l22"
,
},
{
"l13"
,
0x4c00
,
"vdd_l9_l10_l13_l14_l15_l18"
,
},
{
"l14"
,
0x4d00
,
"vdd_l9_l10_l13_l14_l15_l18"
,
},
{
"l15"
,
0x4e00
,
"vdd_l9_l10_l13_l14_l15_l18"
,
},
{
"l16"
,
0x4f00
,
"vdd_l4_l5_l6_l7_l16"
,
},
{
"l17"
,
0x5000
,
"vdd_l8_l11_l12_l17_l22"
,
},
{
"l18"
,
0x5100
,
"vdd_l9_l10_l13_l14_l15_l18"
,
},
{
"l19"
,
0x5200
,
"vdd_l1_l19"
,
},
{
"l20"
,
0x5300
,
"vdd_l20"
,
},
{
"l21"
,
0x5400
,
"vdd_l21"
,
},
{
"l22"
,
0x5500
,
"vdd_l8_l11_l12_l17_l22"
,
},
{
"l23"
,
0x5600
,
"vdd_l2_l23"
,
},
{
}
};
static
const
struct
spmi_regulator_data
pm8994_regulators
[]
=
{
{
"s1"
,
0x1400
,
"vdd_s1"
,
},
{
"s2"
,
0x1700
,
"vdd_s2"
,
},
...
...
@@ -1927,6 +1960,12 @@ static const struct spmi_regulator_data pmi8994_regulators[] = {
{
}
};
static
const
struct
spmi_regulator_data
pm8004_regulators
[]
=
{
{
"s2"
,
0x1700
,
"vdd_s2"
,
},
{
"s5"
,
0x2000
,
"vdd_s5"
,
},
{
}
};
static
const
struct
spmi_regulator_data
pm8005_regulators
[]
=
{
{
"s1"
,
0x1400
,
"vdd_s1"
,
},
{
"s2"
,
0x1700
,
"vdd_s2"
,
},
...
...
@@ -1941,10 +1980,12 @@ static const struct spmi_regulator_data pms405_regulators[] = {
};
static
const
struct
of_device_id
qcom_spmi_regulator_match
[]
=
{
{
.
compatible
=
"qcom,pm8004-regulators"
,
.
data
=
&
pm8004_regulators
},
{
.
compatible
=
"qcom,pm8005-regulators"
,
.
data
=
&
pm8005_regulators
},
{
.
compatible
=
"qcom,pm8841-regulators"
,
.
data
=
&
pm8841_regulators
},
{
.
compatible
=
"qcom,pm8916-regulators"
,
.
data
=
&
pm8916_regulators
},
{
.
compatible
=
"qcom,pm8941-regulators"
,
.
data
=
&
pm8941_regulators
},
{
.
compatible
=
"qcom,pm8950-regulators"
,
.
data
=
&
pm8950_regulators
},
{
.
compatible
=
"qcom,pm8994-regulators"
,
.
data
=
&
pm8994_regulators
},
{
.
compatible
=
"qcom,pmi8994-regulators"
,
.
data
=
&
pmi8994_regulators
},
{
.
compatible
=
"qcom,pms405-regulators"
,
.
data
=
&
pms405_regulators
},
...
...
drivers/regulator/rk808-regulator.c
View file @
a21da94f
...
...
@@ -388,7 +388,7 @@ static int rk817_set_ramp_delay(struct regulator_dev *rdev, int ramp_delay)
break
;
default:
dev_warn
(
&
rdev
->
dev
,
"%s ramp_delay: %d not supported, setting
10
000
\n
"
,
"%s ramp_delay: %d not supported, setting
25
000
\n
"
,
rdev
->
desc
->
name
,
ramp_delay
);
}
...
...
@@ -411,21 +411,6 @@ static int rk808_set_suspend_voltage(struct regulator_dev *rdev, int uv)
sel
);
}
static
int
rk817_set_suspend_voltage
(
struct
regulator_dev
*
rdev
,
int
uv
)
{
unsigned
int
reg
;
int
sel
=
regulator_map_voltage_linear
(
rdev
,
uv
,
uv
);
/* only ldo1~ldo9 */
if
(
sel
<
0
)
return
-
EINVAL
;
reg
=
rdev
->
desc
->
vsel_reg
+
RK808_SLP_REG_OFFSET
;
return
regmap_update_bits
(
rdev
->
regmap
,
reg
,
rdev
->
desc
->
vsel_mask
,
sel
);
}
static
int
rk808_set_suspend_voltage_range
(
struct
regulator_dev
*
rdev
,
int
uv
)
{
unsigned
int
reg
;
...
...
@@ -686,7 +671,7 @@ static const struct regulator_linear_range rk805_buck_1_2_voltage_ranges[] = {
REGULATOR_LINEAR_RANGE
(
2300000
,
63
,
63
,
0
),
};
static
struct
regulator_ops
rk809_buck5_ops_range
=
{
static
const
struct
regulator_ops
rk809_buck5_ops_range
=
{
.
list_voltage
=
regulator_list_voltage_linear_range
,
.
map_voltage
=
regulator_map_voltage_linear_range
,
.
get_voltage_sel
=
regulator_get_voltage_sel_regmap
,
...
...
@@ -700,7 +685,7 @@ static struct regulator_ops rk809_buck5_ops_range = {
.
set_suspend_disable
=
rk817_set_suspend_disable
,
};
static
struct
regulator_ops
rk817_reg_ops
=
{
static
const
struct
regulator_ops
rk817_reg_ops
=
{
.
list_voltage
=
regulator_list_voltage_linear
,
.
map_voltage
=
regulator_map_voltage_linear
,
.
get_voltage_sel
=
regulator_get_voltage_sel_regmap
,
...
...
@@ -708,12 +693,12 @@ static struct regulator_ops rk817_reg_ops = {
.
enable
=
regulator_enable_regmap
,
.
disable
=
regulator_disable_regmap
,
.
is_enabled
=
rk8xx_is_enabled_wmsk_regmap
,
.
set_suspend_voltage
=
rk8
17
_set_suspend_voltage
,
.
set_suspend_voltage
=
rk8
08
_set_suspend_voltage
,
.
set_suspend_enable
=
rk817_set_suspend_enable
,
.
set_suspend_disable
=
rk817_set_suspend_disable
,
};
static
struct
regulator_ops
rk817_boost_ops
=
{
static
const
struct
regulator_ops
rk817_boost_ops
=
{
.
list_voltage
=
regulator_list_voltage_linear
,
.
map_voltage
=
regulator_map_voltage_linear
,
.
get_voltage_sel
=
regulator_get_voltage_sel_regmap
,
...
...
@@ -725,7 +710,7 @@ static struct regulator_ops rk817_boost_ops = {
.
set_suspend_disable
=
rk817_set_suspend_disable
,
};
static
struct
regulator_ops
rk817_buck_ops_range
=
{
static
const
struct
regulator_ops
rk817_buck_ops_range
=
{
.
list_voltage
=
regulator_list_voltage_linear_range
,
.
map_voltage
=
regulator_map_voltage_linear_range
,
.
get_voltage_sel
=
regulator_get_voltage_sel_regmap
,
...
...
@@ -743,7 +728,7 @@ static struct regulator_ops rk817_buck_ops_range = {
.
set_suspend_disable
=
rk817_set_suspend_disable
,
};
static
struct
regulator_ops
rk817_switch_ops
=
{
static
const
struct
regulator_ops
rk817_switch_ops
=
{
.
enable
=
regulator_enable_regmap
,
.
disable
=
regulator_disable_regmap
,
.
is_enabled
=
rk8xx_is_enabled_wmsk_regmap
,
...
...
drivers/regulator/s2mps11.c
View file @
a21da94f
...
...
@@ -844,10 +844,9 @@ static void s2mps14_pmic_dt_parse_ext_control_gpio(struct platform_device *pdev,
if
(
!
rdata
[
reg
].
init_data
||
!
rdata
[
reg
].
of_node
)
continue
;
gpio
[
reg
]
=
devm_gpiod_get_from_of_node
(
&
pdev
->
dev
,
rdata
[
reg
].
of_node
,
"samsung,ext-control-gpios"
,
0
,
gpio
[
reg
]
=
devm_fwnode_gpiod_get
(
&
pdev
->
dev
,
of_fwnode_handle
(
rdata
[
reg
].
of_node
),
"samsung,ext-control"
,
GPIOD_OUT_HIGH
|
GPIOD_FLAGS_BIT_NONEXCLUSIVE
,
"s2mps11-regulator"
);
if
(
PTR_ERR
(
gpio
[
reg
])
==
-
ENOENT
)
...
...
drivers/regulator/s5m8767.c
View file @
a21da94f
...
...
@@ -567,11 +567,10 @@ static int s5m8767_pmic_dt_parse_pdata(struct platform_device *pdev,
continue
;
}
rdata
->
ext_control_gpiod
=
devm_
gpiod_get_from_of_node
(
rdata
->
ext_control_gpiod
=
devm_
fwnode_gpiod_get
(
&
pdev
->
dev
,
reg_np
,
"s5m8767,pmic-ext-control-gpios"
,
0
,
of_fwnode_handle
(
reg_np
),
"s5m8767,pmic-ext-control"
,
GPIOD_OUT_HIGH
|
GPIOD_FLAGS_BIT_NONEXCLUSIVE
,
"s5m8767"
);
if
(
PTR_ERR
(
rdata
->
ext_control_gpiod
)
==
-
ENOENT
)
...
...
drivers/regulator/slg51000-regulator.c
View file @
a21da94f
...
...
@@ -198,17 +198,14 @@ static int slg51000_of_parse_cb(struct device_node *np,
const
struct
regulator_desc
*
desc
,
struct
regulator_config
*
config
)
{
struct
slg51000
*
chip
=
config
->
driver_data
;
struct
gpio_desc
*
ena_gpiod
;
enum
gpiod_flags
gflags
=
GPIOD_OUT_LOW
|
GPIOD_FLAGS_BIT_NONEXCLUSIVE
;
ena_gpiod
=
devm_gpiod_get_from_of_node
(
chip
->
dev
,
np
,
"enable-gpios"
,
0
,
gflags
,
"gpio-en-ldo"
);
if
(
!
IS_ERR
(
ena_gpiod
))
{
ena_gpiod
=
fwnode_gpiod_get_index
(
of_fwnode_handle
(
np
),
"enable"
,
0
,
GPIOD_OUT_LOW
|
GPIOD_FLAGS_BIT_NONEXCLUSIVE
,
"gpio-en-ldo"
);
if
(
!
IS_ERR
(
ena_gpiod
))
config
->
ena_gpiod
=
ena_gpiod
;
devm_gpiod_unhinge
(
chip
->
dev
,
config
->
ena_gpiod
);
}
return
0
;
}
...
...
drivers/regulator/stm32-vrefbuf.c
View file @
a21da94f
...
...
@@ -181,7 +181,6 @@ static const struct regulator_desc stm32_vrefbuf_regu = {
static
int
stm32_vrefbuf_probe
(
struct
platform_device
*
pdev
)
{
struct
resource
*
res
;
struct
stm32_vrefbuf
*
priv
;
struct
regulator_config
config
=
{
};
struct
regulator_dev
*
rdev
;
...
...
@@ -192,8 +191,7 @@ static int stm32_vrefbuf_probe(struct platform_device *pdev)
return
-
ENOMEM
;
priv
->
dev
=
&
pdev
->
dev
;
res
=
platform_get_resource
(
pdev
,
IORESOURCE_MEM
,
0
);
priv
->
base
=
devm_ioremap_resource
(
&
pdev
->
dev
,
res
);
priv
->
base
=
devm_platform_ioremap_resource
(
pdev
,
0
);
if
(
IS_ERR
(
priv
->
base
))
return
PTR_ERR
(
priv
->
base
);
...
...
drivers/regulator/stpmic1_regulator.c
View file @
a21da94f
...
...
@@ -54,6 +54,8 @@ enum {
/* Enable time worst case is 5000mV/(2250uV/uS) */
#define PMIC_ENABLE_TIME_US 2200
/* Ramp delay worst case is (2250uV/uS) */
#define PMIC_RAMP_DELAY 2200
static
const
struct
regulator_linear_range
buck1_ranges
[]
=
{
REGULATOR_LINEAR_RANGE
(
725000
,
0
,
4
,
0
),
...
...
@@ -208,6 +210,7 @@ static const struct regulator_ops stpmic1_switch_regul_ops = {
.enable_val = 1, \
.disable_val = 0, \
.enable_time = PMIC_ENABLE_TIME_US, \
.ramp_delay = PMIC_RAMP_DELAY, \
.supply_name = #base, \
}
...
...
@@ -227,6 +230,7 @@ static const struct regulator_ops stpmic1_switch_regul_ops = {
.enable_val = 1, \
.disable_val = 0, \
.enable_time = PMIC_ENABLE_TIME_US, \
.ramp_delay = PMIC_RAMP_DELAY, \
.bypass_reg = LDO3_ACTIVE_CR, \
.bypass_mask = LDO_BYPASS_MASK, \
.bypass_val_on = LDO_BYPASS_MASK, \
...
...
@@ -248,6 +252,7 @@ static const struct regulator_ops stpmic1_switch_regul_ops = {
.enable_val = 1, \
.disable_val = 0, \
.enable_time = PMIC_ENABLE_TIME_US, \
.ramp_delay = PMIC_RAMP_DELAY, \
.supply_name = #base, \
}
...
...
@@ -267,6 +272,7 @@ static const struct regulator_ops stpmic1_switch_regul_ops = {
.enable_val = 1, \
.disable_val = 0, \
.enable_time = PMIC_ENABLE_TIME_US, \
.ramp_delay = PMIC_RAMP_DELAY, \
.of_map_mode = stpmic1_map_mode, \
.pull_down_reg = ids##_PULL_DOWN_REG, \
.pull_down_mask = ids##_PULL_DOWN_MASK, \
...
...
drivers/regulator/tps6105x-regulator.c
View file @
a21da94f
...
...
@@ -37,6 +37,7 @@ static struct regulator_ops tps6105x_regulator_ops = {
static
const
struct
regulator_desc
tps6105x_regulator_desc
=
{
.
name
=
"tps6105x-boost"
,
.
of_match
=
of_match_ptr
(
"regulator"
),
.
ops
=
&
tps6105x_regulator_ops
,
.
type
=
REGULATOR_VOLTAGE
,
.
id
=
0
,
...
...
@@ -71,6 +72,7 @@ static int tps6105x_regulator_probe(struct platform_device *pdev)
config
.
dev
=
&
tps6105x
->
client
->
dev
;
config
.
init_data
=
pdata
->
regulator_data
;
config
.
driver_data
=
tps6105x
;
config
.
of_node
=
pdev
->
dev
.
parent
->
of_node
;
config
.
regmap
=
tps6105x
->
regmap
;
/* Register regulator with framework */
...
...
drivers/regulator/tps65090-regulator.c
View file @
a21da94f
...
...
@@ -346,16 +346,20 @@ static struct tps65090_platform_data *tps65090_parse_dt_reg_data(
for
(
idx
=
0
;
idx
<
ARRAY_SIZE
(
tps65090_matches
);
idx
++
)
{
struct
regulator_init_data
*
ri_data
;
struct
tps65090_regulator_plat_data
*
rpdata
;
struct
device_node
*
np
;
rpdata
=
&
reg_pdata
[
idx
];
ri_data
=
tps65090_matches
[
idx
].
init_data
;
if
(
!
ri_data
||
!
tps65090_matches
[
idx
].
of_node
)
if
(
!
ri_data
)
continue
;
np
=
tps65090_matches
[
idx
].
of_node
;
if
(
!
np
)
continue
;
rpdata
->
reg_init_data
=
ri_data
;
rpdata
->
enable_ext_control
=
of_property_read_bool
(
tps65090_matches
[
idx
].
of_node
,
"ti,enable-ext-control"
);
rpdata
->
enable_ext_control
=
of_property_read_bool
(
np
,
"ti,enable-ext-control"
);
if
(
rpdata
->
enable_ext_control
)
{
enum
gpiod_flags
gflags
;
...
...
@@ -366,11 +370,12 @@ static struct tps65090_platform_data *tps65090_parse_dt_reg_data(
gflags
=
GPIOD_OUT_LOW
;
gflags
|=
GPIOD_FLAGS_BIT_NONEXCLUSIVE
;
rpdata
->
gpiod
=
devm_gpiod_get_from_of_node
(
&
pdev
->
dev
,
tps65090_matches
[
idx
].
of_node
,
"dcdc-ext-control-gpios"
,
0
,
gflags
,
"tps65090"
);
rpdata
->
gpiod
=
devm_fwnode_gpiod_get
(
&
pdev
->
dev
,
of_fwnode_handle
(
np
),
"dcdc-ext-control"
,
gflags
,
"tps65090"
);
if
(
PTR_ERR
(
rpdata
->
gpiod
)
==
-
ENOENT
)
{
dev_err
(
&
pdev
->
dev
,
"could not find DCDC external control GPIO
\n
"
);
...
...
@@ -379,8 +384,7 @@ static struct tps65090_platform_data *tps65090_parse_dt_reg_data(
return
ERR_CAST
(
rpdata
->
gpiod
);
}
if
(
of_property_read_u32
(
tps65090_matches
[
idx
].
of_node
,
"ti,overcurrent-wait"
,
if
(
of_property_read_u32
(
np
,
"ti,overcurrent-wait"
,
&
rpdata
->
overcurrent_wait
)
==
0
)
rpdata
->
overcurrent_wait_valid
=
true
;
...
...
drivers/regulator/tps65132-regulator.c
View file @
a21da94f
...
...
@@ -136,9 +136,10 @@ static int tps65132_of_parse_cb(struct device_node *np,
struct
tps65132_reg_pdata
*
rpdata
=
&
tps
->
reg_pdata
[
desc
->
id
];
int
ret
;
rpdata
->
en_gpiod
=
devm_fwnode_get_index_gpiod_from_child
(
tps
->
dev
,
"enable"
,
0
,
&
np
->
fwnode
,
0
,
"enable"
);
if
(
IS_ERR_OR_NULL
(
rpdata
->
en_gpiod
))
{
rpdata
->
en_gpiod
=
devm_fwnode_gpiod_get
(
tps
->
dev
,
of_fwnode_handle
(
np
),
"enable"
,
GPIOD_ASIS
,
"enable"
);
if
(
IS_ERR
(
rpdata
->
en_gpiod
))
{
ret
=
PTR_ERR
(
rpdata
->
en_gpiod
);
/* Ignore the error other than probe defer */
...
...
@@ -147,10 +148,12 @@ static int tps65132_of_parse_cb(struct device_node *np,
return
0
;
}
rpdata
->
act_dis_gpiod
=
devm_fwnode_get_index_gpiod_from_child
(
tps
->
dev
,
"active-discharge"
,
0
,
&
np
->
fwnode
,
0
,
"active-discharge"
);
if
(
IS_ERR_OR_NULL
(
rpdata
->
act_dis_gpiod
))
{
rpdata
->
act_dis_gpiod
=
devm_fwnode_gpiod_get
(
tps
->
dev
,
of_fwnode_handle
(
np
),
"active-discharge"
,
GPIOD_ASIS
,
"active-discharge"
);
if
(
IS_ERR
(
rpdata
->
act_dis_gpiod
))
{
ret
=
PTR_ERR
(
rpdata
->
act_dis_gpiod
);
/* Ignore the error other than probe defer */
...
...
drivers/regulator/uniphier-regulator.c
View file @
a21da94f
...
...
@@ -45,7 +45,6 @@ static int uniphier_regulator_probe(struct platform_device *pdev)
struct
regulator_config
config
=
{
};
struct
regulator_dev
*
rdev
;
struct
regmap
*
regmap
;
struct
resource
*
res
;
void
__iomem
*
base
;
const
char
*
name
;
int
i
,
ret
,
nr
;
...
...
@@ -58,8 +57,7 @@ static int uniphier_regulator_probe(struct platform_device *pdev)
if
(
WARN_ON
(
!
priv
->
data
))
return
-
EINVAL
;
res
=
platform_get_resource
(
pdev
,
IORESOURCE_MEM
,
0
);
base
=
devm_ioremap_resource
(
dev
,
res
);
base
=
devm_platform_ioremap_resource
(
pdev
,
0
);
if
(
IS_ERR
(
base
))
return
PTR_ERR
(
base
);
...
...
drivers/regulator/vexpress-regulator.c
View file @
a21da94f
...
...
@@ -75,10 +75,7 @@ static int vexpress_regulator_probe(struct platform_device *pdev)
config
.
of_node
=
pdev
->
dev
.
of_node
;
rdev
=
devm_regulator_register
(
&
pdev
->
dev
,
desc
,
&
config
);
if
(
IS_ERR
(
rdev
))
return
PTR_ERR
(
rdev
);
return
0
;
return
PTR_ERR_OR_ZERO
(
rdev
);
}
static
const
struct
of_device_id
vexpress_regulator_of_match
[]
=
{
...
...
include/dt-bindings/regulator/dlg,da9063-regulator.h
0 → 100644
View file @
a21da94f
/* SPDX-License-Identifier: GPL-2.0 */
#ifndef _DT_BINDINGS_REGULATOR_DLG_DA9063_H
#define _DT_BINDINGS_REGULATOR_DLG_DA9063_H
/*
* These buck mode constants may be used to specify values in device tree
* properties (e.g. regulator-initial-mode).
* A description of the following modes is in the manufacturers datasheet.
*/
#define DA9063_BUCK_MODE_SLEEP 1
#define DA9063_BUCK_MODE_SYNC 2
#define DA9063_BUCK_MODE_AUTO 3
#endif
include/linux/gpio/consumer.h
View file @
a21da94f
...
...
@@ -176,11 +176,15 @@ struct gpio_desc *fwnode_get_named_gpiod(struct fwnode_handle *fwnode,
const
char
*
propname
,
int
index
,
enum
gpiod_flags
dflags
,
const
char
*
label
);
struct
gpio_desc
*
devm_fwnode_get_index_gpiod_from_child
(
struct
device
*
dev
,
const
char
*
con_id
,
int
index
,
struct
fwnode_handle
*
child
,
enum
gpiod_flags
flags
,
const
char
*
label
);
struct
gpio_desc
*
fwnode_gpiod_get_index
(
struct
fwnode_handle
*
fwnode
,
const
char
*
con_id
,
int
index
,
enum
gpiod_flags
flags
,
const
char
*
label
);
struct
gpio_desc
*
devm_fwnode_gpiod_get_index
(
struct
device
*
dev
,
struct
fwnode_handle
*
child
,
const
char
*
con_id
,
int
index
,
enum
gpiod_flags
flags
,
const
char
*
label
);
#else
/* CONFIG_GPIOLIB */
...
...
@@ -531,6 +535,38 @@ struct gpio_desc *fwnode_get_named_gpiod(struct fwnode_handle *fwnode,
return
ERR_PTR
(
-
ENOSYS
);
}
static
inline
struct
gpio_desc
*
fwnode_gpiod_get_index
(
struct
fwnode_handle
*
fwnode
,
const
char
*
con_id
,
int
index
,
enum
gpiod_flags
flags
,
const
char
*
label
)
{
return
ERR_PTR
(
-
ENOSYS
);
}
static
inline
struct
gpio_desc
*
devm_fwnode_gpiod_get_index
(
struct
device
*
dev
,
struct
fwnode_handle
*
fwnode
,
const
char
*
con_id
,
int
index
,
enum
gpiod_flags
flags
,
const
char
*
label
)
{
return
ERR_PTR
(
-
ENOSYS
);
}
#endif
/* CONFIG_GPIOLIB */
static
inline
struct
gpio_desc
*
devm_fwnode_gpiod_get
(
struct
device
*
dev
,
struct
fwnode_handle
*
fwnode
,
const
char
*
con_id
,
enum
gpiod_flags
flags
,
const
char
*
label
)
{
return
devm_fwnode_gpiod_get_index
(
dev
,
fwnode
,
con_id
,
0
,
flags
,
label
);
}
static
inline
struct
gpio_desc
*
devm_fwnode_get_index_gpiod_from_child
(
struct
device
*
dev
,
const
char
*
con_id
,
int
index
,
...
...
@@ -538,11 +574,10 @@ struct gpio_desc *devm_fwnode_get_index_gpiod_from_child(struct device *dev,
enum
gpiod_flags
flags
,
const
char
*
label
)
{
return
ERR_PTR
(
-
ENOSYS
);
return
devm_fwnode_gpiod_get_index
(
dev
,
child
,
con_id
,
index
,
flags
,
label
);
}
#endif
/* CONFIG_GPIOLIB */
static
inline
struct
gpio_desc
*
devm_fwnode_get_gpiod_from_child
(
struct
device
*
dev
,
const
char
*
con_id
,
...
...
@@ -550,8 +585,7 @@ struct gpio_desc *devm_fwnode_get_gpiod_from_child(struct device *dev,
enum
gpiod_flags
flags
,
const
char
*
label
)
{
return
devm_fwnode_get_index_gpiod_from_child
(
dev
,
con_id
,
0
,
child
,
flags
,
label
);
return
devm_fwnode_gpiod_get_index
(
dev
,
child
,
con_id
,
0
,
flags
,
label
);
}
#if IS_ENABLED(CONFIG_GPIOLIB) && IS_ENABLED(CONFIG_OF_GPIO)
...
...
include/linux/regulator/ab8500.h
View file @
a21da94f
...
...
@@ -37,14 +37,11 @@ enum ab8505_regulator_id {
AB8505_LDO_AUX6
,
AB8505_LDO_INTCORE
,
AB8505_LDO_ADC
,
AB8505_LDO_USB
,
AB8505_LDO_AUDIO
,
AB8505_LDO_ANAMIC1
,
AB8505_LDO_ANAMIC2
,
AB8505_LDO_AUX8
,
AB8505_LDO_ANA
,
AB8505_SYSCLKREQ_2
,
AB8505_SYSCLKREQ_4
,
AB8505_NUM_REGULATORS
,
};
...
...
include/linux/regulator/fixed.h
View file @
a21da94f
...
...
@@ -36,6 +36,7 @@ struct fixed_voltage_config {
const
char
*
input_supply
;
int
microvolts
;
unsigned
startup_delay
;
unsigned
int
off_on_delay
;
unsigned
enabled_at_boot
:
1
;
struct
regulator_init_data
*
init_data
;
};
...
...
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