Commit c9b5e85a authored by Mark Brown's avatar Mark Brown

Merge series "regulator: da9211: support changing modes" from Anand K Mistry <amistry@google.com>:

This patchset adds support for being able to change regulator modes for
the da9211 regulator. This is needed to allow the voltage scaling
support in the MT8173 SoC to be used in the elm (Acer Chromebook R13)
and hana (several Lenovo Chromebooks) devices.

Anand K Mistry (4):
  regulator: da9211: Move buck modes into header file
  dt-bindings: regulator: da9211: Document allowed modes
  regulator: da9211: Implement of_map_mode
  arm64: dts: mediatek: Update allowed regulator modes for elm boards

 .../devicetree/bindings/regulator/da9211.txt  |  4 +++
 arch/arm64/boot/dts/mediatek/mt8173-elm.dtsi  |  4 ++-
 drivers/regulator/da9211-regulator.c          | 30 +++++++++++++++----
 .../regulator/dlg,da9211-regulator.h          | 16 ++++++++++
 4 files changed, 47 insertions(+), 7 deletions(-)
 create mode 100644 include/dt-bindings/regulator/dlg,da9211-regulator.h

--
2.27.0.212.ge8ba1cc988-goog

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
parents b3ddc40b 650e5ada
...@@ -15,6 +15,8 @@ Required properties: ...@@ -15,6 +15,8 @@ Required properties:
Optional properties: Optional properties:
- enable-gpios: platform gpio for control of BUCKA/BUCKB. - enable-gpios: platform gpio for control of BUCKA/BUCKB.
- Any optional property defined in regulator.txt - Any optional property defined in regulator.txt
- regulator-initial-mode and regulator-allowed-modes may be specified using
mode values from dt-bindings/regulator/dlg,da9211-regulator.h
Example 1) DA9211 Example 1) DA9211
pmic: da9211@68 { pmic: da9211@68 {
...@@ -30,6 +32,8 @@ Example 1) DA9211 ...@@ -30,6 +32,8 @@ Example 1) DA9211
regulator-min-microamp = <2000000>; regulator-min-microamp = <2000000>;
regulator-max-microamp = <5000000>; regulator-max-microamp = <5000000>;
enable-gpios = <&gpio 27 0>; enable-gpios = <&gpio 27 0>;
regulator-allowed-modes = <DA9211_BUCK_MODE_SYNC
DA9211_BUCK_MODE_AUTO>;
}; };
}; };
}; };
......
...@@ -17,6 +17,7 @@ ...@@ -17,6 +17,7 @@
#include <linux/gpio/consumer.h> #include <linux/gpio/consumer.h>
#include <linux/regulator/of_regulator.h> #include <linux/regulator/of_regulator.h>
#include <linux/regulator/da9211.h> #include <linux/regulator/da9211.h>
#include <dt-bindings/regulator/dlg,da9211-regulator.h>
#include "da9211-regulator.h" #include "da9211-regulator.h"
/* DEVICE IDs */ /* DEVICE IDs */
...@@ -24,10 +25,6 @@ ...@@ -24,10 +25,6 @@
#define DA9213_DEVICE_ID 0x23 #define DA9213_DEVICE_ID 0x23
#define DA9215_DEVICE_ID 0x24 #define DA9215_DEVICE_ID 0x24
#define DA9211_BUCK_MODE_SLEEP 1
#define DA9211_BUCK_MODE_SYNC 2
#define DA9211_BUCK_MODE_AUTO 3
/* DA9211 REGULATOR IDs */ /* DA9211 REGULATOR IDs */
#define DA9211_ID_BUCKA 0 #define DA9211_ID_BUCKA 0
#define DA9211_ID_BUCKB 1 #define DA9211_ID_BUCKB 1
...@@ -89,6 +86,20 @@ static const int da9215_current_limits[] = { ...@@ -89,6 +86,20 @@ static const int da9215_current_limits[] = {
5600000, 5800000, 6000000, 6200000, 6400000, 6600000, 6800000, 7000000 5600000, 5800000, 6000000, 6200000, 6400000, 6600000, 6800000, 7000000
}; };
static unsigned int da9211_map_buck_mode(unsigned int mode)
{
switch (mode) {
case DA9211_BUCK_MODE_SLEEP:
return REGULATOR_MODE_STANDBY;
case DA9211_BUCK_MODE_SYNC:
return REGULATOR_MODE_FAST;
case DA9211_BUCK_MODE_AUTO:
return REGULATOR_MODE_NORMAL;
default:
return REGULATOR_MODE_INVALID;
}
}
static unsigned int da9211_buck_get_mode(struct regulator_dev *rdev) static unsigned int da9211_buck_get_mode(struct regulator_dev *rdev)
{ {
int id = rdev_get_id(rdev); int id = rdev_get_id(rdev);
...@@ -236,6 +247,7 @@ static const struct regulator_ops da9211_buck_ops = { ...@@ -236,6 +247,7 @@ static const struct regulator_ops da9211_buck_ops = {
.vsel_reg = DA9211_REG_VBUCKA_A + DA9211_ID_##_id * 2,\ .vsel_reg = DA9211_REG_VBUCKA_A + DA9211_ID_##_id * 2,\
.vsel_mask = DA9211_VBUCK_MASK,\ .vsel_mask = DA9211_VBUCK_MASK,\
.owner = THIS_MODULE,\ .owner = THIS_MODULE,\
.of_map_mode = da9211_map_buck_mode,\
} }
static struct regulator_desc da9211_regulators[] = { static struct regulator_desc da9211_regulators[] = {
...@@ -245,8 +257,14 @@ static struct regulator_desc da9211_regulators[] = { ...@@ -245,8 +257,14 @@ static struct regulator_desc da9211_regulators[] = {
#ifdef CONFIG_OF #ifdef CONFIG_OF
static struct of_regulator_match da9211_matches[] = { static struct of_regulator_match da9211_matches[] = {
[DA9211_ID_BUCKA] = { .name = "BUCKA" }, [DA9211_ID_BUCKA] = {
[DA9211_ID_BUCKB] = { .name = "BUCKB" }, .name = "BUCKA",
.desc = &da9211_regulators[DA9211_ID_BUCKA],
},
[DA9211_ID_BUCKB] = {
.name = "BUCKB",
.desc = &da9211_regulators[DA9211_ID_BUCKB],
},
}; };
static struct da9211_pdata *da9211_parse_regulators_dt( static struct da9211_pdata *da9211_parse_regulators_dt(
......
/* SPDX-License-Identifier: GPL-2.0 */
#ifndef _DT_BINDINGS_REGULATOR_DLG_DA9211_H
#define _DT_BINDINGS_REGULATOR_DLG_DA9211_H
/*
* These buck mode constants may be used to specify values in device tree
* properties (e.g. regulator-initial-mode, regulator-allowed-modes).
* A description of the following modes is in the manufacturers datasheet.
*/
#define DA9211_BUCK_MODE_SLEEP 1
#define DA9211_BUCK_MODE_SYNC 2
#define DA9211_BUCK_MODE_AUTO 3
#endif
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment