Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1374118 > unrolled thread

[RFC 0/3] Add RK818 PMIC support

Started byWadim Egorov <w.egorov@phytec.de>
First post2016-04-08 12:00 +0200
Last post2016-04-10 21:10 +0200
Articles 8 — 4 participants

Back to article view | Back to linux.kernel


Contents

  [RFC 0/3] Add RK818 PMIC support Wadim Egorov <w.egorov@phytec.de> - 2016-04-08 12:00 +0200
    [RFC 3/3] mfd: dt-bindings: Add RK818 device tree bindings document Wadim Egorov <w.egorov@phytec.de> - 2016-04-08 12:00 +0200
      Re: [RFC 3/3] mfd: dt-bindings: Add RK818 device tree bindings  document Lee Jones <lee.jones@linaro.org> - 2016-04-11 10:50 +0200
        Re: [RFC 3/3] mfd: dt-bindings: Add RK818 device tree bindings  document Rob Herring <robh@kernel.org> - 2016-04-11 18:10 +0200
          Re: [RFC 3/3] mfd: dt-bindings: Add RK818 device tree bindings  document Lee Jones <lee.jones@linaro.org> - 2016-04-11 18:20 +0200
      Re: [RFC 3/3] mfd: dt-bindings: Add RK818 device tree bindings  document Rob Herring <robh@kernel.org> - 2016-04-11 17:50 +0200
    [RFC 2/3] regulator: rk808: Add support for rk818 Wadim Egorov <w.egorov@phytec.de> - 2016-04-08 12:00 +0200
      Re: [RFC 2/3] regulator: rk808: Add support for rk818 Mark Brown <broonie@kernel.org> - 2016-04-10 21:10 +0200

#1374118 — [RFC 0/3] Add RK818 PMIC support

FromWadim Egorov <w.egorov@phytec.de>
Date2016-04-08 12:00 +0200
Subject[RFC 0/3] Add RK818 PMIC support
Message-ID<rlBmO-1PG-21@gated-at.bofh.it>
Hello,

this patch adds support for rockchip's RK818 PMIC.

I am not sure if I have to rename all filenames and all relevant variable names
after adding a second supported device to the RK808 driver, e.g:

  mfd/rk8xx.c
  regulator/rk8xx-regulator.c
  clk/clk-rk8xx.c

Regards,
Wadim

Wadim Egorov (3):
  mfd: RK808: Add RK818 support
  regulator: rk808: Add support for rk818
  mfd: dt-bindings: Add RK818 device tree bindings document

 Documentation/devicetree/bindings/mfd/rk808.txt |  37 ++-
 drivers/mfd/Kconfig                             |   6 +-
 drivers/mfd/rk808.c                             | 279 +++++++++++++++----
 drivers/regulator/rk808-regulator.c             | 343 ++++++++++++++++++++++--
 include/linux/mfd/rk808.h                       | 182 ++++++++++++-
 5 files changed, 761 insertions(+), 86 deletions(-)

-- 
1.9.1

[toc] | [next] | [standalone]


#1374119 — [RFC 3/3] mfd: dt-bindings: Add RK818 device tree bindings document

FromWadim Egorov <w.egorov@phytec.de>
Date2016-04-08 12:00 +0200
Subject[RFC 3/3] mfd: dt-bindings: Add RK818 device tree bindings document
Message-ID<rlBmP-1PG-39@gated-at.bofh.it>
In reply to#1374118
Add device tree bindings documentation for rockchip's RK818 pmic.

Signed-off-by: Wadim Egorov <w.egorov@phytec.de>
---
 Documentation/devicetree/bindings/mfd/rk808.txt | 37 +++++++++++++++++++++++--
 1 file changed, 34 insertions(+), 3 deletions(-)

diff --git a/Documentation/devicetree/bindings/mfd/rk808.txt b/Documentation/devicetree/bindings/mfd/rk808.txt
index 4ca6aab..8cceb07 100644
--- a/Documentation/devicetree/bindings/mfd/rk808.txt
+++ b/Documentation/devicetree/bindings/mfd/rk808.txt
@@ -1,7 +1,11 @@
-RK808 Power Management Integrated Circuit
+RK8xx Power Management Integrated Circuit
+
+The rk8xx family current members:
+rk808
+rk818
 
 Required properties:
-- compatible: "rockchip,rk808"
+- compatible: "rockchip,rk808", "rockchip,rk818"
 - reg: I2C slave address
 - interrupt-parent: The parent interrupt controller.
 - interrupts: the interrupt outputs of the controller.
@@ -13,6 +17,8 @@ Optional properties:
   default output clock name
 - rockchip,system-power-controller: Telling whether or not this pmic is controlling
   the system power.
+
+Optional rk808 properties:
 - vcc1-supply:  The input supply for DCDC_REG1
 - vcc2-supply:  The input supply for DCDC_REG2
 - vcc3-supply:  The input supply for DCDC_REG3
@@ -29,7 +35,20 @@ Optional properties:
   the gpio controller. If DVS GPIOs aren't present, voltage changes will happen
   very quickly with no slow ramp time.
 
-Regulators: All the regulators of RK808 to be instantiated shall be
+Optional rk818 properties:
+- vcc1-supply:  The input supply for DCDC_REG1
+- vcc2-supply:  The input supply for DCDC_REG2
+- vcc3-supply:  The input supply for DCDC_REG3
+- vcc4-supply:  The input supply for DCDC_REG4
+- boost-supply: The input supply for DCDC_BOOST
+- vcc6-supply:  The input supply for LDO_REG1 and LDO_REG2
+- vcc7-supply:  The input supply for LDO_REG3, LDO_REG5 and LDO_REG7
+- vcc8-supply:  The input supply for LDO_REG4, LDO_REG6 and LDO_REG8
+- vcc9-supply:  The input supply for LDO_REG9 and SWITCH_REG
+- h_5v-supply:  The input supply for HDMI_SWITCH
+- usb-supply:   The input supply for OTG_SWITCH
+
+Regulators: All the regulators of RK8xx to be instantiated shall be
 listed in a child node named 'regulators'. Each regulator is represented
 by a child node of the 'regulators' node.
 
@@ -48,6 +67,18 @@ number as described in RK808 datasheet.
 	- SWITCH_REGn
 		- valid values for n are 1 to 2
 
+Following regulators of the RK818 PMIC block are supported. Note that
+the 'n' in regulator name, as in DCDC_REGn or LDOn, represents the DCDC or LDO
+number as described in RK818 datasheet.
+
+	- DCDC_REGn
+		- valid values for n are 1 to 4.
+	- LDO_REGn
+		- valid values for n are 1 to 9.
+	- SWITCH_REG
+	- HDMI_SWITCH
+	- OTG_SWITCH
+
 Standard regulator bindings are used inside regulator subnodes. Check
   Documentation/devicetree/bindings/regulator/regulator.txt
 for more details
-- 
1.9.1

[toc] | [prev] | [next] | [standalone]


#1375631 — Re: [RFC 3/3] mfd: dt-bindings: Add RK818 device tree bindings document

FromLee Jones <lee.jones@linaro.org>
Date2016-04-11 10:50 +0200
SubjectRe: [RFC 3/3] mfd: dt-bindings: Add RK818 device tree bindings document
Message-ID<rmFHJ-2Ui-41@gated-at.bofh.it>
In reply to#1374119
On Fri, 08 Apr 2016, Wadim Egorov wrote:

> Add device tree bindings documentation for rockchip's RK818 pmic.
> 
> Signed-off-by: Wadim Egorov <w.egorov@phytec.de>
> ---
>  Documentation/devicetree/bindings/mfd/rk808.txt | 37 +++++++++++++++++++++++--
>  1 file changed, 34 insertions(+), 3 deletions(-)
> 
> diff --git a/Documentation/devicetree/bindings/mfd/rk808.txt b/Documentation/devicetree/bindings/mfd/rk808.txt
> index 4ca6aab..8cceb07 100644
> --- a/Documentation/devicetree/bindings/mfd/rk808.txt
> +++ b/Documentation/devicetree/bindings/mfd/rk808.txt
> @@ -1,7 +1,11 @@
> -RK808 Power Management Integrated Circuit
> +RK8xx Power Management Integrated Circuit

s/xx/XX/

> +The rk8xx family current members:
> +rk808
> +rk818
>  
>  Required properties:
> -- compatible: "rockchip,rk808"
> +- compatible: "rockchip,rk808", "rockchip,rk818"
>  - reg: I2C slave address
>  - interrupt-parent: The parent interrupt controller.
>  - interrupts: the interrupt outputs of the controller.
> @@ -13,6 +17,8 @@ Optional properties:
>    default output clock name
>  - rockchip,system-power-controller: Telling whether or not this pmic is controlling
>    the system power.
> +
> +Optional rk808 properties:

When mentioning the chip by name, you should always do so using
uppercase, as it is in the datasheet.

>  - vcc1-supply:  The input supply for DCDC_REG1
>  - vcc2-supply:  The input supply for DCDC_REG2
>  - vcc3-supply:  The input supply for DCDC_REG3
> @@ -29,7 +35,20 @@ Optional properties:
>    the gpio controller. If DVS GPIOs aren't present, voltage changes will happen
>    very quickly with no slow ramp time.
>  
> -Regulators: All the regulators of RK808 to be instantiated shall be
> +Optional rk818 properties:

Uppercase.

> +- vcc1-supply:  The input supply for DCDC_REG1
> +- vcc2-supply:  The input supply for DCDC_REG2
> +- vcc3-supply:  The input supply for DCDC_REG3
> +- vcc4-supply:  The input supply for DCDC_REG4
> +- boost-supply: The input supply for DCDC_BOOST
> +- vcc6-supply:  The input supply for LDO_REG1 and LDO_REG2
> +- vcc7-supply:  The input supply for LDO_REG3, LDO_REG5 and LDO_REG7
> +- vcc8-supply:  The input supply for LDO_REG4, LDO_REG6 and LDO_REG8
> +- vcc9-supply:  The input supply for LDO_REG9 and SWITCH_REG
> +- h_5v-supply:  The input supply for HDMI_SWITCH
> +- usb-supply:   The input supply for OTG_SWITCH
> +
> +Regulators: All the regulators of RK8xx to be instantiated shall be
>  listed in a child node named 'regulators'. Each regulator is represented
>  by a child node of the 'regulators' node.
>  
> @@ -48,6 +67,18 @@ number as described in RK808 datasheet.
>  	- SWITCH_REGn
>  		- valid values for n are 1 to 2
>  
> +Following regulators of the RK818 PMIC block are supported. Note that
> +the 'n' in regulator name, as in DCDC_REGn or LDOn, represents the DCDC or LDO
> +number as described in RK818 datasheet.
> +
> +	- DCDC_REGn
> +		- valid values for n are 1 to 4.
> +	- LDO_REGn
> +		- valid values for n are 1 to 9.
> +	- SWITCH_REG
> +	- HDMI_SWITCH
> +	- OTG_SWITCH
> +
>  Standard regulator bindings are used inside regulator subnodes. Check
>    Documentation/devicetree/bindings/regulator/regulator.txt
>  for more details

