Re: [PATCH v9 03/12] regulator: rk808: Add regulator driver for RK805

2017-08-09 Thread Mark Brown
On Wed, Aug 09, 2017 at 06:04:11PM +0800, Joseph Chen wrote:
> From: Elaine Zhang 
> 
> Add support for the rk805 regulator. The regulator module consists
> of 4 DCDCs, 3 LDOs.
> 
> The output voltages are configurable and are meant to supply power
> to the main processor and other components.
> 
> Signed-off-by: Elaine Zhang 
> Signed-off-by: Joseph Chen 
> Acked-by: Mark Brown 

Can we please at least get the first couple of patches merged so
anything else that needs the new defines like this can get merged?  If
there's later bits of the series that need this many revisions they
shouldn't be holding up the earlier bits that have been fine for ages.


signature.asc
Description: PGP signature


[PATCH v9 03/12] regulator: rk808: Add regulator driver for RK805

2017-08-09 Thread Joseph Chen
From: Elaine Zhang 

Add support for the rk805 regulator. The regulator module consists
of 4 DCDCs, 3 LDOs.

The output voltages are configurable and are meant to supply power
to the main processor and other components.

Signed-off-by: Elaine Zhang 
Signed-off-by: Joseph Chen 
Acked-by: Mark Brown 
---
 drivers/regulator/Kconfig   |   4 +-
 drivers/regulator/rk808-regulator.c | 130 
 2 files changed, 132 insertions(+), 2 deletions(-)

diff --git a/drivers/regulator/Kconfig b/drivers/regulator/Kconfig
index be06eb2..285e280 100644
--- a/drivers/regulator/Kconfig
+++ b/drivers/regulator/Kconfig
@@ -650,11 +650,11 @@ config REGULATOR_RC5T583
  outputs which can be controlled by i2c communication.
 
 config REGULATOR_RK808
-   tristate "Rockchip RK808/RK818 Power regulators"
+   tristate "Rockchip RK805/RK808/RK818 Power regulators"
depends on MFD_RK808
help
  Select this option to enable the power regulator of ROCKCHIP
- PMIC RK808 and RK818.
+ PMIC RK805,RK808 and RK818.
  This driver supports the control of different power rails of device
  through regulator interface. The device supports multiple DCDC/LDO
  outputs which can be controlled by i2c communication.
diff --git a/drivers/regulator/rk808-regulator.c 
b/drivers/regulator/rk808-regulator.c
index fb44d52..128c81e 100644
--- a/drivers/regulator/rk808-regulator.c
+++ b/drivers/regulator/rk808-regulator.c
@@ -65,6 +65,27 @@
 /* max steps for increase voltage of Buck1/2, equal 100mv*/
 #define MAX_STEPS_ONE_TIME 8
 
+#define RK805_DESC(_id, _match, _supply, _min, _max, _step, _vreg,  \
+   _vmask, _ereg, _emask, _etime)  \
+   [_id] = {   \
+   .name   = (_match), \
+   .supply_name= (_supply),\
+   .of_match   = of_match_ptr(_match), \
+   .regulators_node = of_match_ptr("regulators"),  \
+   .type   = REGULATOR_VOLTAGE,\
+   .id = (_id),\
+   .n_voltages = (((_max) - (_min)) / (_step) + 1),\
+   .owner  = THIS_MODULE,  \
+   .min_uV = (_min) * 1000,\
+   .uV_step= (_step) * 1000,   \
+   .vsel_reg   = (_vreg),  \
+   .vsel_mask  = (_vmask), \
+   .enable_reg = (_ereg),  \
+   .enable_mask= (_emask), \
+   .enable_time= (_etime), \
+   .ops= &rk805_reg_ops,   \
+   }
+
 #define RK8XX_DESC(_id, _match, _supply, _min, _max, _step, _vreg, \
_vmask, _ereg, _emask, _etime)  \
[_id] = {   \
@@ -298,6 +319,28 @@ static int rk808_set_suspend_voltage_range(struct 
regulator_dev *rdev, int uv)
  sel);
 }
 
+static int rk805_set_suspend_enable(struct regulator_dev *rdev)
+{
+   unsigned int reg;
+
+   reg = rdev->desc->enable_reg + RK808_SLP_SET_OFF_REG_OFFSET;
+
+   return regmap_update_bits(rdev->regmap, reg,
+ rdev->desc->enable_mask,
+ rdev->desc->enable_mask);
+}
+
+static int rk805_set_suspend_disable(struct regulator_dev *rdev)
+{
+   unsigned int reg;
+
+   reg = rdev->desc->enable_reg + RK808_SLP_SET_OFF_REG_OFFSET;
+
+   return regmap_update_bits(rdev->regmap, reg,
+ rdev->desc->enable_mask,
+ 0);
+}
+
 static int rk808_set_suspend_enable(struct regulator_dev *rdev)
 {
unsigned int reg;
@@ -320,6 +363,27 @@ static int rk808_set_suspend_disable(struct regulator_dev 
*rdev)
  rdev->desc->enable_mask);
 }
 
+static struct regulator_ops rk805_reg_ops = {
+   .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,
+   .enable = regulator_enable_regmap,
+   .disable= regulator_disable_regmap,
+   .is_enabled = regulator_is_enabled_regmap,
+   .set_suspend_voltage= rk808_set_suspend_voltage,
+   .set_suspend_enable = rk805_set_suspend_ena