Skip to contentSkip to conversation

regulator: enable regulator support for i.MX23/i.MX28

PATCH In review Stefan Wahren 5 participants 27 messages Apr 29, 2015 – Mar 21, 2016

Subsystems (5)
lore
Share & tools
lore
#0 lore raw

v2 cover regulator: enable regulator support for i.MX23/i.MX28

This patch series adds on-chip regulator support to Freescale i.MX23 and i.MX28. It's the result of the last discussion about cpufreq-dt support [1]. This series doesn't contain cpufreq-dt support anymore because it violated a constraint between VDDD voltage and EMI clock frequency (Thanks to Juergen Borleis for pointing out).

The cpufreq-dt support would be a further patch series.

Summary
=======

Patch 1,2,3 - enable syscon support and add driver for mxs power subsystem Patch 4,5,6 - enable regulator support for i.MX23/i.MX28

The main use of mxs_power driver is to trigger probing of the underlying DT child nodes like the on-chip regulators. The mxs-regulator driver provides for instance the voltage scaling support.

A detailed description of the i.MX28 power subsystem is in the reference manual
[2] and application note 4199 [3].

Changes since V1
================
- rebase on Linux 4.1-rc1
- remove cpufreq-dt support
- use syscon for register access as suggested by Mark Brown
- rework regulator ramp up handling as suggested by Mark Brown
- use real switching frequencies for DC-DC instead of clock settings
- add warning in case of invalid switching frequency as suggested by Mark Brown
- some code clean ups
- add ASCII art of regulators to binding doc
- add more comments to regulator driver
- add COMPILE_TEST to dependencies for mxs power as suggested by Sebastian Reichel
- make use of stmp_device.h

[1] - http://comments.gmane.org/gmane.linux.power-management.general/58287
[2] - http://cache.freescale.com/files/dsp/doc/ref_manual/MCIMX28RM.pdf
[3] - http://cache.freescale.com/files/32bit/doc/app_note/AN4199.pdf

Stefan Wahren (6):
DT: add binding for mxs power subsystem
ARM: mxs: select syscon for platform
power: mxs_power: add driver for mxs power subsystem
DT: add binding for mxs on-chip regulators
regulator: add mxs on-chip regulator driver
ARM: dts: enable regulator support for i.MX23/i.MX28

 .../devicetree/bindings/power/mxs_power.txt        |   17 +
 .../bindings/regulator/mxs-regulator.txt           |   65 +++
 arch/arm/boot/dts/imx23.dtsi                       |   40 +-
 arch/arm/boot/dts/imx28.dtsi                       |   40 +-
 arch/arm/mach-mxs/Kconfig                          |    1 +
 drivers/power/Kconfig                              |    8 +
 drivers/power/Makefile                             |    1 +
 drivers/power/mxs_power.c                          |  136 +++++
 drivers/regulator/Kconfig                          |    8 +
 drivers/regulator/Makefile                         |    1 +
 drivers/regulator/mxs-regulator.c                  |  540 ++++++++++++++++++++
 11 files changed, 855 insertions(+), 2 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/power/mxs_power.txt
 create mode 100644 Documentation/devicetree/bindings/regulator/mxs-regulator.txt
 create mode 100644 drivers/power/mxs_power.c
 create mode 100644 drivers/regulator/mxs-regulator.c
Signature · 1 line
1.7.9.5
#1 lore raw

PATCH v2 1/6 DT: add binding for mxs power subsystem

This patch adds the device tree bindings for the Freescale MXS on-chip power subsystem.

---
 .../devicetree/bindings/power/mxs_power.txt        |   17 +++++++++++++++++
 1 file changed, 17 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/power/mxs_power.txt
Documentation/devicetree/bindings/power/mxs_power.txt new file +17 -0
new file mode 100644
index 0000000..4003ef7
@@ -0,0 +1,17 @@
+Power subsystem for Freescale i.MX23/i.MX28
+
+Required properties:
+- compatible: Should be "fsl,<soc>-power". The supported SoCs include
+  imx23 and imx28.
+- reg: Address and length of the register set for the power subsystem.
+
+Optional properties;
+- interrupts: Interrupts used by the power subsystem
+
+Example for i.MX28:
+
+	power: power at 80044000 {
+		compatible = "fsl,imx28-power", "syscon";
+		reg = <0x80044000 0x2000>;
+		interrupts = <6>;
+	}
Signature · 1 line
1.7.9.5
#2 lore raw

PATCH v2 2/6 ARM: mxs: select syscon for platform

In reply to Stefan Wahren

Select syscon for the MXS platform because it's required by the power subsystem.

---
 arch/arm/mach-mxs/Kconfig |    1 +
 1 file changed, 1 insertion(+)
arch/arm/mach-mxs/Kconfig +1 -0
index 8479413..bf04d38 100644
@@ -17,6 +17,7 @@ config ARCH_MXS
 	depends on ARCH_MULTI_V5
 	select ARCH_REQUIRE_GPIOLIB
 	select CLKSRC_MMIO
+	select MFD_SYSCON
 	select PINCTRL
 	select SOC_BUS
 	select SOC_IMX23
Signature · 1 line
1.7.9.5
#3 lore raw

PATCH v2 3/6 power: mxs_power: add driver for mxs power subsystem

In reply to Stefan Wahren

This patch adds a minimal driver for the Freescale i.MX23, i.MX28 power subsystem. It's required to trigger the probing of the underlying drivers like on-chip regulators.

---
 drivers/power/Kconfig     |    8 +++
 drivers/power/Makefile    |    1 +
 drivers/power/mxs_power.c |  136 +++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 145 insertions(+)
 create mode 100644 drivers/power/mxs_power.c
drivers/power/Kconfig +8 -0
index 4091fb0..0fcc158 100644
@@ -43,6 +43,14 @@ config MAX8925_POWER
 	  Say Y here to enable support for the battery charger in the Maxim
 	  MAX8925 PMIC.
 
+config MXS_POWER
+	tristate "Freescale MXS power subsystem support"
+	depends on ARCH_MXS || COMPILE_TEST
+	help
+	  Say Y here to enable support for the Freescale i.MX23/i.MX28
+	  power subsystem. This is a requirement to get access to on-chip
+	  regulators, battery charger and many more.
+
 config WM831X_BACKUP
 	tristate "WM831X backup battery charger support"
 	depends on MFD_WM831X
drivers/power/Makefile +1 -0
index b7b0181..8edcad7 100644
@@ -10,6 +10,7 @@ obj-$(CONFIG_GENERIC_ADC_BATTERY)	+= generic-adc-battery.o
 obj-$(CONFIG_PDA_POWER)		+= pda_power.o
 obj-$(CONFIG_APM_POWER)		+= apm_power.o
 obj-$(CONFIG_MAX8925_POWER)	+= max8925_power.o
+obj-$(CONFIG_MXS_POWER)		+= mxs_power.o
 obj-$(CONFIG_WM831X_BACKUP)	+= wm831x_backup.o
 obj-$(CONFIG_WM831X_POWER)	+= wm831x_power.o
 obj-$(CONFIG_WM8350_POWER)	+= wm8350_power.o
drivers/power/mxs_power.c new file +136 -0

136 lines not on this page · raw message

Signature · 1 line
1.7.9.5
#4 lore raw

PATCH v2 3/6 power: mxs_power: add driver for mxs power subsystem

Hi,

Quoted 3 lines · Stefan Wahren

This patch adds a minimal driver for the Freescale i.MX23, i.MX28 power subsystem. It's required to trigger the probing of the underlying drivers like on-chip regulators.

I'm not sure what you need the power supply class for. I see only one property (ac connected), which is constant. Maybe just drop the power supply stuff?

This would leave an almost empty driver, which just sets a single register at probe time and probes more drivers. That would probably be more fitting for the MFD subsystem.

-- Sebastian
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20150523/d2e569a5/attachment.sig>

#5 lore raw

PATCH v2 3/6 power: mxs_power: add driver for mxs power subsystem

Hi Sebastian,

Am 23.05.2015 um 19:41 schrieb Sebastian Reichel:

Quoted 9 lines

Hi,

Quoted 3 lines · Stefan Wahren

This patch adds a minimal driver for the Freescale i.MX23, i.MX28 power subsystem. It's required to trigger the probing of the underlying drivers like on-chip regulators.

I'm not sure what you need the power supply class for. I see only one property (ac connected), which is constant. Maybe just drop the power supply stuff?

those SoCs could be powered by 3 different sources:
- 5V wall
- USB
- battery

I choose the first one as a base, because it's the simplest one. Unfortunately i don't have the time to implement all of them.

The Freescale downstream kernel (based on 2.6.35) [1] has a driver to handle all MXS power sources. But i think a clean implementation from the scratch would be necessary for mainline.

Quoted 3 lines

This would leave an almost empty driver, which just sets a single register at probe time and probes more drivers. That would probably be more fitting for the MFD subsystem.

I don't have any problems with fitting the driver to MFD.

Quoted 1 line

-- Sebastian

[1] -
http://git.freescale.com/git/cgit.cgi/imx/linux-2.6-imx.git/tree/drivers/power/mxs/linux.c?h=imx_2.6.35_maintain

#6 lore raw

PATCH v2 3/6 power: mxs_power: add driver for mxs power subsystem

Hi Stefan,

Quoted 14 lines · Stefan Wahren

Am 23.05.2015 um 19:41 schrieb Sebastian Reichel:

Quoted 7 lines · Stefan Wahren
Quoted 3 lines

This patch adds a minimal driver for the Freescale i.MX23, i.MX28 power subsystem. It's required to trigger the probing of the underlying drivers like on-chip regulators.

I'm not sure what you need the power supply class for. I see only one property (ac connected), which is constant. Maybe just drop the power supply stuff?

those SoCs could be powered by 3 different sources:
- 5V wall
- USB
- battery

Quoted 4 lines

I choose the first one as a base, because it's the simplest one. Unfortunately i don't have the time to implement all of them.

From what I can see the driver does not implement the 5V wall

charger handling. It simply assumes, that the 5V wall charger is there.

While you can skip implementation of battery connection check you should make sure, that AC is actually connected.

Quoted 9 lines

The Freescale downstream kernel (based on 2.6.35) [1] has a driver to handle all MXS power sources. But i think a clean implementation from the scratch would be necessary for mainline.

Quoted 3 lines

This would leave an almost empty driver, which just sets a single register at probe time and probes more drivers. That would probably be more fitting for the MFD subsystem.

I don't have any problems with fitting the driver to MFD.

You can keep in in drivers/power. From your code I assumed there would simply be a fixed AC connection and nothing else.

Quoted 4 lines
Quoted 1 line

-- Sebastian

[1] -
http://git.freescale.com/git/cgit.cgi/imx/linux-2.6-imx.git/tree/drivers/power/mxs/linux.c?h=imx_2.6.35_maintain