-- 
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog

[toc] | [prev] | [next] | [standalone]


#1376138 — Re: [RFC 3/3] mfd: dt-bindings: Add RK818 device tree bindings document

FromRob Herring <robh@kernel.org>
Date2016-04-11 18:10 +0200
SubjectRe: [RFC 3/3] mfd: dt-bindings: Add RK818 device tree bindings document
Message-ID<rmMzv-cS-5@gated-at.bofh.it>
In reply to#1375631
On Mon, Apr 11, 2016 at 09:44:34AM +0100, Lee Jones wrote:
> On Fri, 08 Apr 2016, Wadim Egorov wrote:
> 
> > Add device tree bindings documentation for rockchip's RK818 pmic.
> > 
> > Signed-off-by: Wadim Egorov <w.egorov@phytec.de>
> > ---
> >  Documentation/devicetree/bindings/mfd/rk808.txt | 37 +++++++++++++++++++++++--
> >  1 file changed, 34 insertions(+), 3 deletions(-)
> > 
> > diff --git a/Documentation/devicetree/bindings/mfd/rk808.txt b/Documentation/devicetree/bindings/mfd/rk808.txt
> > index 4ca6aab..8cceb07 100644
> > --- a/Documentation/devicetree/bindings/mfd/rk808.txt
> > +++ b/Documentation/devicetree/bindings/mfd/rk808.txt
> > @@ -1,7 +1,11 @@
> > -RK808 Power Management Integrated Circuit
> > +RK8xx Power Management Integrated Circuit
> 
> s/xx/XX/

And others say this bikeshed should be lowercase...

I say fine as is for bindings. Uppercase for actual part letters, 
lowercase for wildcards.

> 
> > +The rk8xx family current members:
> > +rk808
> > +rk818
> >  
> >  Required properties:
> > -- compatible: "rockchip,rk808"
> > +- compatible: "rockchip,rk808", "rockchip,rk818"
> >  - reg: I2C slave address
> >  - interrupt-parent: The parent interrupt controller.
> >  - interrupts: the interrupt outputs of the controller.
> > @@ -13,6 +17,8 @@ Optional properties:
> >    default output clock name
> >  - rockchip,system-power-controller: Telling whether or not this pmic is controlling
> >    the system power.
> > +
> > +Optional rk808 properties:
> 
> When mentioning the chip by name, you should always do so using
> uppercase, as it is in the datasheet.

[toc] | [prev] | [next] | [standalone]


#1376148 — Re: [RFC 3/3] mfd: dt-bindings: Add RK818 device tree bindings document

FromLee Jones <lee.jones@linaro.org>
Date2016-04-11 18:20 +0200
SubjectRe: [RFC 3/3] mfd: dt-bindings: Add RK818 device tree bindings document
Message-ID<rmMJc-gC-15@gated-at.bofh.it>
In reply to#1376138
On Mon, 11 Apr 2016, Rob Herring wrote:

> On Mon, Apr 11, 2016 at 09:44:34AM +0100, Lee Jones wrote:
> > On Fri, 08 Apr 2016, Wadim Egorov wrote:
> > 
> > > Add device tree bindings documentation for rockchip's RK818 pmic.
> > > 
> > > Signed-off-by: Wadim Egorov <w.egorov@phytec.de>
> > > ---
> > >  Documentation/devicetree/bindings/mfd/rk808.txt | 37 +++++++++++++++++++++++--
> > >  1 file changed, 34 insertions(+), 3 deletions(-)
> > > 
> > > diff --git a/Documentation/devicetree/bindings/mfd/rk808.txt b/Documentation/devicetree/bindings/mfd/rk808.txt
> > > index 4ca6aab..8cceb07 100644
> > > --- a/Documentation/devicetree/bindings/mfd/rk808.txt
> > > +++ b/Documentation/devicetree/bindings/mfd/rk808.txt
> > > @@ -1,7 +1,11 @@
> > > -RK808 Power Management Integrated Circuit
> > > +RK8xx Power Management Integrated Circuit
> > 
> > s/xx/XX/
> 
> And others say this bikeshed should be lowercase...
> 
> I say fine as is for bindings. Uppercase for actual part letters, 
> lowercase for wildcards.

Fair enough.

NB: It should be fine to bikeshed on an RFC.  I could understand your
point better if we were coming to completion, or already on v5 or
something.

> > > +The rk8xx family current members:
> > > +rk808
> > > +rk818
> > >  
> > >  Required properties:
> > > -- compatible: "rockchip,rk808"
> > > +- compatible: "rockchip,rk808", "rockchip,rk818"
> > >  - reg: I2C slave address
> > >  - interrupt-parent: The parent interrupt controller.
> > >  - interrupts: the interrupt outputs of the controller.
> > > @@ -13,6 +17,8 @@ Optional properties:
> > >    default output clock name
> > >  - rockchip,system-power-controller: Telling whether or not this pmic is controlling
> > >    the system power.
> > > +
> > > +Optional rk808 properties:
> > 
> > When mentioning the chip by name, you should always do so using
> > uppercase, as it is in the datasheet.

-- 
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog

[toc] | [prev] | [next] | [standalone]


#1376114 — Re: [RFC 3/3] mfd: dt-bindings: Add RK818 device tree bindings document

FromRob Herring <robh@kernel.org>
Date2016-04-11 17:50 +0200
SubjectRe: [RFC 3/3] mfd: dt-bindings: Add RK818 device tree bindings document
Message-ID<rmMga-8aY-11@gated-at.bofh.it>
In reply to#1374119
On Fri, Apr 08, 2016 at 11:47:41AM +0200, Wadim Egorov wrote:
> Add device tree bindings documentation for rockchip's RK818 pmic.
> 
> Signed-off-by: Wadim Egorov <w.egorov@phytec.de>
> ---
>  Documentation/devicetree/bindings/mfd/rk808.txt | 37 +++++++++++++++++++++++--
>  1 file changed, 34 insertions(+), 3 deletions(-)
> 
> diff --git a/Documentation/devicetree/bindings/mfd/rk808.txt b/Documentation/devicetree/bindings/mfd/rk808.txt
> index 4ca6aab..8cceb07 100644
> --- a/Documentation/devicetree/bindings/mfd/rk808.txt
> +++ b/Documentation/devicetree/bindings/mfd/rk808.txt
> @@ -1,7 +1,11 @@
> -RK808 Power Management Integrated Circuit
> +RK8xx Power Management Integrated Circuit
> +
> +The rk8xx family current members:
> +rk808
> +rk818
>  
>  Required properties:
> -- compatible: "rockchip,rk808"
> +- compatible: "rockchip,rk808", "rockchip,rk818"

Do one per line please.

>  - reg: I2C slave address
>  - interrupt-parent: The parent interrupt controller.
>  - interrupts: the interrupt outputs of the controller.
> @@ -13,6 +17,8 @@ Optional properties:
>    default output clock name
>  - rockchip,system-power-controller: Telling whether or not this pmic is controlling
>    the system power.
> +
> +Optional rk808 properties:
>  - vcc1-supply:  The input supply for DCDC_REG1
>  - vcc2-supply:  The input supply for DCDC_REG2
>  - vcc3-supply:  The input supply for DCDC_REG3
> @@ -29,7 +35,20 @@ Optional properties:
>    the gpio controller. If DVS GPIOs aren't present, voltage changes will happen
>    very quickly with no slow ramp time.
>  
> -Regulators: All the regulators of RK808 to be instantiated shall be
> +Optional rk818 properties:
> +- vcc1-supply:  The input supply for DCDC_REG1
> +- vcc2-supply:  The input supply for DCDC_REG2
> +- vcc3-supply:  The input supply for DCDC_REG3
> +- vcc4-supply:  The input supply for DCDC_REG4
> +- boost-supply: The input supply for DCDC_BOOST
> +- vcc6-supply:  The input supply for LDO_REG1 and LDO_REG2
> +- vcc7-supply:  The input supply for LDO_REG3, LDO_REG5 and LDO_REG7
> +- vcc8-supply:  The input supply for LDO_REG4, LDO_REG6 and LDO_REG8
> +- vcc9-supply:  The input supply for LDO_REG9 and SWITCH_REG
> +- h_5v-supply:  The input supply for HDMI_SWITCH
> +- usb-supply:   The input supply for OTG_SWITCH
> +
> +Regulators: All the regulators of RK8xx to be instantiated shall be
>  listed in a child node named 'regulators'. Each regulator is represented
>  by a child node of the 'regulators' node.
>  
> @@ -48,6 +67,18 @@ number as described in RK808 datasheet.
>  	- SWITCH_REGn
>  		- valid values for n are 1 to 2
>  
> +Following regulators of the RK818 PMIC block are supported. Note that
> +the 'n' in regulator name, as in DCDC_REGn or LDOn, represents the DCDC or LDO
> +number as described in RK818 datasheet.
> +
> +	- DCDC_REGn
> +		- valid values for n are 1 to 4.
> +	- LDO_REGn
> +		- valid values for n are 1 to 9.
> +	- SWITCH_REG
> +	- HDMI_SWITCH
> +	- OTG_SWITCH
> +
>  Standard regulator bindings are used inside regulator subnodes. Check
>    Documentation/devicetree/bindings/regulator/regulator.txt
>  for more details
> -- 
> 1.9.1
> 

[toc] | [prev] | [next] | [standalone]


#1374121 — [RFC 2/3] regulator: rk808: Add support for rk818

FromWadim Egorov <w.egorov@phytec.de>
Date2016-04-08 12:00 +0200
Subject[RFC 2/3] regulator: rk808: Add support for rk818
Message-ID<rlBmP-1PG-47@gated-at.bofh.it>
In reply to#1374118
Add support for the rk818 regulator. The regulator module consists
of 4 DCDCs, 9 LDOs, 1 switch and 1 BOOST converter which is used to
power OTG and HDMI5V.

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

