regulator: enable regulator support for i.MX23/i.MX28
Subsystems (5)
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
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
@@ -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
PATCH v2 2/6 ARM: mxs: select syscon for platform
In reply to Stefan WahrenSelect 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
@@ -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
PATCH v2 3/6 power: mxs_power: add driver for mxs power subsystem
In reply to Stefan WahrenThis 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
@@ -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
@@ -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
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>
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
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
-- 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>
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
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.cFrom 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_ONLINEor 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>
PATCH v2 4/6 DT: add binding for mxs on-chip regulators
In reply to Stefan WahrenThis 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
@@ -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
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
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
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 | - | VDD1P5I 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 completeI would prefer option b. What's your opinion?
I prefer a) because once the details are known, we should keep them.
Regards,
Juergen
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 completeI 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
PATCH v2 5/6 regulator: add mxs on-chip regulator driver
In reply to Stefan WahrenThis 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
@@ -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
@@ -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
Mark Brown
maintainerPATCH 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>
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
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_powerto mxs-regulatorI 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
Mark Brown
maintainerPATCH 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_powerto 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>
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_powerto mxs-regulatorI 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.cmxs-regulator-dcdc.c
What do you think of?
Mark Brown
maintainerPATCH 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.cmxs-regulator-dcdc.cWhat 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>
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.
Mark Brown
maintainerPATCH 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_DISABLEandREGULATOR_EVENT_PRE_ENABLEevents, 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>
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_DISABLEandREGULATOR_EVENT_PRE_ENABLEevents,
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.
Mark Brown
maintainerPATCH 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>
PATCH v2 6/6 ARM: dts: enable regulator support for i.MX23/i.MX28
In reply to Stefan WahrenThis 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
@@ -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 = <®_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 = <®_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
@@ -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 = <®_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 = <®_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
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