-- Sebastian
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20150527/9c91ac42/attachment.sig>

#7 lore raw

PATCH v2 3/6 power: mxs_power: add driver for mxs power subsystem

Hi Sebastian,

Am 27.05.2015 um 15:51 schrieb Sebastian Reichel:

Quoted 16 lines

Hi Stefan,

Quoted 13 lines · Stefan Wahren

Am 23.05.2015 um 19:41 schrieb Sebastian Reichel:

Quoted 7 lines · Stefan Wahren
Quoted 3 lines

This patch adds a minimal driver for the Freescale i.MX23, i.MX28 power subsystem. It's required to trigger the probing of the underlying drivers like on-chip regulators.

I'm not sure what you need the power supply class for. I see only one property (ac connected), which is constant. Maybe just drop the power supply stuff?

those SoCs could be powered by 3 different sources:
- 5V wall
- USB
- battery

Quoted 5 lines
Quoted 2 lines

I choose the first one as a base, because it's the simplest one. Unfortunately i don't have the time to implement all of them.

From what I can see the driver does not implement the 5V wall charger handling. It simply assumes, that the 5V wall charger is there.

the driver consists of multiple files in the mxs sub directory. I linked to the main file to reduce search effort. The battery handling incl. charging should be implemented in ddi_power_battery.c

Quoted 1 line

From my understanding it's not possible to determine where the 5V

exactly come from (either 5V wall plug or USB). The driver simply uses the USB PHY state.

Quoted 3 lines

While you can skip implementation of battery connection check you should make sure, that AC is actually connected.

Do you refer to the right state of property POWER_SUPPLY_PROP_ONLINE or driver probing?

Stefan

#8 lore raw

PATCH v2 3/6 power: mxs_power: add driver for mxs power subsystem

Hi,

Quoted 7 lines · Stefan Wahren

the driver consists of multiple files in the mxs sub directory. I linked to the main file to reduce search effort. The battery handling incl. charging should be implemented in ddi_power_battery.c

From my understanding it's not possible to determine where the 5V exactly come from (either 5V wall plug or USB). The driver simply uses the USB PHY state.

Yes, but your driver does not even check, that there is 5V. It even reports AC online if neither USB nor wall charger is connected.

Quoted 5 lines
Quoted 2 lines

While you can skip implementation of battery connection check you should make sure, that AC is actually connected.

Do you refer to the right state of property
POWER_SUPPLY_PROP_ONLINE or driver probing?

I'm referring to the right state.

-- Sebastian
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20150528/0c12a62a/attachment.sig>

#9 lore raw

PATCH v2 4/6 DT: add binding for mxs on-chip regulators

In reply to Stefan Wahren

This patch adds the device tree bindings for the Freescale MXS on-chip regulators.

---
 .../bindings/regulator/mxs-regulator.txt           |   65 ++++++++++++++++++++
 1 file changed, 65 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/regulator/mxs-regulator.txt
Documentation/devicetree/bindings/regulator/mxs-regulator.txt new file +65 -0
new file mode 100644
index 0000000..e7092fc
@@ -0,0 +1,65 @@
+Regulators on Freescale i.MX23/i.MX28
+
+On-chip linear regulator daisy chain:
+
++------------+     VDD5V  +---------+  VDDIO
+| DC-DC      |   +--------> LINREG  +--------->+
+|            |            | VDDIO   |          |
+|            |            +---------+          |
+| DCDC_VDDIO +->-+-----------------------------+
+|            |   |
+|            |   | VDDIO  +---------+  VDDA
+|            |   +--------> LINREG  +--------->+
+|            |            | VDDA    |          |
+|            |            +---------+          |
+| DCDC_VDDA  +->-+-----------------------------+
+|            |   |
+|            |   | VDDA   +---------+  VDD1P5
+|            |   +--------> LINREG  +--------->
+|            |   |        | VDD1P5  |
+|            |   |        +---------+
+|            |   | VDDA   +---------+  VDDD
+|            |   +--------> LINREG  +--------->+
+|            |            | VDDD    |          |
+|            |            +---------+          |
+| DCDC_VDDD  +->-------------------------------+
++------------+                                 |
+                                               v
+
+Required properties:
+- compatible (imx23 and imx28 supported):
+  - "fsl,<soc>-dcdc" for DC-DC converter
+  - "fsl,<soc>-vddd" for VDDD linear regulator
+  - "fsl,<soc>-vdda" for VDDA linear regulator
+  - "fsl,<soc>-vddio" for VDDIO linear regulator
+
+Optional properties:
+- switching-frequency: switching frequency for the DC-DC converter in Hz.
+  Possible values are <1200000>, <1250000> or <1500000> (default).
+
+Any regulator property defined as part of the core regulator
+binding, defined in regulator.txt, can also be used.
+
+Example for i.MX28:
+
+	power: power at 80044000 {
+		compatible = "fsl,imx28-power", "syscon";
+		reg = <0x80044000 0x2000>;
+		interrupts = <6>;
+
+		dcdc: regulator at 1 {
+			compatible = "fsl,imx28-dcdc";
+			regulator-name = "dcdc";
+			regulator-boot-on;
+			regulator-always-on;
+			switching-frequency = <1250000>;
+		};
+
+		reg_vddd: regulator at 2 {
+			compatible = "fsl,imx28-vddd";
+			regulator-name = "vddd";
+			regulator-min-microvolt = <1350000>;
+			regulator-max-microvolt = <1550000>;
+		};
+	};
+
Signature · 1 line
1.7.9.5
#10 lore raw