Signed-off-by: Wadim Egorov <w.egorov@phytec.de>
---
 drivers/regulator/rk808-regulator.c | 343 +++++++++++++++++++++++++++++++++---
 1 file changed, 322 insertions(+), 21 deletions(-)

diff --git a/drivers/regulator/rk808-regulator.c b/drivers/regulator/rk808-regulator.c
index d86a3dc..b2bbca7 100644
--- a/drivers/regulator/rk808-regulator.c
+++ b/drivers/regulator/rk808-regulator.c
@@ -6,6 +6,9 @@
  * Author: Chris Zhong <zyw@rock-chips.com>
  * Author: Zhang Qing <zhangqing@rock-chips.com>
  *
+ * Copyright (C) 2016 PHYTEC Messtechnik GmbH
+ * Author: Wadim Egorov <w.egorov@phytec.de>
+ *
  * This program is free software; you can redistribute it and/or modify it
  * under the terms and conditions of the GNU General Public License,
  * version 2, as published by the Free Software Foundation.
@@ -32,6 +35,12 @@
 #define RK808_BUCK4_VSEL_MASK	0xf
 #define RK808_LDO_VSEL_MASK	0x1f
 
+#define RK818_BUCK_VSEL_MASK		0x3f
+#define RK818_BUCK4_VSEL_MASK		0x1f
+#define RK818_LDO_VSEL_MASK		0x1f
+#define RK818_LDO3_ON_VSEL_MASK		0xf
+#define RK818_BOOST_ON_VSEL_MASK	0xe0
+
 /* Ramp rate definitions for buck1 / buck2 only */
 #define RK808_RAMP_RATE_OFFSET		3
 #define RK808_RAMP_RATE_MASK		(3 << RK808_RAMP_RATE_OFFSET)
@@ -87,6 +96,15 @@ static const struct regulator_linear_range rk808_ldo6_voltage_ranges[] = {
 	REGULATOR_LINEAR_RANGE(800000, 0, 17, 100000),
 };
 
+static const struct regulator_linear_range rk818_buck4_voltage_ranges[] = {
+	REGULATOR_LINEAR_RANGE(1800000, 0, 18, 100000),
+};
+
+static const struct regulator_linear_range rk818_boost_voltage_ranges[] = {
+	REGULATOR_LINEAR_RANGE(4700000, 0, 7, 100000),
+};
+
+
 static int rk808_buck1_2_get_voltage_sel_regmap(struct regulator_dev *rdev)
 {
 	struct rk808_regulator_data *pdata = rdev_get_drvdata(rdev);
@@ -506,6 +524,238 @@ static const struct regulator_desc rk808_reg[] = {
 	},
 };
 
