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
24bd2afd
Commit
24bd2afd
authored
Mar 24, 2020
by
Mark Brown
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'regulator-5.7' into regulator-next
parents
bae4cb90
86332c34
Changes
21
Show whitespace changes
Inline
Side-by-side
Showing
21 changed files
with
834 additions
and
45 deletions
+834
-45
Documentation/devicetree/bindings/mfd/qcom-rpm.txt
Documentation/devicetree/bindings/mfd/qcom-rpm.txt
+4
-0
Documentation/devicetree/bindings/regulator/mp886x.txt
Documentation/devicetree/bindings/regulator/mp886x.txt
+27
-0
Documentation/devicetree/bindings/regulator/mps,mp5416.yaml
Documentation/devicetree/bindings/regulator/mps,mp5416.yaml
+78
-0
Documentation/devicetree/bindings/regulator/qcom,smd-rpm-regulator.txt
.../devicetree/bindings/regulator/qcom,smd-rpm-regulator.txt
+13
-0
Documentation/devicetree/bindings/regulator/vqmmc-ipq4019-regulator.yaml
...evicetree/bindings/regulator/vqmmc-ipq4019-regulator.yaml
+42
-0
MAINTAINERS
MAINTAINERS
+2
-1
drivers/regulator/Kconfig
drivers/regulator/Kconfig
+18
-0
drivers/regulator/Makefile
drivers/regulator/Makefile
+2
-0
drivers/regulator/anatop-regulator.c
drivers/regulator/anatop-regulator.c
+7
-3
drivers/regulator/axp20x-regulator.c
drivers/regulator/axp20x-regulator.c
+2
-4
drivers/regulator/core.c
drivers/regulator/core.c
+1
-4
drivers/regulator/da9062-regulator.c
drivers/regulator/da9062-regulator.c
+1
-1
drivers/regulator/da9063-regulator.c
drivers/regulator/da9063-regulator.c
+37
-29
drivers/regulator/mp5416.c
drivers/regulator/mp5416.c
+245
-0
drivers/regulator/mp8859.c
drivers/regulator/mp8859.c
+1
-0
drivers/regulator/mp886x.c
drivers/regulator/mp886x.c
+290
-0
drivers/regulator/pwm-regulator.c
drivers/regulator/pwm-regulator.c
+5
-1
drivers/regulator/qcom_rpm-regulator.c
drivers/regulator/qcom_rpm-regulator.c
+9
-0
drivers/regulator/qcom_smd-regulator.c
drivers/regulator/qcom_smd-regulator.c
+47
-0
include/linux/regulator/driver.h
include/linux/regulator/driver.h
+2
-2
include/linux/soc/qcom/smd-rpm.h
include/linux/soc/qcom/smd-rpm.h
+1
-0
No files found.
Documentation/devicetree/bindings/mfd/qcom-rpm.txt
View file @
24bd2afd
...
...
@@ -61,6 +61,7 @@ Regulator nodes are identified by their compatible:
"qcom,rpm-pm8901-regulators"
"qcom,rpm-pm8921-regulators"
"qcom,rpm-pm8018-regulators"
"qcom,rpm-smb208-regulators"
- vdd_l0_l1_lvs-supply:
- vdd_l2_l11_l12-supply:
...
...
@@ -171,6 +172,9 @@ pm8018:
s1, s2, s3, s4, s5, , l1, l2, l3, l4, l5, l6, l7, l8, l9, l10, l11,
l12, l14, lvs1
smb208:
s1a, s1b, s2a, s2b
The content of each sub-node is defined by the standard binding for regulators -
see regulator.txt - with additional custom properties described below:
...
...
Documentation/devicetree/bindings/regulator/mp886x.txt
0 → 100644
View file @
24bd2afd
Monolithic Power Systems MP8867/MP8869 voltage regulator
Required properties:
- compatible: Must be one of the following.
"mps,mp8867"
"mps,mp8869"
- reg: I2C slave address.
- enable-gpios: enable gpios.
- mps,fb-voltage-divider: An array of two integers containing the resistor
values R1 and R2 of the feedback voltage divider in kilo ohms.
Any property defined as part of the core regulator binding, defined in
./regulator.txt, can also be used.
Example:
vcpu: regulator@62 {
compatible = "mps,mp8869";
regulator-name = "vcpu";
regulator-min-microvolt = <700000>;
regulator-max-microvolt = <850000>;
regulator-always-on;
regulator-boot-on;
enable-gpios = <&porta 1 GPIO_ACTIVE_LOW>;
mps,fb-voltage-divider = <80 240>;
reg = <0x62>;
};
Documentation/devicetree/bindings/regulator/mps,mp5416.yaml
0 → 100644
View file @
24bd2afd
# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
%YAML
1.2
---
$id
:
http://devicetree.org/schemas/regulator/mps,mp5416.yaml#
$schema
:
http://devicetree.org/meta-schemas/core.yaml#
title
:
Monolithic Power System MP5416 PMIC
maintainers
:
-
Saravanan Sekar <sravanhome@gmail.com>
properties
:
$nodename
:
pattern
:
"
^pmic@[0-9a-f]{1,2}$"
compatible
:
enum
:
-
mps,mp5416
reg
:
maxItems
:
1
regulators
:
type
:
object
description
:
|
list of regulators provided by this controller, must be named
after their hardware counterparts BUCK[1-4] and LDO[1-4]
patternProperties
:
"
^buck[1-4]$"
:
allOf
:
-
$ref
:
"
regulator.yaml#"
type
:
object
"
^ldo[1-4]$"
:
allOf
:
-
$ref
:
"
regulator.yaml#"
type
:
object
additionalProperties
:
false
additionalProperties
:
false
required
:
-
compatible
-
reg
-
regulators
additionalProperties
:
false
examples
:
-
|
i2c {
#address-cells = <1>;
#size-cells = <0>;
pmic@69 {
compatible = "mps,mp5416";
reg = <0x69>;
regulators {
buck1 {
regulator-name = "buck1";
regulator-min-microvolt = <600000>;
regulator-max-microvolt = <2187500>;
regulator-min-microamp = <3800000>;
regulator-max-microamp = <6800000>;
regulator-boot-on;
};
ldo2 {
regulator-name = "ldo2";
regulator-min-microvolt = <800000>;
regulator-max-microvolt = <3975000>;
};
};
};
};
...
Documentation/devicetree/bindings/regulator/qcom,smd-rpm-regulator.txt
View file @
24bd2afd
...
...
@@ -26,6 +26,7 @@ Regulator nodes are identified by their compatible:
"qcom,rpm-pm8994-regulators"
"qcom,rpm-pm8998-regulators"
"qcom,rpm-pma8084-regulators"
"qcom,rpm-pmi8994-regulators"
"qcom,rpm-pmi8998-regulators"
"qcom,rpm-pms405-regulators"
...
...
@@ -143,6 +144,15 @@ 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_bst_byp-supply:
Usage: optional (pmi8994 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:
...
...
@@ -259,6 +269,9 @@ pma8084:
l6, l7, l8, l9, l10, l11, l12, l13, l14, l15, l16, l17, l18, l19, l20,
l21, l22, l23, l24, l25, l26, l27, lvs1, lvs2, lvs3, lvs4, 5vs1
pmi8994:
s1, s2, s3, boost-bypass
pmi8998:
bob
...
...
Documentation/devicetree/bindings/regulator/vqmmc-ipq4019-regulator.yaml
0 → 100644
View file @
24bd2afd
# SPDX-License-Identifier: GPL-2.0
%YAML
1.2
---
$id
:
http://devicetree.org/schemas/regulator/vqmmc-ipq4019-regulator.yaml#
$schema
:
http://devicetree.org/meta-schemas/core.yaml#
title
:
Qualcomm IPQ4019 VQMMC SD LDO regulator
maintainers
:
-
Robert Marko <robert.marko@sartura.hr>
description
:
|
Qualcomm IPQ4019 SoC-s feature a built a build SD/EMMC controller,
in order to support both 1.8 and 3V I/O voltage levels an LDO
controller is also embedded.
allOf
:
-
$ref
:
"
regulator.yaml#"
properties
:
compatible
:
const
:
qcom,vqmmc-ipq4019-regulator
reg
:
maxItems
:
1
required
:
-
compatible
-
reg
examples
:
-
|
regulator@1948000 {
compatible = "qcom,vqmmc-ipq4019-regulator";
reg = <0x01948000 0x4>;
regulator-name = "vqmmc";
regulator-min-microvolt = <1500000>;
regulator-max-microvolt = <3000000>;
regulator-always-on;
status = "disabled";
};
...
MAINTAINERS
View file @
24bd2afd
...
...
@@ -11256,7 +11256,8 @@ F: drivers/tty/mxser.*
MONOLITHIC POWER SYSTEM PMIC DRIVER
M: Saravanan Sekar <sravanhome@gmail.com>
S: Maintained
F: Documentation/devicetree/bindings/regulator/mpq7920.yaml
F: Documentation/devicetree/bindings/regulator/mps,mp*.yaml
F: drivers/regulator/mp5416.c
F: drivers/regulator/mpq7920.c
F: drivers/regulator/mpq7920.h
...
...
drivers/regulator/Kconfig
View file @
24bd2afd
...
...
@@ -107,6 +107,7 @@ config REGULATOR_AD5398
config REGULATOR_ANATOP
tristate "Freescale i.MX on-chip ANATOP LDO regulators"
depends on ARCH_MXC || COMPILE_TEST
depends on MFD_SYSCON
help
Say y here to support Freescale i.MX on-chip ANATOP LDOs
...
...
@@ -613,6 +614,16 @@ config REGULATOR_MCP16502
through the regulator interface. In addition it enables
suspend-to-ram/standby transition.
config REGULATOR_MP5416
tristate "Monolithic MP5416 PMIC"
depends on I2C && OF
select REGMAP_I2C
help
Say y here to support the MP5416 PMIC. This will enable supports
the software controllable 4 buck and 4 LDO regulators.
Say M here if you want to include support for the regulator as a
module.
config REGULATOR_MP8859
tristate "MPS MP8859 regulator driver"
depends on I2C
...
...
@@ -624,6 +635,13 @@ config REGULATOR_MP8859
Say M here if you want to include support for the regulator as a
module. The module will be named "mp8859".
config REGULATOR_MP886X
tristate "MPS MP8869 regulator driver"
depends on I2C && (OF || COMPILE_TEST)
select REGMAP_I2C
help
This driver supports the MP8869 voltage regulator.
config REGULATOR_MPQ7920
tristate "Monolithic MPQ7920 PMIC"
depends on I2C && OF
...
...
drivers/regulator/Makefile
View file @
24bd2afd
...
...
@@ -78,7 +78,9 @@ obj-$(CONFIG_REGULATOR_MC13783) += mc13783-regulator.o
obj-$(CONFIG_REGULATOR_MC13892)
+=
mc13892-regulator.o
obj-$(CONFIG_REGULATOR_MC13XXX_CORE)
+=
mc13xxx-regulator-core.o
obj-$(CONFIG_REGULATOR_MCP16502)
+=
mcp16502.o
obj-$(CONFIG_REGULATOR_MP5416)
+=
mp5416.o
obj-$(CONFIG_REGULATOR_MP8859)
+=
mp8859.o
obj-$(CONFIG_REGULATOR_MP886X)
+=
mp886x.o
obj-$(CONFIG_REGULATOR_MPQ7920)
+=
mpq7920.o
obj-$(CONFIG_REGULATOR_MT6311)
+=
mt6311-regulator.o
obj-$(CONFIG_REGULATOR_MT6323)
+=
mt6323-regulator.o
...
...
drivers/regulator/anatop-regulator.c
View file @
24bd2afd
...
...
@@ -305,9 +305,13 @@ static int anatop_regulator_probe(struct platform_device *pdev)
/* register regulator */
rdev
=
devm_regulator_register
(
dev
,
rdesc
,
&
config
);
if
(
IS_ERR
(
rdev
))
{
dev_err
(
dev
,
"failed to register %s
\n
"
,
ret
=
PTR_ERR
(
rdev
);
if
(
ret
==
-
EPROBE_DEFER
)
dev_dbg
(
dev
,
"failed to register %s, deferring...
\n
"
,
rdesc
->
name
);
return
PTR_ERR
(
rdev
);
else
dev_err
(
dev
,
"failed to register %s
\n
"
,
rdesc
->
name
);
return
ret
;
}
platform_set_drvdata
(
pdev
,
rdev
);
...
...
drivers/regulator/axp20x-regulator.c
View file @
24bd2afd
...
...
@@ -381,8 +381,7 @@ static int axp20x_set_ramp_delay(struct regulator_dev *rdev, int ramp)
mask
=
AXP20X_DCDC2_LDO3_V_RAMP_DCDC2_RATE_MASK
|
AXP20X_DCDC2_LDO3_V_RAMP_DCDC2_EN_MASK
;
enable
=
(
ramp
>
0
)
?
AXP20X_DCDC2_LDO3_V_RAMP_DCDC2_EN
:
!
AXP20X_DCDC2_LDO3_V_RAMP_DCDC2_EN
;
AXP20X_DCDC2_LDO3_V_RAMP_DCDC2_EN
:
0
;
break
;
}
...
...
@@ -393,8 +392,7 @@ static int axp20x_set_ramp_delay(struct regulator_dev *rdev, int ramp)
mask
=
AXP20X_DCDC2_LDO3_V_RAMP_LDO3_RATE_MASK
|
AXP20X_DCDC2_LDO3_V_RAMP_LDO3_EN_MASK
;
enable
=
(
ramp
>
0
)
?
AXP20X_DCDC2_LDO3_V_RAMP_LDO3_EN
:
!
AXP20X_DCDC2_LDO3_V_RAMP_LDO3_EN
;
AXP20X_DCDC2_LDO3_V_RAMP_LDO3_EN
:
0
;
break
;
}
...
...
drivers/regulator/core.c
View file @
24bd2afd
...
...
@@ -1849,7 +1849,6 @@ struct regulator *_regulator_get(struct device *dev, const char *id,
{
struct
regulator_dev
*
rdev
;
struct
regulator
*
regulator
;
const
char
*
devname
=
dev
?
dev_name
(
dev
)
:
"deviceless"
;
struct
device_link
*
link
;
int
ret
;
...
...
@@ -1887,9 +1886,7 @@ struct regulator *_regulator_get(struct device *dev, const char *id,
* enabled, even if it isn't hooked up, and just
* provide a dummy.
*/
dev_warn
(
dev
,
"%s supply %s not found, using dummy regulator
\n
"
,
devname
,
id
);
dev_warn
(
dev
,
"supply %s not found, using dummy regulator
\n
"
,
id
);
rdev
=
dummy_regulator_rdev
;
get_device
(
&
rdev
->
dev
);
break
;
...
...
drivers/regulator/da9062-regulator.c
View file @
24bd2afd
...
...
@@ -73,7 +73,7 @@ struct da9062_regulators {
int
irq_ldo_lim
;
unsigned
n_regulators
;
/* Array size to be defined during init. Keep at end. */
struct
da9062_regulator
regulator
[
0
];
struct
da9062_regulator
regulator
[];
};
/* Regulator operations */
...
...
drivers/regulator/da9063-regulator.c
View file @
24bd2afd
...
...
@@ -66,7 +66,7 @@ struct da9063_regulator_data {
};
struct
da9063_regulators_pdata
{
unsigned
n_regulators
;
unsigned
int
n_regulators
;
struct
da9063_regulator_data
*
regulator_data
;
};
...
...
@@ -133,7 +133,7 @@ struct da9063_regulator_info {
/* Defines asignment of regulators info table to chip model */
struct
da9063_dev_model
{
const
struct
da9063_regulator_info
*
regulator_info
;
unsigned
n_regulators
;
unsigned
int
n_regulators
;
enum
da9063_type
type
;
};
...
...
@@ -152,9 +152,9 @@ struct da9063_regulator {
/* Encapsulates all information for the regulators driver */
struct
da9063_regulators
{
unsigned
n_regulators
;
unsigned
int
n_regulators
;
/* Array size to be defined during init. Keep at end. */
struct
da9063_regulator
regulator
[
0
];
struct
da9063_regulator
regulator
[];
};
/* BUCK modes for DA9063 */
...
...
@@ -167,38 +167,46 @@ enum {
/* Regulator operations */
/* Current limits array (in uA) for BCORE1, BCORE2, BPRO.
Entry indexes corresponds to register values. */
/*
* Current limits array (in uA) for BCORE1, BCORE2, BPRO.
* Entry indexes corresponds to register values.
*/
static
const
unsigned
int
da9063_buck_a_limits
[]
=
{
500000
,
600000
,
700000
,
800000
,
900000
,
1000000
,
1100000
,
1200000
,
1300000
,
1400000
,
1500000
,
1600000
,
1700000
,
1800000
,
1900000
,
2000000
};
/* Current limits array (in uA) for BMEM, BIO, BPERI.
Entry indexes corresponds to register values. */
/*
* Current limits array (in uA) for BMEM, BIO, BPERI.
* Entry indexes corresponds to register values.
*/
static
const
unsigned
int
da9063_buck_b_limits
[]
=
{
1500000
,
1600000
,
1700000
,
1800000
,
1900000
,
2000000
,
2100000
,
2200000
,
2300000
,
2400000
,
2500000
,
2600000
,
2700000
,
2800000
,
2900000
,
3000000
};
/* Current limits array (in uA) for merged BCORE1 and BCORE2.
Entry indexes corresponds to register values. */
/*
* Current limits array (in uA) for merged BCORE1 and BCORE2.
* Entry indexes corresponds to register values.
*/
static
const
unsigned
int
da9063_bcores_merged_limits
[]
=
{
1000000
,
1200000
,
1400000
,
1600000
,
1800000
,
2000000
,
2200000
,
2400000
,
2600000
,
2800000
,
3000000
,
3200000
,
3400000
,
3600000
,
3800000
,
4000000
};
/* Current limits array (in uA) for merged BMEM and BIO.
Entry indexes corresponds to register values. */
/*
* Current limits array (in uA) for merged BMEM and BIO.
* Entry indexes corresponds to register values.
*/
static
const
unsigned
int
da9063_bmem_bio_merged_limits
[]
=
{
3000000
,
3200000
,
3400000
,
3600000
,
3800000
,
4000000
,
4200000
,
4400000
,
4600000
,
4800000
,
5000000
,
5200000
,
5400000
,
5600000
,
5800000
,
6000000
};
static
int
da9063_buck_set_mode
(
struct
regulator_dev
*
rdev
,
unsigned
mode
)
static
int
da9063_buck_set_mode
(
struct
regulator_dev
*
rdev
,
unsigned
int
mode
)
{
struct
da9063_regulator
*
regl
=
rdev_get_drvdata
(
rdev
);
unsigned
val
;
unsigned
int
val
;
switch
(
mode
)
{
case
REGULATOR_MODE_FAST
:
...
...
@@ -223,7 +231,7 @@ static int da9063_buck_set_mode(struct regulator_dev *rdev, unsigned mode)
* There are 3 modes to map to: FAST, NORMAL, and STANDBY.
*/
static
unsigned
da9063_buck_get_mode
(
struct
regulator_dev
*
rdev
)
static
unsigned
int
da9063_buck_get_mode
(
struct
regulator_dev
*
rdev
)
{
struct
da9063_regulator
*
regl
=
rdev_get_drvdata
(
rdev
);
unsigned
int
val
;
...
...
@@ -261,10 +269,10 @@ static unsigned da9063_buck_get_mode(struct regulator_dev *rdev)
* There are 2 modes to map to: NORMAL and STANDBY (sleep) for each state.
*/
static
int
da9063_ldo_set_mode
(
struct
regulator_dev
*
rdev
,
unsigned
mode
)
static
int
da9063_ldo_set_mode
(
struct
regulator_dev
*
rdev
,
unsigned
int
mode
)
{
struct
da9063_regulator
*
regl
=
rdev_get_drvdata
(
rdev
);
unsigned
val
;
unsigned
int
val
;
switch
(
mode
)
{
case
REGULATOR_MODE_NORMAL
:
...
...
@@ -280,7 +288,7 @@ static int da9063_ldo_set_mode(struct regulator_dev *rdev, unsigned mode)
return
regmap_field_write
(
regl
->
sleep
,
val
);
}
static
unsigned
da9063_ldo_get_mode
(
struct
regulator_dev
*
rdev
)
static
unsigned
int
da9063_ldo_get_mode
(
struct
regulator_dev
*
rdev
)
{
struct
da9063_regulator
*
regl
=
rdev_get_drvdata
(
rdev
);
int
ret
,
val
;
...
...
@@ -361,7 +369,8 @@ static int da9063_suspend_disable(struct regulator_dev *rdev)
return
regmap_field_write
(
regl
->
suspend
,
0
);
}
static
int
da9063_buck_set_suspend_mode
(
struct
regulator_dev
*
rdev
,
unsigned
mode
)
static
int
da9063_buck_set_suspend_mode
(
struct
regulator_dev
*
rdev
,
unsigned
int
mode
)
{
struct
da9063_regulator
*
regl
=
rdev_get_drvdata
(
rdev
);
int
val
;
...
...
@@ -383,10 +392,11 @@ static int da9063_buck_set_suspend_mode(struct regulator_dev *rdev, unsigned mod
return
regmap_field_write
(
regl
->
mode
,
val
);
}
static
int
da9063_ldo_set_suspend_mode
(
struct
regulator_dev
*
rdev
,
unsigned
mode
)
static
int
da9063_ldo_set_suspend_mode
(
struct
regulator_dev
*
rdev
,
unsigned
int
mode
)
{
struct
da9063_regulator
*
regl
=
rdev_get_drvdata
(
rdev
);
unsigned
val
;
unsigned
int
val
;
switch
(
mode
)
{
case
REGULATOR_MODE_NORMAL
:
...
...
@@ -553,7 +563,7 @@ static irqreturn_t da9063_ldo_lim_event(int irq, void *data)
struct
da9063_regulators
*
regulators
=
data
;
struct
da9063
*
hw
=
regulators
->
regulator
[
0
].
hw
;
struct
da9063_regulator
*
regl
;
int
bits
,
i
,
ret
;
int
bits
,
i
,
ret
;
ret
=
regmap_read
(
hw
->
regmap
,
DA9063_REG_STATUS_D
,
&
bits
);
if
(
ret
<
0
)
...
...
@@ -827,12 +837,10 @@ static int da9063_regulator_probe(struct platform_device *pdev)
NULL
,
da9063_ldo_lim_event
,
IRQF_TRIGGER_LOW
|
IRQF_ONESHOT
,
"LDO_LIM"
,
regulators
);
if
(
ret
)
{
if
(
ret
)
dev_err
(
&
pdev
->
dev
,
"Failed to request LDO_LIM IRQ.
\n
"
);
return
ret
;
}
return
0
;
return
ret
;
}
static
struct
platform_driver
da9063_regulator_driver
=
{
...
...
drivers/regulator/mp5416.c
0 → 100644
View file @
24bd2afd
// SPDX-License-Identifier: GPL-2.0+
//
// mp5416.c - regulator driver for mps mp5416
//
// Copyright 2020 Monolithic Power Systems, Inc
//
// Author: Saravanan Sekar <sravanhome@gmail.com>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/init.h>
#include <linux/err.h>
#include <linux/platform_device.h>
#include <linux/regmap.h>
#include <linux/regulator/driver.h>
#include <linux/i2c.h>
#define MP5416_REG_CTL0 0x00
#define MP5416_REG_CTL1 0x01
#define MP5416_REG_CTL2 0x02
#define MP5416_REG_ILIM 0x03
#define MP5416_REG_BUCK1 0x04
#define MP5416_REG_BUCK2 0x05
#define MP5416_REG_BUCK3 0x06
#define MP5416_REG_BUCK4 0x07
#define MP5416_REG_LDO1 0x08
#define MP5416_REG_LDO2 0x09
#define MP5416_REG_LDO3 0x0a
#define MP5416_REG_LDO4 0x0b
#define MP5416_REGULATOR_EN BIT(7)
#define MP5416_MASK_VSET 0x7f
#define MP5416_MASK_BUCK1_ILIM 0xc0
#define MP5416_MASK_BUCK2_ILIM 0x0c
#define MP5416_MASK_BUCK3_ILIM 0x30
#define MP5416_MASK_BUCK4_ILIM 0x03
#define MP5416_MASK_DVS_SLEWRATE 0xc0
/* values in uV */
#define MP5416_VOLT1_MIN 600000
#define MP5416_VOLT1_MAX 2187500
#define MP5416_VOLT1_STEP 12500
#define MP5416_VOLT2_MIN 800000
#define MP5416_VOLT2_MAX 3975000
#define MP5416_VOLT2_STEP 25000
#define MP5416_VOLT1_RANGE \
((MP5416_VOLT1_MAX - MP5416_VOLT1_MIN)/MP5416_VOLT1_STEP + 1)
#define MP5416_VOLT2_RANGE \
((MP5416_VOLT2_MAX - MP5416_VOLT2_MIN)/MP5416_VOLT2_STEP + 1)
#define MP5416BUCK(_name, _id, _ilim, _dreg, _dval, _vsel) \
[MP5416_BUCK ## _id] = { \
.id = MP5416_BUCK ## _id, \
.name = _name, \
.of_match = _name, \
.regulators_node = "regulators", \
.ops = &mp5416_buck_ops, \
.min_uV = MP5416_VOLT ##_vsel## _MIN, \
.uV_step = MP5416_VOLT ##_vsel## _STEP, \
.n_voltages = MP5416_VOLT ##_vsel## _RANGE, \
.curr_table = _ilim, \
.n_current_limits = ARRAY_SIZE(_ilim), \
.csel_reg = MP5416_REG_ILIM, \
.csel_mask = MP5416_MASK_BUCK ## _id ##_ILIM, \
.vsel_reg = MP5416_REG_BUCK ## _id, \
.vsel_mask = MP5416_MASK_VSET, \
.enable_reg = MP5416_REG_BUCK ## _id, \
.enable_mask = MP5416_REGULATOR_EN, \
.active_discharge_on = _dval, \
.active_discharge_reg = _dreg, \
.active_discharge_mask = _dval, \
.owner = THIS_MODULE, \
}
#define MP5416LDO(_name, _id, _dval) \
[MP5416_LDO ## _id] = { \
.id = MP5416_LDO ## _id, \
.name = _name, \
.of_match = _name, \
.regulators_node = "regulators", \
.ops = &mp5416_ldo_ops, \
.min_uV = MP5416_VOLT2_MIN, \
.uV_step = MP5416_VOLT2_STEP, \
.n_voltages = MP5416_VOLT2_RANGE, \
.vsel_reg = MP5416_REG_LDO ##_id, \
.vsel_mask = MP5416_MASK_VSET, \
.enable_reg = MP5416_REG_LDO ##_id, \
.enable_mask = MP5416_REGULATOR_EN, \
.active_discharge_on = _dval, \
.active_discharge_reg = MP5416_REG_CTL2, \
.active_discharge_mask = _dval, \
.owner = THIS_MODULE, \
}
enum
mp5416_regulators
{
MP5416_BUCK1
,
MP5416_BUCK2
,
MP5416_BUCK3
,
MP5416_BUCK4
,
MP5416_LDO1
,
MP5416_LDO2
,
MP5416_LDO3
,
MP5416_LDO4
,
MP5416_MAX_REGULATORS
,
};
static
const
struct
regmap_config
mp5416_regmap_config
=
{
.
reg_bits
=
8
,
.
val_bits
=
8
,
.
max_register
=
0x0d
,
};
/* Current limits array (in uA)
* ILIM1 & ILIM3
*/
static
const
unsigned
int
mp5416_I_limits1
[]
=
{
3800000
,
4600000
,
5600000
,
6800000
};
/* ILIM2 & ILIM4 */
static
const
unsigned
int
mp5416_I_limits2
[]
=
{
2200000
,
3200000
,
4200000
,
5200000
};
static
int
mp5416_set_ramp_delay
(
struct
regulator_dev
*
rdev
,
int
ramp_delay
);
static
const
struct
regulator_ops
mp5416_ldo_ops
=
{
.
enable
=
regulator_enable_regmap
,
.
disable
=
regulator_disable_regmap
,
.
is_enabled
=
regulator_is_enabled_regmap
,
.
list_voltage
=
regulator_list_voltage_linear
,
.
map_voltage
=
regulator_map_voltage_linear
,
.
get_voltage_sel
=
regulator_get_voltage_sel_regmap
,
.
set_voltage_sel
=
regulator_set_voltage_sel_regmap
,
.
set_active_discharge
=
regulator_set_active_discharge_regmap
,
};
static
const
struct
regulator_ops
mp5416_buck_ops
=
{
.
enable
=
regulator_enable_regmap
,
.
disable
=
regulator_disable_regmap
,
.
is_enabled
=
regulator_is_enabled_regmap
,
.
list_voltage
=
regulator_list_voltage_linear
,
.
map_voltage
=
regulator_map_voltage_linear
,
.
get_voltage_sel
=
regulator_get_voltage_sel_regmap
,
.
set_voltage_sel
=
regulator_set_voltage_sel_regmap
,
.
set_active_discharge
=
regulator_set_active_discharge_regmap
,
.
get_current_limit
=
regulator_get_current_limit_regmap
,
.
set_current_limit
=
regulator_set_current_limit_regmap
,
.
set_ramp_delay
=
mp5416_set_ramp_delay
,
};
static
struct
regulator_desc
mp5416_regulators_desc
[
MP5416_MAX_REGULATORS
]
=
{
MP5416BUCK
(
"buck1"
,
1
,
mp5416_I_limits1
,
MP5416_REG_CTL1
,
BIT
(
0
),
1
),
MP5416BUCK
(
"buck2"
,
2
,
mp5416_I_limits2
,
MP5416_REG_CTL1
,
BIT
(
1
),
2
),
MP5416BUCK
(
"buck3"
,
3
,
mp5416_I_limits1
,
MP5416_REG_CTL1
,
BIT
(
2
),
1
),
MP5416BUCK
(
"buck4"
,
4
,
mp5416_I_limits2
,
MP5416_REG_CTL2
,
BIT
(
5
),
2
),
MP5416LDO
(
"ldo1"
,
1
,
BIT
(
4
)),
MP5416LDO
(
"ldo2"
,
2
,
BIT
(
3
)),
MP5416LDO
(
"ldo3"
,
3
,
BIT
(
2
)),
MP5416LDO
(
"ldo4"
,
4
,
BIT
(
1
)),
};
/*
* DVS ramp rate BUCK1 to BUCK4
* 00: 32mV/us
* 01: 16mV/us
* 10: 8mV/us
* 11: 4mV/us
*/
static
int
mp5416_set_ramp_delay
(
struct
regulator_dev
*
rdev
,
int
ramp_delay
)
{
unsigned
int
ramp_val
;
if
(
ramp_delay
>
32000
||
ramp_delay
<
0
)
return
-
EINVAL
;
if
(
ramp_delay
<=
4000
)
ramp_val
=
3
;
else
if
(
ramp_delay
<=
8000
)
ramp_val
=
2
;
else
if
(
ramp_delay
<=
16000
)
ramp_val
=
1
;
else
ramp_val
=
0
;
return
regmap_update_bits
(
rdev
->
regmap
,
MP5416_REG_CTL2
,
MP5416_MASK_DVS_SLEWRATE
,
ramp_val
<<
6
);
}
static
int
mp5416_i2c_probe
(
struct
i2c_client
*
client
)
{
struct
device
*
dev
=
&
client
->
dev
;
struct
regulator_config
config
=
{
NULL
,
};
struct
regulator_dev
*
rdev
;
struct
regmap
*
regmap
;
int
i
;
regmap
=
devm_regmap_init_i2c
(
client
,
&
mp5416_regmap_config
);
if
(
IS_ERR
(
regmap
))
{
dev_err
(
dev
,
"Failed to allocate regmap!
\n
"
);
return
PTR_ERR
(
regmap
);
}
config
.
dev
=
dev
;
config
.
regmap
=
regmap
;
for
(
i
=
0
;
i
<
MP5416_MAX_REGULATORS
;
i
++
)
{
rdev
=
devm_regulator_register
(
dev
,
&
mp5416_regulators_desc
[
i
],
&
config
);
if
(
IS_ERR
(
rdev
))
{
dev_err
(
dev
,
"Failed to register regulator!
\n
"
);
return
PTR_ERR
(
rdev
);
}
}
return
0
;
}
static
const
struct
of_device_id
mp5416_of_match
[]
=
{
{
.
compatible
=
"mps,mp5416"
},
{},
};
MODULE_DEVICE_TABLE
(
of
,
mp5416_of_match
);
static
const
struct
i2c_device_id
mp5416_id
[]
=
{
{
"mp5416"
,
},
{
},
};
MODULE_DEVICE_TABLE
(
i2c
,
mp5416_id
);
static
struct
i2c_driver
mp5416_regulator_driver
=
{
.
driver
=
{
.
name
=
"mp5416"
,
.
of_match_table
=
of_match_ptr
(
mp5416_of_match
),
},
.
probe_new
=
mp5416_i2c_probe
,
.
id_table
=
mp5416_id
,
};
module_i2c_driver
(
mp5416_regulator_driver
);
MODULE_AUTHOR
(
"Saravanan Sekar <sravanhome@gmail.com>"
);
MODULE_DESCRIPTION
(
"MP5416 PMIC regulator driver"
);
MODULE_LICENSE
(
"GPL"
);
drivers/regulator/mp8859.c
View file @
24bd2afd
...
...
@@ -95,6 +95,7 @@ static const struct regulator_desc mp8859_regulators[] = {
.
id
=
0
,
.
type
=
REGULATOR_VOLTAGE
,
.
name
=
"mp8859_dcdc"
,
.
supply_name
=
"vin"
,
.
of_match
=
of_match_ptr
(
"mp8859_dcdc"
),
.
n_voltages
=
VOL_MAX_IDX
+
1
,
.
linear_ranges
=
mp8859_dcdc_ranges
,
...
...
drivers/regulator/mp886x.c
0 → 100644
View file @
24bd2afd
// SPDX-License-Identifier: GPL-2.0
//
// MP8867/MP8869 regulator driver
//
// Copyright (C) 2020 Synaptics Incorporated
//
// Author: Jisheng Zhang <jszhang@kernel.org>
#include <linux/gpio/consumer.h>
#include <linux/i2c.h>
#include <linux/module.h>
#include <linux/of_device.h>
#include <linux/regmap.h>
#include <linux/regulator/driver.h>
#include <linux/regulator/of_regulator.h>
#define MP886X_VSEL 0x00
#define MP886X_V_BOOT (1 << 7)
#define MP886X_SYSCNTLREG1 0x01
#define MP886X_MODE (1 << 0)
#define MP886X_GO (1 << 6)
#define MP886X_EN (1 << 7)
struct
mp886x_device_info
{
struct
device
*
dev
;
struct
regulator_desc
desc
;
struct
regulator_init_data
*
regulator
;
struct
gpio_desc
*
en_gpio
;
u32
r
[
2
];
unsigned
int
sel
;
};
static
int
mp886x_set_mode
(
struct
regulator_dev
*
rdev
,
unsigned
int
mode
)
{
switch
(
mode
)
{
case
REGULATOR_MODE_FAST
:
regmap_update_bits
(
rdev
->
regmap
,
MP886X_SYSCNTLREG1
,
MP886X_MODE
,
MP886X_MODE
);
break
;
case
REGULATOR_MODE_NORMAL
:
regmap_update_bits
(
rdev
->
regmap
,
MP886X_SYSCNTLREG1
,
MP886X_MODE
,
0
);
break
;
default:
return
-
EINVAL
;
}
return
0
;
}
static
unsigned
int
mp886x_get_mode
(
struct
regulator_dev
*
rdev
)
{
u32
val
;
int
ret
;
ret
=
regmap_read
(
rdev
->
regmap
,
MP886X_SYSCNTLREG1
,
&
val
);
if
(
ret
<
0
)
return
ret
;
if
(
val
&
MP886X_MODE
)
return
REGULATOR_MODE_FAST
;
else
return
REGULATOR_MODE_NORMAL
;
}
static
int
mp8869_set_voltage_sel
(
struct
regulator_dev
*
rdev
,
unsigned
int
sel
)
{
int
ret
;
ret
=
regmap_update_bits
(
rdev
->
regmap
,
MP886X_SYSCNTLREG1
,
MP886X_GO
,
MP886X_GO
);
if
(
ret
<
0
)
return
ret
;
sel
<<=
ffs
(
rdev
->
desc
->
vsel_mask
)
-
1
;
return
regmap_update_bits
(
rdev
->
regmap
,
rdev
->
desc
->
vsel_reg
,
MP886X_V_BOOT
|
rdev
->
desc
->
vsel_mask
,
sel
);
}
static
inline
unsigned
int
mp8869_scale
(
unsigned
int
uv
,
u32
r1
,
u32
r2
)
{
u32
tmp
=
uv
*
r1
/
r2
;
return
uv
+
tmp
;
}
static
int
mp8869_get_voltage_sel
(
struct
regulator_dev
*
rdev
)
{
struct
mp886x_device_info
*
di
=
rdev_get_drvdata
(
rdev
);
int
ret
,
uv
;
unsigned
int
val
;
bool
fbloop
;
ret
=
regmap_read
(
rdev
->
regmap
,
rdev
->
desc
->
vsel_reg
,
&
val
);
if
(
ret
)
return
ret
;
fbloop
=
val
&
MP886X_V_BOOT
;
if
(
fbloop
)
{
uv
=
rdev
->
desc
->
min_uV
;
uv
=
mp8869_scale
(
uv
,
di
->
r
[
0
],
di
->
r
[
1
]);
return
regulator_map_voltage_linear
(
rdev
,
uv
,
uv
);
}
val
&=
rdev
->
desc
->
vsel_mask
;
val
>>=
ffs
(
rdev
->
desc
->
vsel_mask
)
-
1
;
return
val
;
}
static
const
struct
regulator_ops
mp8869_regulator_ops
=
{
.
set_voltage_sel
=
mp8869_set_voltage_sel
,
.
get_voltage_sel
=
mp8869_get_voltage_sel
,
.
set_voltage_time_sel
=
regulator_set_voltage_time_sel
,
.
map_voltage
=
regulator_map_voltage_linear
,
.
list_voltage
=
regulator_list_voltage_linear
,
.
enable
=
regulator_enable_regmap
,
.
disable
=
regulator_disable_regmap
,
.
is_enabled
=
regulator_is_enabled_regmap
,
.
set_mode
=
mp886x_set_mode
,
.
get_mode
=
mp886x_get_mode
,
};
static
int
mp8867_set_voltage_sel
(
struct
regulator_dev
*
rdev
,
unsigned
int
sel
)
{
struct
mp886x_device_info
*
di
=
rdev_get_drvdata
(
rdev
);
int
ret
,
delta
;
ret
=
mp8869_set_voltage_sel
(
rdev
,
sel
);
if
(
ret
<
0
)
return
ret
;
delta
=
di
->
sel
-
sel
;
if
(
abs
(
delta
)
<=
5
)
ret
=
regmap_update_bits
(
rdev
->
regmap
,
MP886X_SYSCNTLREG1
,
MP886X_GO
,
0
);
di
->
sel
=
sel
;
return
ret
;
}
static
int
mp8867_get_voltage_sel
(
struct
regulator_dev
*
rdev
)
{
struct
mp886x_device_info
*
di
=
rdev_get_drvdata
(
rdev
);
int
ret
,
uv
;
unsigned
int
val
;
bool
fbloop
;
ret
=
regmap_read
(
rdev
->
regmap
,
rdev
->
desc
->
vsel_reg
,
&
val
);
if
(
ret
)
return
ret
;
fbloop
=
val
&
MP886X_V_BOOT
;
val
&=
rdev
->
desc
->
vsel_mask
;
val
>>=
ffs
(
rdev
->
desc
->
vsel_mask
)
-
1
;
if
(
fbloop
)
{
uv
=
regulator_list_voltage_linear
(
rdev
,
val
);
uv
=
mp8869_scale
(
uv
,
di
->
r
[
0
],
di
->
r
[
1
]);
return
regulator_map_voltage_linear
(
rdev
,
uv
,
uv
);
}
return
val
;
}
static
const
struct
regulator_ops
mp8867_regulator_ops
=
{
.
set_voltage_sel
=
mp8867_set_voltage_sel
,
.
get_voltage_sel
=
mp8867_get_voltage_sel
,
.
set_voltage_time_sel
=
regulator_set_voltage_time_sel
,
.
map_voltage
=
regulator_map_voltage_linear
,
.
list_voltage
=
regulator_list_voltage_linear
,
.
enable
=
regulator_enable_regmap
,
.
disable
=
regulator_disable_regmap
,
.
is_enabled
=
regulator_is_enabled_regmap
,
.
set_mode
=
mp886x_set_mode
,
.
get_mode
=
mp886x_get_mode
,
};
static
int
mp886x_regulator_register
(
struct
mp886x_device_info
*
di
,
struct
regulator_config
*
config
)
{
struct
regulator_desc
*
rdesc
=
&
di
->
desc
;
struct
regulator_dev
*
rdev
;
rdesc
->
name
=
"mp886x-reg"
;
rdesc
->
supply_name
=
"vin"
;
rdesc
->
ops
=
of_device_get_match_data
(
di
->
dev
);
rdesc
->
type
=
REGULATOR_VOLTAGE
;
rdesc
->
n_voltages
=
128
;
rdesc
->
enable_reg
=
MP886X_SYSCNTLREG1
;
rdesc
->
enable_mask
=
MP886X_EN
;
rdesc
->
min_uV
=
600000
;
rdesc
->
uV_step
=
10000
;
rdesc
->
vsel_reg
=
MP886X_VSEL
;
rdesc
->
vsel_mask
=
0x3f
;
rdesc
->
owner
=
THIS_MODULE
;
rdev
=
devm_regulator_register
(
di
->
dev
,
&
di
->
desc
,
config
);
if
(
IS_ERR
(
rdev
))
return
PTR_ERR
(
rdev
);
di
->
sel
=
rdesc
->
ops
->
get_voltage_sel
(
rdev
);
return
0
;
}
static
const
struct
regmap_config
mp886x_regmap_config
=
{
.
reg_bits
=
8
,
.
val_bits
=
8
,
};
static
int
mp886x_i2c_probe
(
struct
i2c_client
*
client
,
const
struct
i2c_device_id
*
id
)
{
struct
device
*
dev
=
&
client
->
dev
;
struct
device_node
*
np
=
dev
->
of_node
;
struct
mp886x_device_info
*
di
;
struct
regulator_config
config
=
{
};
struct
regmap
*
regmap
;
int
ret
;
di
=
devm_kzalloc
(
dev
,
sizeof
(
struct
mp886x_device_info
),
GFP_KERNEL
);
if
(
!
di
)
return
-
ENOMEM
;
di
->
regulator
=
of_get_regulator_init_data
(
dev
,
np
,
&
di
->
desc
);
if
(
!
di
->
regulator
)
{
dev_err
(
dev
,
"Platform data not found!
\n
"
);
return
-
EINVAL
;
}
ret
=
of_property_read_u32_array
(
np
,
"mps,fb-voltage-divider"
,
di
->
r
,
2
);
if
(
ret
)
return
ret
;
di
->
en_gpio
=
devm_gpiod_get
(
dev
,
"enable"
,
GPIOD_OUT_HIGH
);
if
(
IS_ERR
(
di
->
en_gpio
))
return
PTR_ERR
(
di
->
en_gpio
);
di
->
dev
=
dev
;
regmap
=
devm_regmap_init_i2c
(
client
,
&
mp886x_regmap_config
);
if
(
IS_ERR
(
regmap
))
{
dev_err
(
dev
,
"Failed to allocate regmap!
\n
"
);
return
PTR_ERR
(
regmap
);
}
i2c_set_clientdata
(
client
,
di
);
config
.
dev
=
di
->
dev
;
config
.
init_data
=
di
->
regulator
;
config
.
regmap
=
regmap
;
config
.
driver_data
=
di
;
config
.
of_node
=
np
;
ret
=
mp886x_regulator_register
(
di
,
&
config
);
if
(
ret
<
0
)
dev_err
(
dev
,
"Failed to register regulator!
\n
"
);
return
ret
;
}
static
const
struct
of_device_id
mp886x_dt_ids
[]
=
{
{
.
compatible
=
"mps,mp8867"
,
.
data
=
&
mp8867_regulator_ops
},
{
.
compatible
=
"mps,mp8869"
,
.
data
=
&
mp8869_regulator_ops
},
{
}
};
MODULE_DEVICE_TABLE
(
of
,
mp886x_dt_ids
);
static
const
struct
i2c_device_id
mp886x_id
[]
=
{
{
"mp886x"
,
},
{
},
};
MODULE_DEVICE_TABLE
(
i2c
,
mp886x_id
);
static
struct
i2c_driver
mp886x_regulator_driver
=
{
.
driver
=
{
.
name
=
"mp886x-regulator"
,
.
of_match_table
=
of_match_ptr
(
mp886x_dt_ids
),
},
.
probe
=
mp886x_i2c_probe
,
.
id_table
=
mp886x_id
,
};
module_i2c_driver
(
mp886x_regulator_driver
);
MODULE_AUTHOR
(
"Jisheng Zhang <jszhang@kernel.org>"
);
MODULE_DESCRIPTION
(
"MP886x regulator driver"
);
MODULE_LICENSE
(
"GPL v2"
);
drivers/regulator/pwm-regulator.c
View file @
24bd2afd
...
...
@@ -354,6 +354,10 @@ static int pwm_regulator_probe(struct platform_device *pdev)
drvdata
->
pwm
=
devm_pwm_get
(
&
pdev
->
dev
,
NULL
);
if
(
IS_ERR
(
drvdata
->
pwm
))
{
ret
=
PTR_ERR
(
drvdata
->
pwm
);
if
(
ret
==
-
EPROBE_DEFER
)
dev_dbg
(
&
pdev
->
dev
,
"Failed to get PWM, deferring probe
\n
"
);
else
dev_err
(
&
pdev
->
dev
,
"Failed to get PWM: %d
\n
"
,
ret
);
return
ret
;
}
...
...
drivers/regulator/qcom_rpm-regulator.c
View file @
24bd2afd
...
...
@@ -925,12 +925,21 @@ static const struct rpm_regulator_data rpm_pm8921_regulators[] = {
{
}
};
static
const
struct
rpm_regulator_data
rpm_smb208_regulators
[]
=
{
{
"s1a"
,
QCOM_RPM_SMB208_S1a
,
&
smb208_smps
,
"vin_s1a"
},
{
"s1b"
,
QCOM_RPM_SMB208_S1b
,
&
smb208_smps
,
"vin_s1b"
},
{
"s2a"
,
QCOM_RPM_SMB208_S2a
,
&
smb208_smps
,
"vin_s2a"
},
{
"s2b"
,
QCOM_RPM_SMB208_S2b
,
&
smb208_smps
,
"vin_s2b"
},
{
}
};
static
const
struct
of_device_id
rpm_of_match
[]
=
{
{
.
compatible
=
"qcom,rpm-pm8018-regulators"
,
.
data
=
&
rpm_pm8018_regulators
},
{
.
compatible
=
"qcom,rpm-pm8058-regulators"
,
.
data
=
&
rpm_pm8058_regulators
},
{
.
compatible
=
"qcom,rpm-pm8901-regulators"
,
.
data
=
&
rpm_pm8901_regulators
},
{
.
compatible
=
"qcom,rpm-pm8921-regulators"
,
.
data
=
&
rpm_pm8921_regulators
},
{
.
compatible
=
"qcom,rpm-smb208-regulators"
,
.
data
=
&
rpm_smb208_regulators
},
{
}
};
MODULE_DEVICE_TABLE
(
of
,
rpm_of_match
);
...
...
drivers/regulator/qcom_smd-regulator.c
View file @
24bd2afd
...
...
@@ -445,6 +445,44 @@ static const struct regulator_desc pm8994_lnldo = {
.
ops
=
&
rpm_smps_ldo_ops_fixed
,
};
static
const
struct
regulator_desc
pmi8994_ftsmps
=
{
.
linear_ranges
=
(
struct
regulator_linear_range
[])
{
REGULATOR_LINEAR_RANGE
(
350000
,
0
,
199
,
5000
),
REGULATOR_LINEAR_RANGE
(
700000
,
200
,
349
,
10000
),
},
.
n_linear_ranges
=
2
,
.
n_voltages
=
350
,
.
ops
=
&
rpm_smps_ldo_ops
,
};
static
const
struct
regulator_desc
pmi8994_hfsmps
=
{
.
linear_ranges
=
(
struct
regulator_linear_range
[])
{
REGULATOR_LINEAR_RANGE
(
350000
,
0
,
80
,
12500
),
REGULATOR_LINEAR_RANGE
(
700000
,
81
,
141
,
25000
),
},
.
n_linear_ranges
=
2
,
.
n_voltages
=
142
,
.
ops
=
&
rpm_smps_ldo_ops
,
};
static
const
struct
regulator_desc
pmi8994_bby
=
{
.
linear_ranges
=
(
struct
regulator_linear_range
[])
{
REGULATOR_LINEAR_RANGE
(
3000000
,
0
,
44
,
50000
),
},
.
n_linear_ranges
=
1
,
.
n_voltages
=
45
,
.
ops
=
&
rpm_bob_ops
,
};
static
const
struct
regulator_desc
pmi8994_boost
=
{
.
linear_ranges
=
(
struct
regulator_linear_range
[])
{
REGULATOR_LINEAR_RANGE
(
4000000
,
0
,
30
,
50000
),
},
.
n_linear_ranges
=
1
,
.
n_voltages
=
31
,
.
ops
=
&
rpm_smps_ldo_ops
,
};
static
const
struct
regulator_desc
pm8998_ftsmps
=
{
.
linear_ranges
=
(
struct
regulator_linear_range
[])
{
REGULATOR_LINEAR_RANGE
(
320000
,
0
,
258
,
4000
),
...
...
@@ -780,6 +818,14 @@ static const struct rpm_regulator_data rpm_pm8994_regulators[] = {
{}
};
static
const
struct
rpm_regulator_data
rpm_pmi8994_regulators
[]
=
{
{
"s1"
,
QCOM_SMD_RPM_SMPB
,
1
,
&
pmi8994_ftsmps
,
"vdd_s1"
},
{
"s2"
,
QCOM_SMD_RPM_SMPB
,
2
,
&
pmi8994_hfsmps
,
"vdd_s2"
},
{
"s2"
,
QCOM_SMD_RPM_SMPB
,
3
,
&
pmi8994_hfsmps
,
"vdd_s3"
},
{
"boost-bypass"
,
QCOM_SMD_RPM_BBYB
,
1
,
&
pmi8994_bby
,
"vdd_bst_byp"
},
{}
};
static
const
struct
rpm_regulator_data
rpm_pm8998_regulators
[]
=
{
{
"s1"
,
QCOM_SMD_RPM_SMPA
,
1
,
&
pm8998_ftsmps
,
"vdd_s1"
},
{
"s2"
,
QCOM_SMD_RPM_SMPA
,
2
,
&
pm8998_ftsmps
,
"vdd_s2"
},
...
...
@@ -862,6 +908,7 @@ static const struct of_device_id rpm_of_match[] = {
{
.
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
},
{
.
compatible
=
"qcom,rpm-pmi8994-regulators"
,
.
data
=
&
rpm_pmi8994_regulators
},
{
.
compatible
=
"qcom,rpm-pmi8998-regulators"
,
.
data
=
&
rpm_pmi8998_regulators
},
{
.
compatible
=
"qcom,rpm-pms405-regulators"
,
.
data
=
&
rpm_pms405_regulators
},
{}
...
...
include/linux/regulator/driver.h
View file @
24bd2afd
...
...
@@ -277,9 +277,9 @@ enum regulator_type {
* @curr_table: Current limit mapping table (if table based mapping)
*
* @vsel_range_reg: Register for range selector when using pickable ranges
* and
regulator_regmap_X_voltage_X_pickable
functions.
* and
``regulator_map_*_voltage_*_pickable``
functions.
* @vsel_range_mask: Mask for register bitfield used for range selector
* @vsel_reg: Register for selector when using
regulator_regmap_X_voltage_
* @vsel_reg: Register for selector when using
``regulator_map_*_voltage_*``
* @vsel_mask: Mask for register bitfield used for selector
* @vsel_step: Specify the resolution of selector stepping when setting
* voltage. If 0, then no stepping is done (requested selector is
...
...
include/linux/soc/qcom/smd-rpm.h
View file @
24bd2afd
...
...
@@ -10,6 +10,7 @@ struct qcom_smd_rpm;
/*
* Constants used for addressing resources in the RPM.
*/
#define QCOM_SMD_RPM_BBYB 0x62796262
#define QCOM_SMD_RPM_BOBB 0x62626f62
#define QCOM_SMD_RPM_BOOST 0x61747362
#define QCOM_SMD_RPM_BUS_CLK 0x316b6c63
...
...
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