PATCH v2 4/6 DT: add binding for mxs on-chip regulators

Hi Stefan,

for the i.MX23 the regulator daisy chain looks a little bit different:

+------------+     VDD5V  +---------+  VDDIO
| DC-DC      |   +--------> LINREG  +--------->+
|            |            | VDDIO   |          |
|            |            +---------+          |
| DCDC_VDDIO +->-+-----------------------------+
|            |   |
|            |   | VDDIO  +---------+  VDDMEM
|            |   +--------> LINREG  +--------->
|            |   |        | VDDMEM  |
|            |   |        +---------+
|            |   | VDDIO  +---------+  VDDA
|            |   +--------> LINREG  +--------->+
|            |            | VDDA    |          |
|            |            +---------+          |
| DCDC_VDDA  +->-+-----------------------------+
|            |   | VDDA   +---------+  VDDD
|            |   +--------> LINREG  +--------->+
|            |            | VDDD    |          |
|            |            +---------+          |
| DCDC_VDDD  +->-------------------------------+
+------------+                                 |

                                              v

Regards,
Juergen

#11 lore raw

PATCH v2 4/6 DT: add binding for mxs on-chip regulators

Hello Juergen,

Quoted 28 lines

J?rgen Borleis <[email protected]> hat am 4. Mai 2015 um 15:51 geschrieben:

Hi Stefan,

for the i.MX23 the regulator daisy chain looks a little bit different:

+------------+     VDD5V  +---------+  VDDIO
| DC-DC      |   +--------> LINREG  +--------->+
|            |            | VDDIO   |          |
|            |            +---------+          |
| DCDC_VDDIO +->-+-----------------------------+
|            |   |
|            |   | VDDIO  +---------+ VDDMEM
|            |   +--------> LINREG  +--------->
|            |   |        | VDDMEM  |
|            |   |        +---------+
|            |   | VDDIO  +---------+  VDDA
|            |   +--------> LINREG  +--------->+
|            |            | VDDA    |          |
|            |            +---------+          |
| DCDC_VDDA  +->-+-----------------------------+
|            |   | VDDA   +---------+  VDDD
|            |   +--------> LINREG  +--------->+
|            |            | VDDD    |          |
|            |            +---------+          |
| DCDC_VDDD  +->-------------------------------+
+------------+                                 |
Quoted 1 line

v

damn! I didn't noticed that VDDMEM is powered by VDDIO and VDD1P5 is powered by VDDA. Thank you very much.

Quoted 1 line

From my understanding VDDMEM and VDD1P5 describe the same regulator function

(provides power to external memory such as SDRAM and mDDR which doesn't fit to VDDD, VDDIO or VDDA). But the usage of
the name is not consistent across the documentation:

                  | i.MX23 | i.MX28 
------------------------------------
Application note  | VDDMEM | VDD1P5
Reference manual  | VDDMEM | VDDMEM
Data sheet        | -      | VDD1P5

I would suggest to use VDDMEM, because the registers are always called HW_VDDMEM (for both SoCs).

I think we have 3 options here:

a) add the regulator daisy chain for the i.MX23 too
b) remove VDD1P5 from the i.MX28 diagram so it would fit for both again
c) remove the diagram complete

I would prefer option b. What's your opinion?

Quoted 3 lines

Regards,
Juergen

Best regards
Stefan

#12 lore raw

PATCH v2 4/6 DT: add binding for mxs on-chip regulators

Hi Stefan,

Quoted 34 lines · On Monday 04 May 2015 22:20:50 Stefan Wahren wrote:

[...]

Quoted 24 lines
+------------+     VDD5V  +---------+  VDDIO
| DC-DC      |   +--------> LINREG  +--------->+
|            |            | VDDIO   |          |
|            |            +---------+          |
|            |                                 |
| DCDC_VDDIO +->-+-----------------------------+
|            |   |
|            |   | VDDIO  +---------+ VDDMEM
|            |   +--------> LINREG  +--------->
|            |   |        | VDDMEM  |
|            |   |        +---------+
|            |   | VDDIO  +---------+  VDDA
|            |   +--------> LINREG  +--------->+
|            |            | VDDA    |          |
|            |            +---------+          |
| DCDC_VDDA  +->-+-----------------------------+
|            |   |
|            |   | VDDA   +---------+  VDDD
|            |   +--------> LINREG  +--------->+
|            |            | VDDD    |          |
|            |            +---------+          |
| DCDC_VDDD  +->-------------------------------+
+------------+                                 |
Quoted 1 line

v

damn! I didn't noticed that VDDMEM is powered by VDDIO and VDD1P5 is powered by VDDA. Thank you very much.

From my understanding VDDMEM and VDD1P5 describe the same regulator function (provides power to external memory such as SDRAM and mDDR which doesn't fit to VDDD, VDDIO or VDDA). But the usage of
the name is not consistent across the documentation:

Quoted 8 lines
                  | i.MX23 | i.MX28
------------------------------------
Application note  | VDDMEM | VDD1P5
Reference manual  | VDDMEM | VDDMEM
Data sheet        | -      | VDD1P5

I would suggest to use VDDMEM, because the registers are always called HW_VDDMEM (for both SoCs).

Ack.

Quoted 7 lines

I think we have 3 options here:

a) add the regulator daisy chain for the i.MX23 too
b) remove VDD1P5 from the i.MX28 diagram so it would fit for both again
c) remove the diagram complete

I would prefer option b. What's your opinion?