+static const struct regulator_desc rk818_reg[] = {
+	{
+		.name = "DCDC_REG1",
+		.supply_name = "vcc1",
+		.id = RK818_ID_DCDC1,
+		.ops = &rk808_reg_ops,
+		.type = REGULATOR_VOLTAGE,
+		.n_voltages = 64,
+		.linear_ranges = rk808_buck_voltage_ranges,
+		.n_linear_ranges = ARRAY_SIZE(rk808_buck_voltage_ranges),
+		.vsel_reg = RK818_BUCK1_ON_VSEL_REG,
+		.vsel_mask = RK818_BUCK_VSEL_MASK,
+		.enable_reg = RK818_DCDC_EN_REG,
+		.enable_mask = BIT(0),
+		.owner = THIS_MODULE,
+	}, {
+		.name = "DCDC_REG2",
+		.supply_name = "vcc2",
+		.id = RK818_ID_DCDC2,
+		.ops = &rk808_reg_ops,
+		.type = REGULATOR_VOLTAGE,
+		.n_voltages = 64,
+		.linear_ranges = rk808_buck_voltage_ranges,
+		.n_linear_ranges = ARRAY_SIZE(rk808_buck_voltage_ranges),
+		.vsel_reg = RK818_BUCK2_ON_VSEL_REG,
+		.vsel_mask = RK818_BUCK_VSEL_MASK,
+		.enable_reg = RK818_DCDC_EN_REG,
+		.enable_mask = BIT(1),
+		.owner = THIS_MODULE,
+	}, {
+		.name = "DCDC_REG3",
+		.supply_name = "vcc3",
+		.id = RK818_ID_DCDC3,
+		.ops = &rk808_switch_ops,
+		.type = REGULATOR_VOLTAGE,
+		.n_voltages = 1,
+		.enable_reg = RK818_DCDC_EN_REG,
+		.enable_mask = BIT(2),
+		.owner = THIS_MODULE,
+	}, {
+		.name = "DCDC_REG4",
+		.supply_name = "vcc4",
+		.id = RK818_ID_DCDC4,
+		.ops = &rk808_reg_ops,
+		.type = REGULATOR_VOLTAGE,
+		.n_voltages = 19,
+		.linear_ranges = rk818_buck4_voltage_ranges,
+		.n_linear_ranges = ARRAY_SIZE(rk818_buck4_voltage_ranges),
+		.vsel_reg = RK818_BUCK4_ON_VSEL_REG,
+		.vsel_mask = RK818_BUCK4_VSEL_MASK,
+		.enable_reg = RK818_DCDC_EN_REG,
+		.enable_mask = BIT(3),
+		.owner = THIS_MODULE,
+	}, {
+		.name = "DCDC_BOOST",
+		.supply_name = "boost",
+		.id = RK818_ID_BOOST,
+		.ops = &rk808_reg_ops,
+		.type = REGULATOR_VOLTAGE,
+		.n_voltages = 8,
+		.linear_ranges = rk818_boost_voltage_ranges,
+		.n_linear_ranges = ARRAY_SIZE(rk818_boost_voltage_ranges),
+		.vsel_reg = RK818_BOOST_LDO9_ON_VSEL_REG,
+		.vsel_mask = RK818_BOOST_ON_VSEL_MASK,
+		.enable_reg = RK818_DCDC_EN_REG,
+		.enable_mask = BIT(4),
+		.owner = THIS_MODULE,
+	}, {
+		.name = "LDO_REG1",
+		.supply_name = "vcc6",
+		.id = RK818_ID_LDO1,
+		.ops = &rk808_reg_ops,
+		.type = REGULATOR_VOLTAGE,
+		.n_voltages = 17,
+		.linear_ranges = rk808_ldo_voltage_ranges,
+		.n_linear_ranges = ARRAY_SIZE(rk808_ldo_voltage_ranges),
+		.vsel_reg = RK818_LDO1_ON_VSEL_REG,
+		.vsel_mask = RK818_LDO_VSEL_MASK,
+		.enable_reg = RK818_LDO_EN_REG,
+		.enable_mask = BIT(0),
+		.enable_time = 400,
+		.owner = THIS_MODULE,
+	}, {
+		.name = "LDO_REG2",
+		.supply_name = "vcc6",
+		.id = RK818_ID_LDO2,
+		.ops = &rk808_reg_ops,
+		.type = REGULATOR_VOLTAGE,
+		.n_voltages = 17,
+		.linear_ranges = rk808_ldo_voltage_ranges,
+		.n_linear_ranges = ARRAY_SIZE(rk808_ldo_voltage_ranges),
+		.vsel_reg = RK818_LDO2_ON_VSEL_REG,
+		.vsel_mask = RK818_LDO_VSEL_MASK,
+		.enable_reg = RK818_LDO_EN_REG,
+		.enable_mask = BIT(1),
+		.enable_time = 400,
+		.owner = THIS_MODULE,
+	}, {
+		.name = "LDO_REG3",
+		.supply_name = "vcc7",
+		.id = RK818_ID_LDO3,
+		.ops = &rk808_reg_ops,
+		.type = REGULATOR_VOLTAGE,
+		.n_voltages = 16,
+		.linear_ranges = rk808_ldo3_voltage_ranges,
+		.n_linear_ranges = ARRAY_SIZE(rk808_ldo3_voltage_ranges),
+		.vsel_reg = RK818_LDO3_ON_VSEL_REG,
+		.vsel_mask = RK818_LDO3_ON_VSEL_MASK,
+		.enable_reg = RK818_LDO_EN_REG,
+		.enable_mask = BIT(2),
+		.enable_time = 400,
+		.owner = THIS_MODULE,
+	}, {
+		.name = "LDO_REG4",
+		.supply_name = "vcc8",
+		.id = RK818_ID_LDO4,
+		.ops = &rk808_reg_ops,
+		.type = REGULATOR_VOLTAGE,
+		.n_voltages = 17,
+		.linear_ranges = rk808_ldo_voltage_ranges,
+		.n_linear_ranges = ARRAY_SIZE(rk808_ldo_voltage_ranges),
+		.vsel_reg = RK818_LDO4_ON_VSEL_REG,
+		.vsel_mask = RK818_LDO_VSEL_MASK,
+		.enable_reg = RK818_LDO_EN_REG,
+		.enable_mask = BIT(3),
+		.enable_time = 400,
+		.owner = THIS_MODULE,
+	}, {
+		.name = "LDO_REG5",
+		.supply_name = "vcc7",
+		.id = RK818_ID_LDO5,
+		.ops = &rk808_reg_ops,
+		.type = REGULATOR_VOLTAGE,
+		.n_voltages = 17,
+		.linear_ranges = rk808_ldo_voltage_ranges,
+		.n_linear_ranges = ARRAY_SIZE(rk808_ldo_voltage_ranges),
+		.vsel_reg = RK818_LDO5_ON_VSEL_REG,
+		.vsel_mask = RK818_LDO_VSEL_MASK,
+		.enable_reg = RK818_LDO_EN_REG,
+		.enable_mask = BIT(4),
+		.enable_time = 400,
+		.owner = THIS_MODULE,
+	}, {
+		.name = "LDO_REG6",
+		.supply_name = "vcc8",
+		.id = RK818_ID_LDO6,
+		.ops = &rk808_reg_ops,
+		.type = REGULATOR_VOLTAGE,
+		.n_voltages = 18,
+		.linear_ranges = rk808_ldo6_voltage_ranges,
+		.n_linear_ranges = ARRAY_SIZE(rk808_ldo6_voltage_ranges),
+		.vsel_reg = RK818_LDO6_ON_VSEL_REG,
+		.vsel_mask = RK818_LDO_VSEL_MASK,
+		.enable_reg = RK818_LDO_EN_REG,
+		.enable_mask = BIT(5),
+		.enable_time = 400,
+		.owner = THIS_MODULE,
+	}, {
+		.name = "LDO_REG7",
+		.supply_name = "vcc7",
+		.id = RK818_ID_LDO7,
+		.ops = &rk808_reg_ops,
+		.type = REGULATOR_VOLTAGE,
+		.n_voltages = 18,
+		.linear_ranges = rk808_ldo6_voltage_ranges,
+		.n_linear_ranges = ARRAY_SIZE(rk808_ldo6_voltage_ranges),
+		.vsel_reg = RK818_LDO7_ON_VSEL_REG,
+		.vsel_mask = RK818_LDO_VSEL_MASK,
+		.enable_reg = RK818_LDO_EN_REG,
+		.enable_mask = BIT(6),
+		.enable_time = 400,
+		.owner = THIS_MODULE,
+	}, {
+		.name = "LDO_REG8",
+		.supply_name = "vcc8",
+		.id = RK818_ID_LDO8,
+		.ops = &rk808_reg_ops,
+		.type = REGULATOR_VOLTAGE,
+		.n_voltages = 17,
+		.linear_ranges = rk808_ldo_voltage_ranges,
+		.n_linear_ranges = ARRAY_SIZE(rk808_ldo_voltage_ranges),
+		.vsel_reg = RK818_LDO8_ON_VSEL_REG,
+		.vsel_mask = RK818_LDO_VSEL_MASK,
+		.enable_reg = RK818_LDO_EN_REG,
+		.enable_mask = BIT(7),
+		.enable_time = 400,
+		.owner = THIS_MODULE,
+	}, {
+		.name = "LDO_REG9",
+		.supply_name = "vcc9",
+		.id = RK818_ID_LDO9,
+		.ops = &rk808_reg_ops,
+		.type = REGULATOR_VOLTAGE,
+		.n_voltages = 17,
+		.linear_ranges = rk808_ldo_voltage_ranges,
+		.n_linear_ranges = ARRAY_SIZE(rk808_ldo_voltage_ranges),
+		.vsel_reg = RK818_BOOST_LDO9_ON_VSEL_REG,
+		.vsel_mask = RK818_LDO_VSEL_MASK,
+		.enable_reg = RK818_DCDC_EN_REG,
+		.enable_mask = BIT(5),
+		.enable_time = 400,
+		.owner = THIS_MODULE,
+	}, {
+		.name = "SWITCH_REG",
+		.supply_name = "vcc9",
+		.id = RK818_ID_SWITCH,
+		.ops = &rk808_switch_ops,
+		.type = REGULATOR_VOLTAGE,
+		.enable_reg = RK818_DCDC_EN_REG,
+		.enable_mask = BIT(6),
+		.owner = THIS_MODULE,
+	}, {
+		.name = "HDMI_SWITCH",
+		.supply_name = "h_5v",
+		.id = RK818_ID_HDMI_SWITCH,
+		.ops = &rk808_switch_ops,
+		.type = REGULATOR_VOLTAGE,
+		.enable_reg = RK818_H5V_EN_REG,
+		.enable_mask = BIT(0),
+		.owner = THIS_MODULE,
+	}, {
+		.name = "OTG_SWITCH",
+		.supply_name = "usb",
+		.id = RK818_ID_OTG_SWITCH,
+		.ops = &rk808_switch_ops,
+		.type = REGULATOR_VOLTAGE,
+		.enable_reg = RK818_DCDC_EN_REG,
+		.enable_mask = BIT(7),
+		.owner = THIS_MODULE,
+	},
+};
+
 static struct of_regulator_match rk808_reg_matches[] = {
 	[RK808_ID_DCDC1]	= { .name = "DCDC_REG1" },
 	[RK808_ID_DCDC2]	= { .name = "DCDC_REG2" },
@@ -523,11 +773,32 @@ static struct of_regulator_match rk808_reg_matches[] = {
 	[RK808_ID_SWITCH2]	= { .name = "SWITCH_REG2" },
 };
 
+static struct of_regulator_match rk818_reg_matches[] = {
+	[RK818_ID_DCDC1]	= { .name = "DCDC_REG1" },
+	[RK818_ID_DCDC2]	= { .name = "DCDC_REG2" },
+	[RK818_ID_DCDC3]	= { .name = "DCDC_REG3" },
+	[RK818_ID_DCDC4]	= { .name = "DCDC_REG4" },
+	[RK818_ID_BOOST]	= { .name = "DCDC_BOOST" },
+	[RK818_ID_LDO1]		= { .name = "LDO_REG1" },
+	[RK818_ID_LDO2]		= { .name = "LDO_REG2" },
+	[RK818_ID_LDO3]		= { .name = "LDO_REG3" },
+	[RK818_ID_LDO4]		= { .name = "LDO_REG4" },
+	[RK818_ID_LDO5]		= { .name = "LDO_REG5" },
+	[RK818_ID_LDO6]		= { .name = "LDO_REG6" },
+	[RK818_ID_LDO7]		= { .name = "LDO_REG7" },
+	[RK818_ID_LDO8]		= { .name = "LDO_REG8" },
+	[RK818_ID_LDO9]		= { .name = "LDO_REG9" },
+	[RK818_ID_SWITCH]	= { .name = "SWITCH_REG" },
+	[RK818_ID_HDMI_SWITCH]	= { .name = "HDMI_SWITCH" },
+	[RK818_ID_OTG_SWITCH]	= { .name = "OTG_SWITCH" },
+};
+
 static int rk808_regulator_dt_parse_pdata(struct device *dev,
 				   struct device *client_dev,
 				   struct regmap *map,
 				   struct rk808_regulator_data *pdata)
 {
+	struct rk808 *rk808 = dev_get_drvdata(dev->parent);
 	struct device_node *np;
 	int tmp, ret, i;
 
@@ -535,8 +806,12 @@ static int rk808_regulator_dt_parse_pdata(struct device *dev,
 	if (!np)
 		return -ENXIO;
 
-	ret = of_regulator_match(dev, np, rk808_reg_matches,
-				 RK808_NUM_REGULATORS);
+	if (rk808->variant == RK808_ID)
+		ret = of_regulator_match(dev, np, rk808_reg_matches,
+					 RK808_NUM_REGULATORS);
+	else if (rk808->variant == RK818_ID)
+		ret = of_regulator_match(dev, np, rk818_reg_matches,
+					RK818_NUM_REGULATORS);
 	if (ret < 0)
 		goto dt_parse_end;
 
@@ -586,27 +861,53 @@ static int rk808_regulator_probe(struct platform_device *pdev)
 
 	platform_set_drvdata(pdev, pdata);
 
-	/* Instantiate the regulators */
-	for (i = 0; i < RK808_NUM_REGULATORS; i++) {
-		if (!rk808_reg_matches[i].init_data ||
-		    !rk808_reg_matches[i].of_node)
-			continue;
-
-		config.dev = &client->dev;
-		config.driver_data = pdata;
-		config.regmap = rk808->regmap;
-		config.of_node = rk808_reg_matches[i].of_node;
-		config.init_data = rk808_reg_matches[i].init_data;
-
-		rk808_rdev = devm_regulator_register(&pdev->dev,
-						     &rk808_reg[i], &config);
-		if (IS_ERR(rk808_rdev)) {
-			dev_err(&client->dev,
-				"failed to register %d regulator\n", i);
-			return PTR_ERR(rk808_rdev);
+	if (rk808->variant == RK818_ID) {
+		/* Instantiate the regulators */
+		for (i = 0; i < RK818_NUM_REGULATORS; i++) {
+			if (!rk818_reg_matches[i].init_data ||
+			    !rk818_reg_matches[i].of_node)
+				continue;
+
+			config.dev = &client->dev;
+			config.driver_data = pdata;
+			config.regmap = rk808->regmap;
+			config.of_node = rk818_reg_matches[i].of_node;
+			config.init_data = rk818_reg_matches[i].init_data;
+
+			rk808_rdev = devm_regulator_register(&pdev->dev,
+					&rk818_reg[i], &config);
+			if (IS_ERR(rk808_rdev)) {
+				dev_err(&client->dev,
+					"failed to register %d regulator\n", i);
+				return PTR_ERR(rk808_rdev);
+			}
+		}
+	} else if (rk808->variant == RK808_ID) {
+		/* Instantiate the regulators */
+		for (i = 0; i < RK808_NUM_REGULATORS; i++) {
+			if (!rk808_reg_matches[i].init_data ||
+			    !rk808_reg_matches[i].of_node)
+				continue;
+
+			config.dev = &client->dev;
+			config.driver_data = pdata;
+			config.regmap = rk808->regmap;
+			config.of_node = rk808_reg_matches[i].of_node;
+			config.init_data = rk808_reg_matches[i].init_data;
+
+			rk808_rdev = devm_regulator_register(&pdev->dev,
+					&rk808_reg[i], &config);
+			if (IS_ERR(rk808_rdev)) {
+				dev_err(&client->dev,
+					"failed to register %d regulator\n", i);
+				return PTR_ERR(rk808_rdev);
+			}
 		}
+	} else {
+		dev_err(&client->dev, "unsupported RK8XX ID %lu\n",
+			rk808->variant);
+		return -EINVAL;
 	}
-
 	return 0;
 }
 
-- 
1.9.1

[toc] | [prev] | [next] | [standalone]


#1374921 — Re: [RFC 2/3] regulator: rk808: Add support for rk818

FromMark Brown <broonie@kernel.org>
Date2016-04-10 21:10 +0200
SubjectRe: [RFC 2/3] regulator: rk808: Add support for rk818
Message-ID<rmsUa-1i2-17@gated-at.bofh.it>
In reply to#1374121

[Multipart message — attachments visible in raw view] — view raw

On Fri, Apr 08, 2016 at 11:47:40AM +0200, Wadim Egorov wrote:

> +static const struct regulator_linear_range rk818_buck4_voltage_ranges[] = {
> +	REGULATOR_LINEAR_RANGE(1800000, 0, 18, 100000),
> +};
> +
> +static const struct regulator_linear_range rk818_boost_voltage_ranges[] = {
> +	REGULATOR_LINEAR_RANGE(4700000, 0, 7, 100000),
> +};

Why are these done as linear ranges when there's only one range?  This
just adds overhead, just specify the one range directly in the desc and
use the appropriate ops.

> +	if (rk808->variant == RK808_ID)
> +		ret = of_regulator_match(dev, np, rk808_reg_matches,
> +					 RK808_NUM_REGULATORS);
> +	else if (rk808->variant == RK818_ID)
> +		ret = of_regulator_match(dev, np, rk818_reg_matches,
> +					RK818_NUM_REGULATORS);

Don't use of_regulator_match, just specify the DT names for the
regulator in the desc.  Also it looks like you're trying to write a
switch statement with ifs here, just write a switch statement.  It's
clearer and less error prone.

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web