I prefer a) because once the details are known, we should keep them.

Regards,
Juergen

#13 lore raw

PATCH v2 4/6 DT: add binding for mxs on-chip regulators

Hi Juergen,

Quoted 10 lines

J?rgen Borleis <[email protected]> hat am 5. Mai 2015 um 10:21 geschrieben:

Hi Stefan,

Quoted 4 lines · On Monday 04 May 2015 22:20:50 Stefan Wahren wrote:

[...]

I think we have 3 options here:

Quoted 7 lines
Quoted 5 lines

a) add the regulator daisy chain for the i.MX23 too
b) remove VDD1P5 from the i.MX28 diagram so it would fit for both again
c) remove the diagram complete

I would prefer option b. What's your opinion?

I prefer a) because once the details are known, we should keep them.

beside the point this could be to much diagrams for a binding documentation, i don't have any objections about option a).

Quoted 3 lines

Regards,
Juergen

Regards
Stefan

#14 lore raw

PATCH v2 5/6 regulator: add mxs on-chip regulator driver

In reply to Stefan Wahren

This patch adds driver support for Freescale i.MX23, i.MX28 on-chip regulators. The driver supports the following components:
dcdc, vddd, vdda and vddio.

---
 drivers/regulator/Kconfig         |    8 +
 drivers/regulator/Makefile        |    1 +
 drivers/regulator/mxs-regulator.c |  540 +++++++++++++++++++++++++++++++++++++
 3 files changed, 549 insertions(+)
 create mode 100644 drivers/regulator/mxs-regulator.c
drivers/regulator/Kconfig +8 -0
index a6f116a..7b525f5 100644
@@ -450,6 +450,14 @@ config REGULATOR_MT6397
 	  This driver supports the control of different power rails of device
 	  through regulator interface.
 
+config REGULATOR_MXS
+	tristate "Freescale MXS on-chip regulators"
+	depends on (MXS_POWER || COMPILE_TEST)
+	help
+	  Say y here to support Freescale MXS on-chip regulators.
+	  It is recommended that this option be enabled on i.MX23,
+	  i.MX28 platform.
+
 config REGULATOR_PALMAS
 	tristate "TI Palmas PMIC Regulators"
 	depends on MFD_PALMAS
drivers/regulator/Makefile +1 -0
index 2c4da15..a3ebf23 100644
@@ -60,6 +60,7 @@ 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_MT6397)	+= mt6397-regulator.o
+obj-$(CONFIG_REGULATOR_MXS) += mxs-regulator.o
 obj-$(CONFIG_REGULATOR_QCOM_RPM) += qcom_rpm-regulator.o
 obj-$(CONFIG_REGULATOR_PALMAS) += palmas-regulator.o
 obj-$(CONFIG_REGULATOR_PFUZE100) += pfuze100-regulator.o
drivers/regulator/mxs-regulator.c new file +540 -0

540 lines not on this page · raw message

Signature · 1 line
1.7.9.5
maintainer
#15 lore raw

PATCH v2 5/6 regulator: add mxs on-chip regulator driver

drivers/regulator/mxs-regulator.c line 346

Quoted 3 lines · Stefan Wahren
drivers/regulator/mxs-regulator.c new file +3 -0
+static struct regulator_ops mxs_dcdc_ops = {
+	.is_enabled		= regulator_is_enabled_regmap,
+};

Why do we have an is_enabled() operation but no enable or disable operation? I'm also not 100% clear what code the DCDCs and LDOs are sharing here...

drivers/regulator/mxs-regulator.c line 494

Quoted 5 lines
drivers/regulator/mxs-regulator.c new file +5 -0
+	initdata = of_get_regulator_init_data(dev, dev->of_node, &info->desc);
+	if (!initdata) {
+		dev_err(dev, "missing regulator init data\n");
+		return -EINVAL;
+	}

This is not an error, init data is totally optional.

drivers/regulator/mxs-regulator.c line 520

Quoted 12 lines
drivers/regulator/mxs-regulator.c new file +12 -0
+	rdev = devm_regulator_register(dev, &info->desc, &config);
+	if (IS_ERR(rdev)) {
+		int ret = PTR_ERR(rdev);
+
+		dev_err(dev, "%s: failed to register regulator(%d)\n",
+			__func__, ret);
+		return ret;
+	}
+
+	if (!of_property_read_u32(dev->of_node, "switching-frequency",
+				  &switch_freq))
+		mxs_set_dcdc_freq(rdev, switch_freq);

why are we registering the regulator before we've finished parsing the DT - I'd expect us to do this first rather than have things potentially start using the regulator with the confguration not completed.

drivers/regulator/mxs-regulator.c line 522

Quoted 1 line
drivers/regulator/mxs-regulator.c new file +1 -0
+	platform_set_drvdata(pdev, rdev);

This looks unsafe - either we don't need to set this at all or one of
the ops could be invoked when the regulator is registered and try to use
the driver data before it is set.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 473 bytes
Desc: Digital signature
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20150504/083c0c5d/attachment.sig>

#16 lore raw

PATCH v2 5/6 regulator: add mxs on-chip regulator driver

Hi Mark,

Quoted 11 lines

Mark Brown <[email protected]> hat am 4. Mai 2015 um 14:36 geschrieben:

drivers/regulator/mxs-regulator.c line 346

Quoted 3 lines · Stefan Wahren
drivers/regulator/mxs-regulator.c new file +3 -0
+static struct regulator_ops mxs_dcdc_ops = {
+ .is_enabled = regulator_is_enabled_regmap,
+};

Why do we have an is_enabled() operation but no enable or disable operation?

i'm sorry, i forgot the following point in the changelog:

- move dcdc handling from mxs_power to mxs-regulator

I hope the change is okay. I implemented only is_enabled() to have at least 1 operation.
But it's not really necessary.

Quoted 2 lines

I'm also not 100% clear what code the DCDCs and LDOs are sharing here...

Actually only probing and the regulator info structure.

Best regards
Stefan

#17 lore raw

PATCH v2 5/6 regulator: add mxs on-chip regulator driver

Hi Mark,

Quoted 18 lines

Stefan Wahren <[email protected]> hat am 4. Mai 2015 um 22:34 geschrieben:

Hi Mark,

Quoted 11 lines

Mark Brown <[email protected]> hat am 4. Mai 2015 um 14:36 geschrieben:

drivers/regulator/mxs-regulator.c line 346

Quoted 3 lines · Stefan Wahren
drivers/regulator/mxs-regulator.c new file +3 -0
+static struct regulator_ops mxs_dcdc_ops = {
+ .is_enabled = regulator_is_enabled_regmap,
+};

Why do we have an is_enabled() operation but no enable or disable operation?

Quoted 7 lines

i'm sorry, i forgot the following point in the changelog:

- move dcdc handling from mxs_power to mxs-regulator

I hope the change is okay. I implemented only is_enabled() to have at least 1 operation.
But it's not really necessary.

do we need enable / disable operation?

In the bootloader code enabling the DC-DC is critical. There is a known issue which falsely triggers the brownout detection.

Quoted 5 lines
Quoted 3 lines

I'm also not 100% clear what code the DCDCs and LDOs are sharing here...

Actually only probing and the regulator info structure.

How can i improve that?

Quoted 3 lines

Best regards
Stefan

maintainer
#18 lore raw

PATCH v2 5/6 regulator: add mxs on-chip regulator driver

Quoted 6 lines · Stefan Wahren
Quoted 5 lines

Stefan Wahren <[email protected]> hat am 4. Mai 2015 um 22:34

i'm sorry, i forgot the following point in the changelog:

- move dcdc handling from mxs_power to mxs-regulator

Quoted 8 lines
Quoted 3 lines

I hope the change is okay. I implemented only is_enabled() to have at least 1 operation.
But it's not really necessary.

do we need enable / disable operation?

In the bootloader code enabling the DC-DC is critical. There is a known issue which falsely triggers the brownout detection.

Why would the driver not provide these operations?

Quoted 6 lines
Quoted 4 lines
Quoted 2 lines

I'm also not 100% clear what code the DCDCs and LDOs are sharing here...

Actually only probing and the regulator info structure.

How can i improve that?

If the devices aren't sharing code then they should be separate drivers.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 473 bytes
Desc: Digital signature
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20150507/3fcf8b63/attachment.sig>

#19 lore raw

PATCH v2 5/6 regulator: add mxs on-chip regulator driver

Quoted 15 lines

Mark Brown <[email protected]> hat am 7. Mai 2015 um 20:52 geschrieben:

Quoted 10 lines · Stefan Wahren
Quoted 10 lines

Stefan Wahren <[email protected]> hat am 4. Mai 2015 um 22:34

i'm sorry, i forgot the following point in the changelog:

- move dcdc handling from mxs_power to mxs-regulator

I hope the change is okay. I implemented only is_enabled() to have at least 1
operation.
But it's not really necessary.

Quoted 7 lines
Quoted 5 lines

do we need enable / disable operation?

In the bootloader code enabling the DC-DC is critical. There is a known issue
which falsely triggers the brownout detection.

Why would the driver not provide these operations?

I didn't implement this operation because the suggested workaround for the hardware issue isn't very nice
(disable brownout detection during enabling DC-DC). I was afraid of the implementation.

Quoted 9 lines
Quoted 7 lines
Quoted 5 lines
Quoted 3 lines

I'm also not 100% clear what code the DCDCs and LDOs are sharing here...

Actually only probing and the regulator info structure.

How can i improve that?

If the devices aren't sharing code then they should be separate drivers.

Okay.

mxs-regulator-ldo.c
mxs-regulator-dcdc.c

What do you think of?

maintainer
#20 lore raw

PATCH v2 5/6 regulator: add mxs on-chip regulator driver

Quoted 6 lines · Stefan Wahren
Quoted 5 lines

Mark Brown <[email protected]> hat am 7. Mai 2015 um 20:52 geschrieben:

Quoted 3 lines

In the bootloader code enabling the DC-DC is critical. There is a known issue
which falsely triggers the brownout detection.

Quoted 6 lines
Quoted 1 line

Why would the driver not provide these operations?

I didn't implement this operation because the suggested workaround for the hardware issue isn't very nice
(disable brownout detection during enabling DC-DC). I was afraid of the implementation.

That doesn't sound too complicated?

Quoted 8 lines
Quoted 1 line

If the devices aren't sharing code then they should be separate drivers.

Okay.

mxs-regulator-ldo.c
mxs-regulator-dcdc.c

What do you think of?

Sure.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 473 bytes
Desc: Digital signature
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20150507/8ce42fec/attachment.sig>

#21 lore raw

PATCH v2 5/6 regulator: add mxs on-chip regulator driver

Quoted 11 lines

Mark Brown <[email protected]> hat am 7. Mai 2015 um 21:32 geschrieben:

Quoted 5 lines · Stefan Wahren
Quoted 5 lines

Mark Brown <[email protected]> hat am 7. Mai 2015 um 20:52 geschrieben:

Quoted 3 lines

In the bootloader code enabling the DC-DC is critical. There is a known issue
which falsely triggers the brownout detection.

Quoted 9 lines
Quoted 6 lines
Quoted 1 line

Why would the driver not provide these operations?

I didn't implement this operation because the suggested workaround for the hardware issue isn't very nice
(disable brownout detection during enabling DC-DC). I was afraid of the implementation.

That doesn't sound too complicated?

Okay, i think i managed the brownout handling.

Unfortunately i'm stuck at the next step. The DC-DC (3 way output) can supply 3 LDOs vddd, vdda, vddio. In case of a DC-DC state change the 3 regulators needs to be reconfigured before.

I tought of REGULATOR_EVENT_PRE_DISABLE and REGULATOR_EVENT_PRE_ENABLE events, but i'm not sure that's the right way to achieve a synchronization between DC-DC and consuming LDOs.

maintainer
#22 lore raw

PATCH v2 5/6 regulator: add mxs on-chip regulator driver

Quoted 17 lines · Stefan Wahren
Quoted 6 lines

Mark Brown <[email protected]> hat am 7. Mai 2015 um 21:32 geschrieben:

Quoted 3 lines
Quoted 3 lines
Quoted 3 lines

In the bootloader code enabling the DC-DC is critical. There is a known issue
which falsely triggers the brownout detection.

Quoted 8 lines
Quoted 6 lines
Quoted 1 line

Why would the driver not provide these operations?

I didn't implement this operation because the suggested workaround for the hardware issue isn't very nice
(disable brownout detection during enabling DC-DC). I was afraid of the implementation.

That doesn't sound too complicated?

Okay, i think i managed the brownout handling.

Quoted 7 lines

Unfortunately i'm stuck at the next step. The DC-DC (3 way output) can supply 3 LDOs vddd, vdda, vddio. In case of a DC-DC state change the 3 regulators needs to be reconfigured before.

I tought of REGULATOR_EVENT_PRE_DISABLE and REGULATOR_EVENT_PRE_ENABLE events, but i'm not sure that's the right way to achieve a synchronization between DC-DC and consuming LDOs.

OK, that's possibly sounding a bit complicated. Is it just a case of
writing some value, doing a reconfiguration and rewriting the original
value or is it something more? If it's much more complicated than that
then I think putting a comment in the driver explaining what the issue
is would be the right step, that would address the issue with the driver
looking strange.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 473 bytes
Desc: Digital signature
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20150527/8fce3acb/attachment.sig>

#23 lore raw

PATCH v2 5/6 regulator: add mxs on-chip regulator driver

Quoted 36 lines

Mark Brown <[email protected]> hat am 27. Mai 2015 um 19:33 geschrieben:

Quoted 25 lines · Stefan Wahren
Quoted 9 lines

Mark Brown <[email protected]> hat am 7. Mai 2015 um 21:32 geschrieben:

Quoted 6 lines
Quoted 6 lines
Quoted 4 lines

In the bootloader code enabling the DC-DC is critical. There is a known
issue
which falsely triggers the brownout detection.

Why would the driver not provide these operations?

Quoted 7 lines
Quoted 5 lines

I didn't implement this operation because the suggested workaround for the
hardware issue isn't very nice
(disable brownout detection during enabling DC-DC). I was afraid of the implementation.

That doesn't sound too complicated?

Okay, i think i managed the brownout handling.

Unfortunately i'm stuck at the next step. The DC-DC (3 way output) can supply 3
LDOs vddd, vdda, vddio. In case of a DC-DC state change the 3 regulators needs
to be reconfigured before.

Quoted 5 lines

I tought of REGULATOR_EVENT_PRE_DISABLE and REGULATOR_EVENT_PRE_ENABLE events,
but i'm not sure that's the right way to achieve a synchronization between DC-DC
and consuming LDOs.

Quoted 3 lines

OK, that's possibly sounding a bit complicated. Is it just a case of writing some value, doing a reconfiguration and rewriting the original value or is it something more?

In case of a single driver instance instead of 4 ones (vddd, vddio, vdda, dc-dc), things would be much easier.

Here are the steps for disabling DC-DC:

1. configure vddio to work without DC-DC
2. configure vdda to work without DC-DC
3. configure vddd to work without DC-DC
4. backup DC-DC settings
5. disable brownout detection
6. disable DC-DC
7. restore DC-DC settings

My problem is that step 1 to 3 must be done step by step through the other regulator instances.

Quoted 4 lines

If it's much more complicated than that
then I think putting a comment in the driver explaining what the issue is would be the right step, that would address the issue with the driver looking strange.

Enabling or disabling DC-DC is only needed internally by the power subsystem (e.g. in case of handoff AC to battery), because the DC-DC only supplys the regulator daisy. From my understanding hardware components could use only the regulator outputs. In the end a state change is necessary, but it shouldn't be a public.

maintainer
#24 lore raw

PATCH v2 5/6 regulator: add mxs on-chip regulator driver

Quoted 13 lines · Stefan Wahren

In case of a single driver instance instead of 4 ones (vddd, vddio, vdda, dc-dc), things would be much easier.

Here are the steps for disabling DC-DC:

1. configure vddio to work without DC-DC
2. configure vdda to work without DC-DC
3. configure vddd to work without DC-DC
4. backup DC-DC settings
5. disable brownout detection
6. disable DC-DC
7. restore DC-DC settings

Quoted 2 lines

My problem is that step 1 to 3 must be done step by step through the other regulator instances.

For the regulator API steps 1-3 aren't going to be needed since dependency management means that we won't try to disable a regulator that we think is in use.

Quoted 10 lines
Quoted 4 lines

If it's much more complicated than that
then I think putting a comment in the driver explaining what the issue is would be the right step, that would address the issue with the driver looking strange.

Enabling or disabling DC-DC is only needed internally by the power subsystem (e.g. in case of handoff AC to battery), because the DC-DC only supplys the regulator daisy. From my understanding hardware components could use only the regulator outputs. In the end a state change is necessary, but it shouldn't be a public.

Should this actually be shown as a regulator then and not as part of the
power controller?
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 473 bytes
Desc: Digital signature
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20150528/3b54f5a5/attachment.sig>

#25 lore raw

PATCH v2 6/6 ARM: dts: enable regulator support for i.MX23/i.MX28

In reply to Stefan Wahren

This patch enables the on-chip regulator support for all i.MX23 and i.MX28 boards.

---
 arch/arm/boot/dts/imx23.dtsi |   40 +++++++++++++++++++++++++++++++++++++++-
 arch/arm/boot/dts/imx28.dtsi |   40 +++++++++++++++++++++++++++++++++++++++-
 2 files changed, 78 insertions(+), 2 deletions(-)
arch/arm/boot/dts/imx23.dtsi +39 -1
index bbcfb5a..efdd702 100644
@@ -404,8 +404,46 @@
 			};
 
 			power at 80044000 {
+				compatible = "fsl,imx23-power", "syscon";
 				reg = <0x80044000 0x2000>;
-				status = "disabled";
+				interrupts = <3>;
+
+				dcdc: regulator at 1 {
+					compatible = "fsl,imx23-dcdc";
+					regulator-name = "dcdc";
+					regulator-boot-on;
+					regulator-always-on;
+				};
+
+				reg_vddd: regulator at 2 {
+					compatible = "fsl,imx23-vddd";
+					regulator-name = "vddd";
+					regulator-min-microvolt = <1350000>;
+					regulator-max-microvolt = <1550000>;
+					vddd-supply = <&reg_vdda>;
+					regulator-boot-on;
+					regulator-always-on;
+				};
+
+				reg_vdda: regulator at 3 {
+					compatible = "fsl,imx23-vdda";
+					regulator-name = "vdda";
+					regulator-min-microvolt = <1725000>;
+					regulator-max-microvolt = <1950000>;
+					vdda-supply = <&reg_vddio>;
+					regulator-boot-on;
+					regulator-always-on;
+				};
+
+				reg_vddio: regulator at 4 {
+					compatible = "fsl,imx23-vddio";
+					regulator-name = "vddio";
+					regulator-min-microvolt = <3000000>;
+					regulator-max-microvolt = <3575000>;
+					regulator-microvolt-offset = <80000>;
+					regulator-boot-on;
+					regulator-always-on;
+				};
 			};
 
 			saif1: saif at 80046000 {
arch/arm/boot/dts/imx28.dtsi +39 -1
index 25e25f8..378b1f2 100644
@@ -1035,8 +1035,46 @@
 			};
 
 			power: power at 80044000 {
+				compatible = "fsl,imx28-power", "syscon";
 				reg = <0x80044000 0x2000>;
-				status = "disabled";
+				interrupts = <6>;
+
+				dcdc: regulator at 1 {
+					compatible = "fsl,imx28-dcdc";
+					regulator-name = "dcdc";
+					regulator-boot-on;
+					regulator-always-on;
+				};
+
+				reg_vddd: regulator at 2 {
+					compatible = "fsl,imx28-vddd";
+					regulator-name = "vddd";
+					regulator-min-microvolt = <1350000>;
+					regulator-max-microvolt = <1550000>;
+					vddd-supply = <&reg_vdda>;
+					regulator-boot-on;
+					regulator-always-on;
+				};
+
+				reg_vdda: regulator at 3 {
+					compatible = "fsl,imx28-vdda";
+					regulator-name = "vdda";
+					regulator-min-microvolt = <1725000>;
+					regulator-max-microvolt = <1950000>;
+					vdda-supply = <&reg_vddio>;
+					regulator-boot-on;
+					regulator-always-on;
+				};
+
+				reg_vddio: regulator at 4 {
+					compatible = "fsl,imx28-vddio";
+					regulator-name = "vddio";
+					regulator-min-microvolt = <3000000>;
+					regulator-max-microvolt = <3550000>;
+					regulator-microvolt-offset = <80000>;
+					regulator-boot-on;
+					regulator-always-on;
+				};
 			};
 
 			saif1: saif at 80046000 {
Signature · 1 line
1.7.9.5
#26 lore raw
In reply to Stefan Wahren

Hi Stefan,

Quoted 2 lines · Stefan Wahren <stefan.wahren <at> i2se.com> writes:

This patch series adds on-chip regulator support to Freescale i.MX23 and

i.MX28.

Quoted 1 line

It's the result of the last discussion about cpufreq-dt support [1]. This

series

Quoted 5 lines

doesn't contain cpufreq-dt support anymore because it violated a constraint between VDDD voltage and EMI clock frequency (Thanks to Juergen Borleis for pointing out).

The cpufreq-dt support would be a further patch series.

Any plans for an version 3 of this patch? I'm really looking forward into having this patchset be merged into mainline!

Best regards
Jörg Krause