Message ID | 1397209093-10077-8-git-send-email-carlo@caione.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Fri, Apr 11, 2014 at 11:38:11AM +0200, Carlo Caione wrote: > In all the DTs the min and max microvolt allowed for each regulator are actually > the min and max voltage possible for the regulator itself. This is not safe but > we do not have the ranges allowed for each board and the original Allwinner > driver does exactly this way. Is there any code in their kernel which varies the supply voltages? If there isn't then simply omitting the voltage ranges is the best option, leaving the supplies fixed. If there is then the range it uses is a good starting point. In general supplies will be fixed voltage on a given board unless there is a specific reason to vary them. > + regulators { > + compatible = "x-powers,axp20x-reg"; This compatible isn't part of the driver.
On Fri, Apr 11, 2014 at 2:29 PM, Mark Brown <broonie@kernel.org> wrote: > On Fri, Apr 11, 2014 at 11:38:11AM +0200, Carlo Caione wrote: > >> In all the DTs the min and max microvolt allowed for each regulator are actually >> the min and max voltage possible for the regulator itself. This is not safe but >> we do not have the ranges allowed for each board and the original Allwinner >> driver does exactly this way. > > Is there any code in their kernel which varies the supply voltages? If > there isn't then simply omitting the voltage ranges is the best option, > leaving the supplies fixed. If there is then the range it uses is a > good starting point. In general supplies will be fixed voltage on a > given board unless there is a specific reason to vary them. The supply voltage (ipsout) for the regulators is fixed and AFAIK there is no code for changing it. I'll omit the voltage ranges then. >> + regulators { >> + compatible = "x-powers,axp20x-reg"; > > This compatible isn't part of the driver. Yes I know. The problem here is that in v4 I had to fill in the field .of_compatible of the mfd_cell with "x-powers,axp20x-reg". This because the regulator_dev_lookup() checks for dev->of_node when looking for the supply so I needed the compatible string in the DT to have the dev->of_node filled in by mfd_add_device(). What do you suggest? Modify the regulator driver? Thank you,
On Fri, Apr 11, 2014 at 03:04:32PM +0200, Carlo Caione wrote: > On Fri, Apr 11, 2014 at 2:29 PM, Mark Brown <broonie@kernel.org> wrote: > >> + regulators { > >> + compatible = "x-powers,axp20x-reg"; > > This compatible isn't part of the driver. > Yes I know. The problem here is that in v4 I had to fill in the field > .of_compatible of the mfd_cell with "x-powers,axp20x-reg". This > because the regulator_dev_lookup() checks for dev->of_node when > looking for the supply so I needed the compatible string in the DT to > have the dev->of_node filled in by mfd_add_device(). > What do you suggest? Modify the regulator driver? You're looking for regulator_bulk_register_supply_alias() in the MFD driver (via parent_supplies in the MFD cell probably).
Hi Carlo, On Fri, Apr 11, 2014 at 11:38:11AM +0200, Carlo Caione wrote: > Signed-off-by: Hans de Goede <hdegoede@redhat.com> > Signed-off-by: Carlo Caione <carlo@caione.org> > --- > > In all the DTs the min and max microvolt allowed for each regulator are actually > the min and max voltage possible for the regulator itself. This is not safe but > we do not have the ranges allowed for each board and the original Allwinner > driver does exactly this way. > > AXP20x has the so called Power Path Management (IPS) that can select the proper > power supply according to the status of the external power and the Li-battery > status. The output of the IPS block is usually a 5V fixed voltage used as > input supply for all the other regulators. This fixed voltage is represented > in the DT as a fixed voltage regulator in the "regulator" subnode. > > arch/arm/boot/dts/sun4i-a10-a1000.dts | 69 +++++++++++++++++++++++ > arch/arm/boot/dts/sun4i-a10-cubieboard.dts | 69 +++++++++++++++++++++++ > arch/arm/boot/dts/sun4i-a10-hackberry.dts | 75 +++++++++++++++++++++++++ > arch/arm/boot/dts/sun4i-a10-inet97fv2.dts | 69 +++++++++++++++++++++++ > arch/arm/boot/dts/sun4i-a10-mini-xplus.dts | 75 +++++++++++++++++++++++++ > arch/arm/boot/dts/sun4i-a10-olinuxino-lime.dts | 75 +++++++++++++++++++++++++ > arch/arm/boot/dts/sun4i-a10-pcduino.dts | 69 +++++++++++++++++++++++ > arch/arm/boot/dts/sun7i-a20-cubieboard2.dts | 70 +++++++++++++++++++++++ > arch/arm/boot/dts/sun7i-a20-cubietruck.dts | 70 +++++++++++++++++++++++ > arch/arm/boot/dts/sun7i-a20-olinuxino-micro.dts | 70 +++++++++++++++++++++++ That looks like a lot of them. Did you test all of them? Are all those regulators you define used on all these boards? > 10 files changed, 711 insertions(+) > > diff --git a/arch/arm/boot/dts/sun4i-a10-a1000.dts b/arch/arm/boot/dts/sun4i-a10-a1000.dts > index fa746aea..029a880 100644 > --- a/arch/arm/boot/dts/sun4i-a10-a1000.dts > +++ b/arch/arm/boot/dts/sun4i-a10-a1000.dts > @@ -88,6 +88,75 @@ > pinctrl-names = "default"; > pinctrl-0 = <&i2c0_pins_a>; > status = "okay"; > + #address-cells = <1>; > + #size-cells = <0>; That should be in the DTSI. > + axp209: pmic@34 { > + compatible = "x-powers,axp209"; > + reg = <0x34>; > + interrupts = <0>; > + > + interrupt-controller; > + #interrupt-cells = <1>; > + > + acin-supply = <&axp_ipsout_reg>; > + vin2-supply = <&axp_ipsout_reg>; > + vin3-supply = <&axp_ipsout_reg>; > + ldo24in-supply = <&axp_ipsout_reg>; > + ldo3in-supply = <&axp_ipsout_reg>; > + ldo5in-supply = <&axp_ipsout_reg>; > + > + regulators { > + compatible = "x-powers,axp20x-reg"; I told you a few times already, but don't introduce pattern-matching compatibles. > + > + x-powers,dcdc-freq = <1500>; > + > + axp_ipsout_reg: axp_ipsout { > + compatible = "regulator-fixed"; > + regulator-name = "axp-ipsout"; > + regulator-min-microvolt = <5000000>; > + regulator-max-microvolt = <5000000>; > + regulator-always-on; > + }; > + > + axp_vcore_reg: dcdc2 { > + regulator-min-microvolt = <700000>; > + regulator-max-microvolt = <2275000>; > + regulator-always-on; > + }; > + > + axp_ddr_reg: dcdc3 { > + regulator-min-microvolt = <700000>; > + regulator-max-microvolt = <3500000>; > + regulator-always-on; > + }; > + > + axp_rtc_reg: ldo1 { > + regulator-always-on; > + }; > + > + axp_analog_reg: ldo2 { > + regulator-min-microvolt = <1800000>; > + regulator-max-microvolt = <3300000>; > + regulator-always-on; > + }; > + > + axp_pll_reg: ldo3 { > + regulator-min-microvolt = <700000>; > + regulator-max-microvolt = <3500000>; > + }; > + > + axp_hdmi_reg: ldo4 { > + regulator-min-microvolt = <1250000>; > + regulator-max-microvolt = <3300000>; > + }; > + > + axp_mic_reg: ldo5 { > + regulator-min-microvolt = <1800000>; > + regulator-max-microvolt = <3300000>; > + }; > + }; > + }; > }; > }; > > diff --git a/arch/arm/boot/dts/sun4i-a10-cubieboard.dts b/arch/arm/boot/dts/sun4i-a10-cubieboard.dts > index 4684cbe..635fd4b 100644 > --- a/arch/arm/boot/dts/sun4i-a10-cubieboard.dts > +++ b/arch/arm/boot/dts/sun4i-a10-cubieboard.dts > @@ -80,6 +80,75 @@ > pinctrl-names = "default"; > pinctrl-0 = <&i2c0_pins_a>; > status = "okay"; > + #address-cells = <1>; > + #size-cells = <0>; > + > + axp209: pmic@34 { > + compatible = "x-powers,axp209"; > + reg = <0x34>; > + interrupts = <0>; > + > + interrupt-controller; > + #interrupt-cells = <1>; > + > + acin-supply = <&axp_ipsout_reg>; > + vin2-supply = <&axp_ipsout_reg>; > + vin3-supply = <&axp_ipsout_reg>; > + ldo24in-supply = <&axp_ipsout_reg>; > + ldo3in-supply = <&axp_ipsout_reg>; > + ldo5in-supply = <&axp_ipsout_reg>; > + > + regulators { > + compatible = "x-powers,axp20x-reg"; > + > + x-powers,dcdc-freq = <1500>; > + > + axp_ipsout_reg: axp_ipsout { > + compatible = "regulator-fixed"; > + regulator-name = "axp-ipsout"; > + regulator-min-microvolt = <5000000>; > + regulator-max-microvolt = <5000000>; > + regulator-always-on; > + }; > + > + axp_vcore_reg: dcdc2 { > + regulator-min-microvolt = <700000>; > + regulator-max-microvolt = <2275000>; > + regulator-always-on; > + }; > + > + axp_ddr_reg: dcdc3 { > + regulator-min-microvolt = <700000>; > + regulator-max-microvolt = <3500000>; > + regulator-always-on; > + }; > + > + axp_rtc_reg: ldo1 { > + regulator-always-on; > + }; > + > + axp_analog_reg: ldo2 { > + regulator-min-microvolt = <1800000>; > + regulator-max-microvolt = <3300000>; > + regulator-always-on; > + }; > + > + axp_pll_reg: ldo3 { > + regulator-min-microvolt = <700000>; > + regulator-max-microvolt = <3500000>; > + }; > + > + axp_hdmi_reg: ldo4 { > + regulator-min-microvolt = <1250000>; > + regulator-max-microvolt = <3300000>; > + }; > + > + axp_mic_reg: ldo5 { > + regulator-min-microvolt = <1800000>; > + regulator-max-microvolt = <3300000>; > + }; > + }; > + }; > }; > > i2c1: i2c@01c2b000 { > diff --git a/arch/arm/boot/dts/sun4i-a10-hackberry.dts b/arch/arm/boot/dts/sun4i-a10-hackberry.dts > index d7c17e4..8f2db9c 100644 > --- a/arch/arm/boot/dts/sun4i-a10-hackberry.dts > +++ b/arch/arm/boot/dts/sun4i-a10-hackberry.dts > @@ -82,6 +82,81 @@ > pinctrl-0 = <&uart0_pins_a>; > status = "okay"; > }; > + > + i2c0: i2c@01c2ac00 { > + pinctrl-names = "default"; > + pinctrl-0 = <&i2c0_pins_a>; > + status = "okay"; That should be in a separate patch. These comments apply to most of the changes here. Make sure you edit all of them. Thanks! Maxime
On Mon, Apr 14, 2014 at 11:52 AM, Maxime Ripard <maxime.ripard@free-electrons.com> wrote: > Hi Carlo, Hi Maxime, > On Fri, Apr 11, 2014 at 11:38:11AM +0200, Carlo Caione wrote: >> Signed-off-by: Hans de Goede <hdegoede@redhat.com> >> Signed-off-by: Carlo Caione <carlo@caione.org> >> --- >> >> In all the DTs the min and max microvolt allowed for each regulator are actually >> the min and max voltage possible for the regulator itself. This is not safe but >> we do not have the ranges allowed for each board and the original Allwinner >> driver does exactly this way. >> >> AXP20x has the so called Power Path Management (IPS) that can select the proper >> power supply according to the status of the external power and the Li-battery >> status. The output of the IPS block is usually a 5V fixed voltage used as >> input supply for all the other regulators. This fixed voltage is represented >> in the DT as a fixed voltage regulator in the "regulator" subnode. >> >> arch/arm/boot/dts/sun4i-a10-a1000.dts | 69 +++++++++++++++++++++++ >> arch/arm/boot/dts/sun4i-a10-cubieboard.dts | 69 +++++++++++++++++++++++ >> arch/arm/boot/dts/sun4i-a10-hackberry.dts | 75 +++++++++++++++++++++++++ >> arch/arm/boot/dts/sun4i-a10-inet97fv2.dts | 69 +++++++++++++++++++++++ >> arch/arm/boot/dts/sun4i-a10-mini-xplus.dts | 75 +++++++++++++++++++++++++ >> arch/arm/boot/dts/sun4i-a10-olinuxino-lime.dts | 75 +++++++++++++++++++++++++ >> arch/arm/boot/dts/sun4i-a10-pcduino.dts | 69 +++++++++++++++++++++++ >> arch/arm/boot/dts/sun7i-a20-cubieboard2.dts | 70 +++++++++++++++++++++++ >> arch/arm/boot/dts/sun7i-a20-cubietruck.dts | 70 +++++++++++++++++++++++ >> arch/arm/boot/dts/sun7i-a20-olinuxino-micro.dts | 70 +++++++++++++++++++++++ > > That looks like a lot of them. Did you test all of them? > Are all those regulators you define used on all these boards? I tested it only on cubieboard2, all the other boards are contributed by Hans. I'll double check with Hans. >> 10 files changed, 711 insertions(+) >> >> diff --git a/arch/arm/boot/dts/sun4i-a10-a1000.dts b/arch/arm/boot/dts/sun4i-a10-a1000.dts >> index fa746aea..029a880 100644 >> --- a/arch/arm/boot/dts/sun4i-a10-a1000.dts >> +++ b/arch/arm/boot/dts/sun4i-a10-a1000.dts >> @@ -88,6 +88,75 @@ >> pinctrl-names = "default"; >> pinctrl-0 = <&i2c0_pins_a>; >> status = "okay"; >> + #address-cells = <1>; >> + #size-cells = <0>; > > That should be in the DTSI. Agree. >> + axp209: pmic@34 { >> + compatible = "x-powers,axp209"; >> + reg = <0x34>; >> + interrupts = <0>; >> + >> + interrupt-controller; >> + #interrupt-cells = <1>; >> + >> + acin-supply = <&axp_ipsout_reg>; >> + vin2-supply = <&axp_ipsout_reg>; >> + vin3-supply = <&axp_ipsout_reg>; >> + ldo24in-supply = <&axp_ipsout_reg>; >> + ldo3in-supply = <&axp_ipsout_reg>; >> + ldo5in-supply = <&axp_ipsout_reg>; >> + >> + regulators { >> + compatible = "x-powers,axp20x-reg"; > > I told you a few times already, but don't introduce pattern-matching > compatibles. Probably that compatible will be deleted in the next version using regulator_bulk_register_supply_alias() as suggested by Mark. >> + >> + x-powers,dcdc-freq = <1500>; >> + >> + axp_ipsout_reg: axp_ipsout { >> + compatible = "regulator-fixed"; >> + regulator-name = "axp-ipsout"; >> + regulator-min-microvolt = <5000000>; >> + regulator-max-microvolt = <5000000>; >> + regulator-always-on; >> + }; >> + >> + axp_vcore_reg: dcdc2 { >> + regulator-min-microvolt = <700000>; >> + regulator-max-microvolt = <2275000>; >> + regulator-always-on; >> + }; >> + >> + axp_ddr_reg: dcdc3 { >> + regulator-min-microvolt = <700000>; >> + regulator-max-microvolt = <3500000>; >> + regulator-always-on; >> + }; >> + >> + axp_rtc_reg: ldo1 { >> + regulator-always-on; >> + }; >> + >> + axp_analog_reg: ldo2 { >> + regulator-min-microvolt = <1800000>; >> + regulator-max-microvolt = <3300000>; >> + regulator-always-on; >> + }; >> + >> + axp_pll_reg: ldo3 { >> + regulator-min-microvolt = <700000>; >> + regulator-max-microvolt = <3500000>; >> + }; >> + >> + axp_hdmi_reg: ldo4 { >> + regulator-min-microvolt = <1250000>; >> + regulator-max-microvolt = <3300000>; >> + }; >> + >> + axp_mic_reg: ldo5 { >> + regulator-min-microvolt = <1800000>; >> + regulator-max-microvolt = <3300000>; >> + }; >> + }; >> + }; >> }; >> }; >> >> diff --git a/arch/arm/boot/dts/sun4i-a10-cubieboard.dts b/arch/arm/boot/dts/sun4i-a10-cubieboard.dts >> index 4684cbe..635fd4b 100644 >> --- a/arch/arm/boot/dts/sun4i-a10-cubieboard.dts >> +++ b/arch/arm/boot/dts/sun4i-a10-cubieboard.dts >> @@ -80,6 +80,75 @@ >> pinctrl-names = "default"; >> pinctrl-0 = <&i2c0_pins_a>; >> status = "okay"; >> + #address-cells = <1>; >> + #size-cells = <0>; >> + >> + axp209: pmic@34 { >> + compatible = "x-powers,axp209"; >> + reg = <0x34>; >> + interrupts = <0>; >> + >> + interrupt-controller; >> + #interrupt-cells = <1>; >> + >> + acin-supply = <&axp_ipsout_reg>; >> + vin2-supply = <&axp_ipsout_reg>; >> + vin3-supply = <&axp_ipsout_reg>; >> + ldo24in-supply = <&axp_ipsout_reg>; >> + ldo3in-supply = <&axp_ipsout_reg>; >> + ldo5in-supply = <&axp_ipsout_reg>; >> + >> + regulators { >> + compatible = "x-powers,axp20x-reg"; >> + >> + x-powers,dcdc-freq = <1500>; >> + >> + axp_ipsout_reg: axp_ipsout { >> + compatible = "regulator-fixed"; >> + regulator-name = "axp-ipsout"; >> + regulator-min-microvolt = <5000000>; >> + regulator-max-microvolt = <5000000>; >> + regulator-always-on; >> + }; >> + >> + axp_vcore_reg: dcdc2 { >> + regulator-min-microvolt = <700000>; >> + regulator-max-microvolt = <2275000>; >> + regulator-always-on; >> + }; >> + >> + axp_ddr_reg: dcdc3 { >> + regulator-min-microvolt = <700000>; >> + regulator-max-microvolt = <3500000>; >> + regulator-always-on; >> + }; >> + >> + axp_rtc_reg: ldo1 { >> + regulator-always-on; >> + }; >> + >> + axp_analog_reg: ldo2 { >> + regulator-min-microvolt = <1800000>; >> + regulator-max-microvolt = <3300000>; >> + regulator-always-on; >> + }; >> + >> + axp_pll_reg: ldo3 { >> + regulator-min-microvolt = <700000>; >> + regulator-max-microvolt = <3500000>; >> + }; >> + >> + axp_hdmi_reg: ldo4 { >> + regulator-min-microvolt = <1250000>; >> + regulator-max-microvolt = <3300000>; >> + }; >> + >> + axp_mic_reg: ldo5 { >> + regulator-min-microvolt = <1800000>; >> + regulator-max-microvolt = <3300000>; >> + }; >> + }; >> + }; >> }; >> >> i2c1: i2c@01c2b000 { >> diff --git a/arch/arm/boot/dts/sun4i-a10-hackberry.dts b/arch/arm/boot/dts/sun4i-a10-hackberry.dts >> index d7c17e4..8f2db9c 100644 >> --- a/arch/arm/boot/dts/sun4i-a10-hackberry.dts >> +++ b/arch/arm/boot/dts/sun4i-a10-hackberry.dts >> @@ -82,6 +82,81 @@ >> pinctrl-0 = <&uart0_pins_a>; >> status = "okay"; >> }; >> + >> + i2c0: i2c@01c2ac00 { >> + pinctrl-names = "default"; >> + pinctrl-0 = <&i2c0_pins_a>; >> + status = "okay"; > > That should be in a separate patch. > > These comments apply to most of the changes here. Make sure you edit > all of them. Ok. Thanks.
Hi, On 04/14/2014 12:02 PM, Carlo Caione wrote: > On Mon, Apr 14, 2014 at 11:52 AM, Maxime Ripard > <maxime.ripard@free-electrons.com> wrote: >> Hi Carlo, > > Hi Maxime, > >> On Fri, Apr 11, 2014 at 11:38:11AM +0200, Carlo Caione wrote: >>> Signed-off-by: Hans de Goede <hdegoede@redhat.com> >>> Signed-off-by: Carlo Caione <carlo@caione.org> >>> --- >>> >>> In all the DTs the min and max microvolt allowed for each regulator are actually >>> the min and max voltage possible for the regulator itself. This is not safe but >>> we do not have the ranges allowed for each board and the original Allwinner >>> driver does exactly this way. >>> >>> AXP20x has the so called Power Path Management (IPS) that can select the proper >>> power supply according to the status of the external power and the Li-battery >>> status. The output of the IPS block is usually a 5V fixed voltage used as >>> input supply for all the other regulators. This fixed voltage is represented >>> in the DT as a fixed voltage regulator in the "regulator" subnode. >>> >>> arch/arm/boot/dts/sun4i-a10-a1000.dts | 69 +++++++++++++++++++++++ >>> arch/arm/boot/dts/sun4i-a10-cubieboard.dts | 69 +++++++++++++++++++++++ >>> arch/arm/boot/dts/sun4i-a10-hackberry.dts | 75 +++++++++++++++++++++++++ >>> arch/arm/boot/dts/sun4i-a10-inet97fv2.dts | 69 +++++++++++++++++++++++ >>> arch/arm/boot/dts/sun4i-a10-mini-xplus.dts | 75 +++++++++++++++++++++++++ >>> arch/arm/boot/dts/sun4i-a10-olinuxino-lime.dts | 75 +++++++++++++++++++++++++ >>> arch/arm/boot/dts/sun4i-a10-pcduino.dts | 69 +++++++++++++++++++++++ >>> arch/arm/boot/dts/sun7i-a20-cubieboard2.dts | 70 +++++++++++++++++++++++ >>> arch/arm/boot/dts/sun7i-a20-cubietruck.dts | 70 +++++++++++++++++++++++ >>> arch/arm/boot/dts/sun7i-a20-olinuxino-micro.dts | 70 +++++++++++++++++++++++ >> >> That looks like a lot of them. Did you test all of them? >> Are all those regulators you define used on all these boards? > > I tested it only on cubieboard2, all the other boards are contributed by Hans. > I'll double check with Hans. Well my contribution stems from the time when we still had a dtsi for the regulators, if were going to do them per board, then we should be more precise IMHO. As Mark has also mentioned we should probably pin the regulators to a certain voltage, except for those which we expect to be controlled by a driver, so basically all of them should be pinned to a certain voltage except for DCDC2 which gets used for the cpu voltage which we will want to scale as soon as we've a cpufreq driver. While testing the latest revision of your code I also noticed that the kernel ends up disabling LDO3 and LDO4, which could be fine on some boards and a problem on other boards. I think we need to be careful here. For now it may be best to only add the DCDC2 regulator to the dts, as we know that dcdc2 is used for the cpu voltage everywhere, and we will actually want to control that later on. For the others, for the boards where we've schematics (*) it would be good to add the other regulators with fixed voltages as specified in the schematics. For the rest it may be best to simply leave the regulators alone / at their default settings. > >>> 10 files changed, 711 insertions(+) >>> >>> diff --git a/arch/arm/boot/dts/sun4i-a10-a1000.dts b/arch/arm/boot/dts/sun4i-a10-a1000.dts >>> index fa746aea..029a880 100644 >>> --- a/arch/arm/boot/dts/sun4i-a10-a1000.dts >>> +++ b/arch/arm/boot/dts/sun4i-a10-a1000.dts >>> @@ -88,6 +88,75 @@ >>> pinctrl-names = "default"; >>> pinctrl-0 = <&i2c0_pins_a>; >>> status = "okay"; >>> + #address-cells = <1>; >>> + #size-cells = <0>; >> >> That should be in the DTSI. > > Agree. Note I've just send a patch-series for that and Maxime has added that series to his sunxi/dt-for-3.16 branch. <snip> Regards, Hans
On Mon, Apr 14, 2014 at 12:20:32PM +0200, Hans de Goede wrote: Please fix your mailer to word wrap at less than 80 columns. > As Mark has also mentioned we should probably pin the regulators to a > certain voltage, except for those which we expect to be controlled by > a driver, so basically all of them should be pinned to a certain > voltage except for DCDC2 which gets used for the cpu voltage which we > will want to scale as soon as we've a cpufreq driver. If you don't know what to do with the regulators and don't have any information on what's safe then you shouldn't be specifying a voltage at all. > While testing the latest revision of your code I also noticed that the > kernel ends up disabling LDO3 and LDO4, which could be fine on some > boards and a problem on other boards. > I think we need to be careful here. For now it may be best to only add > the DCDC2 regulator to the dts, as we know that dcdc2 is used for the > cpu voltage everywhere, and we will actually want to control that > later on. You need to at least specify that regulators that need to be kept on are always-on. > For the others, for the boards where we've schematics (*) it would be > good to add the other regulators with fixed voltages as specified in > the schematics. For the rest it may be best to simply leave the > regulators alone / at their default settings. If everyone has been running the board at a voltage different to that in the schematic then I'd not assume that everything has been validated at the voltage in the schematic, if production firmware is available that's going to be a more reliable guide than the schematic but it sounds like all these boards have just been left to run at their default voltages.
On Fri, Apr 11, 2014 at 6:18 PM, Mark Brown <broonie@kernel.org> wrote: > On Fri, Apr 11, 2014 at 03:04:32PM +0200, Carlo Caione wrote: >> On Fri, Apr 11, 2014 at 2:29 PM, Mark Brown <broonie@kernel.org> wrote: > >> >> + regulators { >> >> + compatible = "x-powers,axp20x-reg"; > >> > This compatible isn't part of the driver. > >> Yes I know. The problem here is that in v4 I had to fill in the field >> .of_compatible of the mfd_cell with "x-powers,axp20x-reg". This >> because the regulator_dev_lookup() checks for dev->of_node when >> looking for the supply so I needed the compatible string in the DT to >> have the dev->of_node filled in by mfd_add_device(). >> What do you suggest? Modify the regulator driver? > > You're looking for regulator_bulk_register_supply_alias() in the MFD > driver (via parent_supplies in the MFD cell probably). Hi Mark, I'm fighting with a small issue when using the regulator_bulk_register_supply_alias(). Problem is that when using the .parent_supplies entry in the MFD driver, I hit the WARN_ON(!list_empty(&dev->devres_head)); in linux/drivers/base/dd.c#L272, but, apart from the warning, everything seems to work correctly. A possible explanation I gave myself is that in the mfd_add_device() we try to use the devm_* API when the regulator device is not bound to the driver yet (I found some information here http://lists.infradead.org/pipermail/linux-arm-kernel/2012-June/104442.html). Is this the case? Thanks,
On Thu, Apr 17, 2014 at 12:06:34PM +0200, Carlo Caione wrote: > I'm fighting with a small issue when using the > regulator_bulk_register_supply_alias(). Problem is that when using the > .parent_supplies entry in the MFD driver, I hit the > > WARN_ON(!list_empty(&dev->devres_head)); > > in linux/drivers/base/dd.c#L272, but, apart from the warning, > everything seems to work correctly. > A possible explanation I gave myself is that in the mfd_add_device() > we try to use the devm_* API when the regulator device is not bound to > the driver yet (I found some information here > http://lists.infradead.org/pipermail/linux-arm-kernel/2012-June/104442.html). > Is this the case? Without knowing more about the case you're hitting it's hard to say - I do run a board which exercises the API for a MFD (with the arizona drivers) regularly and haven't noticed an issue so there must be something different about what you're trying to do.
On Fri, Apr 18, 2014 at 04:15:51PM +0100, Mark Brown wrote: > On Thu, Apr 17, 2014 at 12:06:34PM +0200, Carlo Caione wrote: > > > I'm fighting with a small issue when using the > > regulator_bulk_register_supply_alias(). Problem is that when using the > > .parent_supplies entry in the MFD driver, I hit the > > > > WARN_ON(!list_empty(&dev->devres_head)); > > > > in linux/drivers/base/dd.c#L272, but, apart from the warning, > > everything seems to work correctly. > > A possible explanation I gave myself is that in the mfd_add_device() > > we try to use the devm_* API when the regulator device is not bound to > > the driver yet (I found some information here > > http://lists.infradead.org/pipermail/linux-arm-kernel/2012-June/104442.html). > > Is this the case? > > Without knowing more about the case you're hitting it's hard to say - I > do run a board which exercises the API for a MFD (with the arizona > drivers) regularly and haven't noticed an issue so there must be > something different about what you're trying to do. I'm having a really hard time with this problem, so any hint is welcome :) The small modification I'm using on top of the patches in this series is here: http://bpaste.net/show/228330/ Unfortunately as I said I got this when booting: http://bpaste.net/show/nUhUTzELT32v9HNPathL/ Thanks, -- Carlo Caione
On Wed, Apr 23, 2014 at 10:25:46PM +0200, Carlo Caione wrote: > I'm having a really hard time with this problem, so any hint is welcome > :) The small modification I'm using on top of the patches in this series > is here: http://bpaste.net/show/228330/ > Unfortunately as I said I got this when booting: > http://bpaste.net/show/nUhUTzELT32v9HNPathL/ Huh, actually the arizona drivers do show this (it was being masked in my logs by another unrelated bug). I guess the Wolfson guys aren't working with upstream much (though Charles did write the orignal code here...). The issue is the MFD core, it shouldn't be using managed allocations here - the error reported by the assert is entirely correct. If the CODEC driver is bound and unbound it'll not be possible to reload it as things stand. Your driver is correct but the implementation needs to be fixed - possibly with an API change on free since at the minute the cells to be freed don't get passed back into the MFD core when deallocating.
On Thu, Apr 24, 2014 at 02:30:36PM +0100, Mark Brown wrote: > On Wed, Apr 23, 2014 at 10:25:46PM +0200, Carlo Caione wrote: > > > I'm having a really hard time with this problem, so any hint is welcome > > :) The small modification I'm using on top of the patches in this series > > is here: http://bpaste.net/show/228330/ > > > Unfortunately as I said I got this when booting: > > http://bpaste.net/show/nUhUTzELT32v9HNPathL/ > > Huh, actually the arizona drivers do show this (it was being masked in > my logs by another unrelated bug). I guess the Wolfson guys aren't > working with upstream much (though Charles did write the orignal code > here...). I run upstream fairly regularly here (although mostly on Arndale rather than Speyside). On closer inspection of my kernel log don't seem to have anything related to it, which is odd. > The issue is the MFD core, it shouldn't be using managed allocations > here - the error reported by the assert is entirely correct. If the > CODEC driver is bound and unbound it'll not be possible to reload it > as things stand. > > Your driver is correct but the implementation needs to be fixed - > possibly with an API change on free since at the minute the cells to be > freed don't get passed back into the MFD core when deallocating. This does indeed look broken, I will have a look and think about it. Unfortunately I am travelling most of next week, so if I don't manage to get something out over the weekend there may be a slight delay on me getting a fix out. Thanks, Charles
On Thu, Apr 24, 2014 at 05:35:23PM +0100, Charles Keepax wrote: > On Thu, Apr 24, 2014 at 02:30:36PM +0100, Mark Brown wrote: > > On Wed, Apr 23, 2014 at 10:25:46PM +0200, Carlo Caione wrote: > > > > > I'm having a really hard time with this problem, so any hint is welcome > > > :) The small modification I'm using on top of the patches in this series > > > is here: http://bpaste.net/show/228330/ > > > > > Unfortunately as I said I got this when booting: > > > http://bpaste.net/show/nUhUTzELT32v9HNPathL/ > > > > Huh, actually the arizona drivers do show this (it was being masked in > > my logs by another unrelated bug). I guess the Wolfson guys aren't > > working with upstream much (though Charles did write the orignal code > > here...). > > I run upstream fairly regularly here (although mostly on Arndale > rather than Speyside). On closer inspection of my kernel log > don't seem to have anything related to it, which is odd. Ah ok seems I am getting an error but for some reason for me it shows up looking very unrelated to the supply mapping. In that it shows up much later in the log and doesn't seem to mention the MFD at all: [ 2.938985] ------------[ cut here ]------------ [ 2.942216] WARNING: CPU: 0 PID: 1 at drivers/base/dd.c:272 driver_probe_device+0x127/0x184() [ 2.950680] Modules linked in: [ 2.953677] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 3.15.0-rc2+ #636 [ 2.960246] [<80011ab9>] (unwind_backtrace) from [<8000f461>] (show_stack+0x11/0x14) [ 2.967972] [<8000f461>] (show_stack) from [<804c3bab>] (dump_stack+0x53/0x68) [ 2.975171] [<804c3bab>] (dump_stack) from [<8001bc55>] (warn_slowpath_common+0x51/0x70) [ 2.983239] [<8001bc55>] (warn_slowpath_common) from [<8001bc8b>] (warn_slowpath_null+0x17/0x1c) [ 2.992009] [<8001bc8b>] (warn_slowpath_null) from [<802c040f>] (driver_probe_device+0x127/0x184) [ 3.000864] [<802c040f>] (driver_probe_device) from [<802c04bd>] (__driver_attach+0x51/0x54) [ 3.009278] [<802c04bd>] (__driver_attach) from [<802bf2fd>] (bus_for_each_dev+0x2d/0x4c) [ 3.017437] [<802bf2fd>] (bus_for_each_dev) from [<802bfde7>] (bus_add_driver+0x8f/0x130) [ 3.025603] [<802bfde7>] (bus_add_driver) from [<802c08b7>] (driver_register+0x3b/0x88) [ 3.033540] [<802c08b7>] (driver_register) from [<800087df>] (do_one_initcall+0xa7/0xe8) [ 3.041618] [<800087df>] (do_one_initcall) from [<8097d9e7>] (kernel_init_freeable+0xb7/0x14c) [ 3.050219] [<8097d9e7>] (kernel_init_freeable) from [<804bec2b>] (kernel_init+0xf/0xa4) [ 3.058286] [<804bec2b>] (kernel_init) from [<8000cebd>] (ret_from_fork+0x11/0x20) [ 3.065835] ---[ end trace f838bbad8b4018a1 ]--- The fix looks pretty trivial though, hopefully get it out tonight/tomorrow morning. Thanks, Charles
On Thu, Apr 24, 2014 at 05:58:47PM +0100, Charles Keepax wrote: > Ah ok seems I am getting an error but for some reason for me it > shows up looking very unrelated to the supply mapping. In that it > shows up much later in the log and doesn't seem to mention the > MFD at all: If you look at the warning you'll see that it's complaining that it's trying to probe a device which has devres stuff attached to it which is happens at the time the function driver gets loaded.
diff --git a/arch/arm/boot/dts/sun4i-a10-a1000.dts b/arch/arm/boot/dts/sun4i-a10-a1000.dts index fa746aea..029a880 100644 --- a/arch/arm/boot/dts/sun4i-a10-a1000.dts +++ b/arch/arm/boot/dts/sun4i-a10-a1000.dts @@ -88,6 +88,75 @@ pinctrl-names = "default"; pinctrl-0 = <&i2c0_pins_a>; status = "okay"; + #address-cells = <1>; + #size-cells = <0>; + + axp209: pmic@34 { + compatible = "x-powers,axp209"; + reg = <0x34>; + interrupts = <0>; + + interrupt-controller; + #interrupt-cells = <1>; + + acin-supply = <&axp_ipsout_reg>; + vin2-supply = <&axp_ipsout_reg>; + vin3-supply = <&axp_ipsout_reg>; + ldo24in-supply = <&axp_ipsout_reg>; + ldo3in-supply = <&axp_ipsout_reg>; + ldo5in-supply = <&axp_ipsout_reg>; + + regulators { + compatible = "x-powers,axp20x-reg"; + + x-powers,dcdc-freq = <1500>; + + axp_ipsout_reg: axp_ipsout { + compatible = "regulator-fixed"; + regulator-name = "axp-ipsout"; + regulator-min-microvolt = <5000000>; + regulator-max-microvolt = <5000000>; + regulator-always-on; + }; + + axp_vcore_reg: dcdc2 { + regulator-min-microvolt = <700000>; + regulator-max-microvolt = <2275000>; + regulator-always-on; + }; + + axp_ddr_reg: dcdc3 { + regulator-min-microvolt = <700000>; + regulator-max-microvolt = <3500000>; + regulator-always-on; + }; + + axp_rtc_reg: ldo1 { + regulator-always-on; + }; + + axp_analog_reg: ldo2 { + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <3300000>; + regulator-always-on; + }; + + axp_pll_reg: ldo3 { + regulator-min-microvolt = <700000>; + regulator-max-microvolt = <3500000>; + }; + + axp_hdmi_reg: ldo4 { + regulator-min-microvolt = <1250000>; + regulator-max-microvolt = <3300000>; + }; + + axp_mic_reg: ldo5 { + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <3300000>; + }; + }; + }; }; }; diff --git a/arch/arm/boot/dts/sun4i-a10-cubieboard.dts b/arch/arm/boot/dts/sun4i-a10-cubieboard.dts index 4684cbe..635fd4b 100644 --- a/arch/arm/boot/dts/sun4i-a10-cubieboard.dts +++ b/arch/arm/boot/dts/sun4i-a10-cubieboard.dts @@ -80,6 +80,75 @@ pinctrl-names = "default"; pinctrl-0 = <&i2c0_pins_a>; status = "okay"; + #address-cells = <1>; + #size-cells = <0>; + + axp209: pmic@34 { + compatible = "x-powers,axp209"; + reg = <0x34>; + interrupts = <0>; + + interrupt-controller; + #interrupt-cells = <1>; + + acin-supply = <&axp_ipsout_reg>; + vin2-supply = <&axp_ipsout_reg>; + vin3-supply = <&axp_ipsout_reg>; + ldo24in-supply = <&axp_ipsout_reg>; + ldo3in-supply = <&axp_ipsout_reg>; + ldo5in-supply = <&axp_ipsout_reg>; + + regulators { + compatible = "x-powers,axp20x-reg"; + + x-powers,dcdc-freq = <1500>; + + axp_ipsout_reg: axp_ipsout { + compatible = "regulator-fixed"; + regulator-name = "axp-ipsout"; + regulator-min-microvolt = <5000000>; + regulator-max-microvolt = <5000000>; + regulator-always-on; + }; + + axp_vcore_reg: dcdc2 { + regulator-min-microvolt = <700000>; + regulator-max-microvolt = <2275000>; + regulator-always-on; + }; + + axp_ddr_reg: dcdc3 { + regulator-min-microvolt = <700000>; + regulator-max-microvolt = <3500000>; + regulator-always-on; + }; + + axp_rtc_reg: ldo1 { + regulator-always-on; + }; + + axp_analog_reg: ldo2 { + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <3300000>; + regulator-always-on; + }; + + axp_pll_reg: ldo3 { + regulator-min-microvolt = <700000>; + regulator-max-microvolt = <3500000>; + }; + + axp_hdmi_reg: ldo4 { + regulator-min-microvolt = <1250000>; + regulator-max-microvolt = <3300000>; + }; + + axp_mic_reg: ldo5 { + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <3300000>; + }; + }; + }; }; i2c1: i2c@01c2b000 { diff --git a/arch/arm/boot/dts/sun4i-a10-hackberry.dts b/arch/arm/boot/dts/sun4i-a10-hackberry.dts index d7c17e4..8f2db9c 100644 --- a/arch/arm/boot/dts/sun4i-a10-hackberry.dts +++ b/arch/arm/boot/dts/sun4i-a10-hackberry.dts @@ -82,6 +82,81 @@ pinctrl-0 = <&uart0_pins_a>; status = "okay"; }; + + i2c0: i2c@01c2ac00 { + pinctrl-names = "default"; + pinctrl-0 = <&i2c0_pins_a>; + status = "okay"; + #address-cells = <1>; + #size-cells = <0>; + + axp209: pmic@34 { + compatible = "x-powers,axp209"; + reg = <0x34>; + interrupts = <0>; + + interrupt-controller; + #interrupt-cells = <1>; + + acin-supply = <&axp_ipsout_reg>; + vin2-supply = <&axp_ipsout_reg>; + vin3-supply = <&axp_ipsout_reg>; + ldo24in-supply = <&axp_ipsout_reg>; + ldo3in-supply = <&axp_ipsout_reg>; + ldo5in-supply = <&axp_ipsout_reg>; + + regulators { + compatible = "x-powers,axp20x-reg"; + + x-powers,dcdc-freq = <1500>; + + axp_ipsout_reg: axp_ipsout { + compatible = "regulator-fixed"; + regulator-name = "axp-ipsout"; + regulator-min-microvolt = <5000000>; + regulator-max-microvolt = <5000000>; + regulator-always-on; + }; + + axp_vcore_reg: dcdc2 { + regulator-min-microvolt = <700000>; + regulator-max-microvolt = <2275000>; + regulator-always-on; + }; + + axp_ddr_reg: dcdc3 { + regulator-min-microvolt = <700000>; + regulator-max-microvolt = <3500000>; + regulator-always-on; + }; + + axp_rtc_reg: ldo1 { + regulator-always-on; + }; + + axp_analog_reg: ldo2 { + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <3300000>; + regulator-always-on; + }; + + axp_pll_reg: ldo3 { + regulator-min-microvolt = <700000>; + regulator-max-microvolt = <3500000>; + }; + + axp_hdmi_reg: ldo4 { + regulator-min-microvolt = <1250000>; + regulator-max-microvolt = <3300000>; + }; + + axp_mic_reg: ldo5 { + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <3300000>; + }; + }; + }; + }; }; reg_emac_3v3: emac-3v3 { diff --git a/arch/arm/boot/dts/sun4i-a10-inet97fv2.dts b/arch/arm/boot/dts/sun4i-a10-inet97fv2.dts index fe9272e..c1d6fdb 100644 --- a/arch/arm/boot/dts/sun4i-a10-inet97fv2.dts +++ b/arch/arm/boot/dts/sun4i-a10-inet97fv2.dts @@ -34,6 +34,75 @@ pinctrl-names = "default"; pinctrl-0 = <&i2c0_pins_a>; status = "okay"; + #address-cells = <1>; + #size-cells = <0>; + + axp209: pmic@34 { + compatible = "x-powers,axp209"; + reg = <0x34>; + interrupts = <0>; + + interrupt-controller; + #interrupt-cells = <1>; + + acin-supply = <&axp_ipsout_reg>; + vin2-supply = <&axp_ipsout_reg>; + vin3-supply = <&axp_ipsout_reg>; + ldo24in-supply = <&axp_ipsout_reg>; + ldo3in-supply = <&axp_ipsout_reg>; + ldo5in-supply = <&axp_ipsout_reg>; + + regulators { + compatible = "x-powers,axp20x-reg"; + + x-powers,dcdc-freq = <1500>; + + axp_ipsout_reg: axp_ipsout { + compatible = "regulator-fixed"; + regulator-name = "axp-ipsout"; + regulator-min-microvolt = <5000000>; + regulator-max-microvolt = <5000000>; + regulator-always-on; + }; + + axp_vcore_reg: dcdc2 { + regulator-min-microvolt = <700000>; + regulator-max-microvolt = <2275000>; + regulator-always-on; + }; + + axp_ddr_reg: dcdc3 { + regulator-min-microvolt = <700000>; + regulator-max-microvolt = <3500000>; + regulator-always-on; + }; + + axp_rtc_reg: ldo1 { + regulator-always-on; + }; + + axp_analog_reg: ldo2 { + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <3300000>; + regulator-always-on; + }; + + axp_pll_reg: ldo3 { + regulator-min-microvolt = <700000>; + regulator-max-microvolt = <3500000>; + }; + + axp_hdmi_reg: ldo4 { + regulator-min-microvolt = <1250000>; + regulator-max-microvolt = <3300000>; + }; + + axp_mic_reg: ldo5 { + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <3300000>; + }; + }; + }; }; usbphy: phy@01c13400 { diff --git a/arch/arm/boot/dts/sun4i-a10-mini-xplus.dts b/arch/arm/boot/dts/sun4i-a10-mini-xplus.dts index dd84a9e..e472034 100644 --- a/arch/arm/boot/dts/sun4i-a10-mini-xplus.dts +++ b/arch/arm/boot/dts/sun4i-a10-mini-xplus.dts @@ -47,6 +47,81 @@ pinctrl-0 = <&uart0_pins_a>; status = "okay"; }; + + i2c0: i2c@01c2ac00 { + pinctrl-names = "default"; + pinctrl-0 = <&i2c0_pins_a>; + status = "okay"; + #address-cells = <1>; + #size-cells = <0>; + + axp209: pmic@34 { + compatible = "x-powers,axp209"; + reg = <0x34>; + interrupts = <0>; + + interrupt-controller; + #interrupt-cells = <1>; + + acin-supply = <&axp_ipsout_reg>; + vin2-supply = <&axp_ipsout_reg>; + vin3-supply = <&axp_ipsout_reg>; + ldo24in-supply = <&axp_ipsout_reg>; + ldo3in-supply = <&axp_ipsout_reg>; + ldo5in-supply = <&axp_ipsout_reg>; + + regulators { + compatible = "x-powers,axp20x-reg"; + + x-powers,dcdc-freq = <1500>; + + axp_ipsout_reg: axp_ipsout { + compatible = "regulator-fixed"; + regulator-name = "axp-ipsout"; + regulator-min-microvolt = <5000000>; + regulator-max-microvolt = <5000000>; + regulator-always-on; + }; + + axp_vcore_reg: dcdc2 { + regulator-min-microvolt = <700000>; + regulator-max-microvolt = <2275000>; + regulator-always-on; + }; + + axp_ddr_reg: dcdc3 { + regulator-min-microvolt = <700000>; + regulator-max-microvolt = <3500000>; + regulator-always-on; + }; + + axp_rtc_reg: ldo1 { + regulator-always-on; + }; + + axp_analog_reg: ldo2 { + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <3300000>; + regulator-always-on; + }; + + axp_pll_reg: ldo3 { + regulator-min-microvolt = <700000>; + regulator-max-microvolt = <3500000>; + }; + + axp_hdmi_reg: ldo4 { + regulator-min-microvolt = <1250000>; + regulator-max-microvolt = <3300000>; + }; + + axp_mic_reg: ldo5 { + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <3300000>; + }; + }; + }; + }; }; reg_usb1_vbus: usb1-vbus { diff --git a/arch/arm/boot/dts/sun4i-a10-olinuxino-lime.dts b/arch/arm/boot/dts/sun4i-a10-olinuxino-lime.dts index 66cf0c7..84e6e20 100644 --- a/arch/arm/boot/dts/sun4i-a10-olinuxino-lime.dts +++ b/arch/arm/boot/dts/sun4i-a10-olinuxino-lime.dts @@ -81,6 +81,81 @@ pinctrl-0 = <&uart0_pins_a>; status = "okay"; }; + + i2c0: i2c@01c2ac00 { + pinctrl-names = "default"; + pinctrl-0 = <&i2c0_pins_a>; + status = "okay"; + #address-cells = <1>; + #size-cells = <0>; + + axp209: pmic@34 { + compatible = "x-powers,axp209"; + reg = <0x34>; + interrupts = <0>; + + interrupt-controller; + #interrupt-cells = <1>; + + acin-supply = <&axp_ipsout_reg>; + vin2-supply = <&axp_ipsout_reg>; + vin3-supply = <&axp_ipsout_reg>; + ldo24in-supply = <&axp_ipsout_reg>; + ldo3in-supply = <&axp_ipsout_reg>; + ldo5in-supply = <&axp_ipsout_reg>; + + regulators { + compatible = "x-powers,axp20x-reg"; + + x-powers,dcdc-freq = <1500>; + + axp_ipsout_reg: axp_ipsout { + compatible = "regulator-fixed"; + regulator-name = "axp-ipsout"; + regulator-min-microvolt = <5000000>; + regulator-max-microvolt = <5000000>; + regulator-always-on; + }; + + axp_vcore_reg: dcdc2 { + regulator-min-microvolt = <700000>; + regulator-max-microvolt = <2275000>; + regulator-always-on; + }; + + axp_ddr_reg: dcdc3 { + regulator-min-microvolt = <700000>; + regulator-max-microvolt = <3500000>; + regulator-always-on; + }; + + axp_rtc_reg: ldo1 { + regulator-always-on; + }; + + axp_analog_reg: ldo2 { + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <3300000>; + regulator-always-on; + }; + + axp_pll_reg: ldo3 { + regulator-min-microvolt = <700000>; + regulator-max-microvolt = <3500000>; + }; + + axp_hdmi_reg: ldo4 { + regulator-min-microvolt = <1250000>; + regulator-max-microvolt = <3300000>; + }; + + axp_mic_reg: ldo5 { + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <3300000>; + }; + }; + }; + }; }; leds { diff --git a/arch/arm/boot/dts/sun4i-a10-pcduino.dts b/arch/arm/boot/dts/sun4i-a10-pcduino.dts index 255b47e..42b15d2 100644 --- a/arch/arm/boot/dts/sun4i-a10-pcduino.dts +++ b/arch/arm/boot/dts/sun4i-a10-pcduino.dts @@ -66,6 +66,75 @@ pinctrl-names = "default"; pinctrl-0 = <&i2c0_pins_a>; status = "okay"; + #address-cells = <1>; + #size-cells = <0>; + + axp209: pmic@34 { + compatible = "x-powers,axp209"; + reg = <0x34>; + interrupts = <0>; + + interrupt-controller; + #interrupt-cells = <1>; + + acin-supply = <&axp_ipsout_reg>; + vin2-supply = <&axp_ipsout_reg>; + vin3-supply = <&axp_ipsout_reg>; + ldo24in-supply = <&axp_ipsout_reg>; + ldo3in-supply = <&axp_ipsout_reg>; + ldo5in-supply = <&axp_ipsout_reg>; + + regulators { + compatible = "x-powers,axp20x-reg"; + + x-powers,dcdc-freq = <1500>; + + axp_ipsout_reg: axp_ipsout { + compatible = "regulator-fixed"; + regulator-name = "axp-ipsout"; + regulator-min-microvolt = <5000000>; + regulator-max-microvolt = <5000000>; + regulator-always-on; + }; + + axp_vcore_reg: dcdc2 { + regulator-min-microvolt = <700000>; + regulator-max-microvolt = <2275000>; + regulator-always-on; + }; + + axp_ddr_reg: dcdc3 { + regulator-min-microvolt = <700000>; + regulator-max-microvolt = <3500000>; + regulator-always-on; + }; + + axp_rtc_reg: ldo1 { + regulator-always-on; + }; + + axp_analog_reg: ldo2 { + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <3300000>; + regulator-always-on; + }; + + axp_pll_reg: ldo3 { + regulator-min-microvolt = <700000>; + regulator-max-microvolt = <3500000>; + }; + + axp_hdmi_reg: ldo4 { + regulator-min-microvolt = <1250000>; + regulator-max-microvolt = <3300000>; + }; + + axp_mic_reg: ldo5 { + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <3300000>; + }; + }; + }; }; }; diff --git a/arch/arm/boot/dts/sun7i-a20-cubieboard2.dts b/arch/arm/boot/dts/sun7i-a20-cubieboard2.dts index 68de89f..9f64f56 100644 --- a/arch/arm/boot/dts/sun7i-a20-cubieboard2.dts +++ b/arch/arm/boot/dts/sun7i-a20-cubieboard2.dts @@ -66,6 +66,76 @@ pinctrl-names = "default"; pinctrl-0 = <&i2c0_pins_a>; status = "okay"; + #address-cells = <1>; + #size-cells = <0>; + + axp209: pmic@34 { + compatible = "x-powers,axp209"; + reg = <0x34>; + interrupt-parent = <&nmi_intc>; + interrupts = <0 8>; + + interrupt-controller; + #interrupt-cells = <1>; + + acin-supply = <&axp_ipsout_reg>; + vin2-supply = <&axp_ipsout_reg>; + vin3-supply = <&axp_ipsout_reg>; + ldo24in-supply = <&axp_ipsout_reg>; + ldo3in-supply = <&axp_ipsout_reg>; + ldo5in-supply = <&axp_ipsout_reg>; + + regulators { + compatible = "x-powers,axp20x-reg"; + + x-powers,dcdc-freq = <1500>; + + axp_ipsout_reg: axp_ipsout { + compatible = "regulator-fixed"; + regulator-name = "axp-ipsout"; + regulator-min-microvolt = <5000000>; + regulator-max-microvolt = <5000000>; + regulator-always-on; + }; + + axp_vcore_reg: dcdc2 { + regulator-min-microvolt = <700000>; + regulator-max-microvolt = <2275000>; + regulator-always-on; + }; + + axp_ddr_reg: dcdc3 { + regulator-min-microvolt = <700000>; + regulator-max-microvolt = <3500000>; + regulator-always-on; + }; + + axp_rtc_reg: ldo1 { + regulator-always-on; + }; + + axp_analog_reg: ldo2 { + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <3300000>; + regulator-always-on; + }; + + axp_pll_reg: ldo3 { + regulator-min-microvolt = <700000>; + regulator-max-microvolt = <3500000>; + }; + + axp_hdmi_reg: ldo4 { + regulator-min-microvolt = <1250000>; + regulator-max-microvolt = <3300000>; + }; + + axp_mic_reg: ldo5 { + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <3300000>; + }; + }; + }; }; i2c1: i2c@01c2b000 { diff --git a/arch/arm/boot/dts/sun7i-a20-cubietruck.dts b/arch/arm/boot/dts/sun7i-a20-cubietruck.dts index cb25d3c..c8e6f1b 100644 --- a/arch/arm/boot/dts/sun7i-a20-cubietruck.dts +++ b/arch/arm/boot/dts/sun7i-a20-cubietruck.dts @@ -73,6 +73,76 @@ pinctrl-names = "default"; pinctrl-0 = <&i2c0_pins_a>; status = "okay"; + #address-cells = <1>; + #size-cells = <0>; + + axp209: pmic@34 { + compatible = "x-powers,axp209"; + reg = <0x34>; + interrupt-parent = <&nmi_intc>; + interrupts = <0 8>; + + interrupt-controller; + #interrupt-cells = <1>; + + acin-supply = <&axp_ipsout_reg>; + vin2-supply = <&axp_ipsout_reg>; + vin3-supply = <&axp_ipsout_reg>; + ldo24in-supply = <&axp_ipsout_reg>; + ldo3in-supply = <&axp_ipsout_reg>; + ldo5in-supply = <&axp_ipsout_reg>; + + regulators { + compatible = "x-powers,axp20x-reg"; + + x-powers,dcdc-freq = <1500>; + + axp_ipsout_reg: axp_ipsout { + compatible = "regulator-fixed"; + regulator-name = "axp-ipsout"; + regulator-min-microvolt = <5000000>; + regulator-max-microvolt = <5000000>; + regulator-always-on; + }; + + axp_vcore_reg: dcdc2 { + regulator-min-microvolt = <700000>; + regulator-max-microvolt = <2275000>; + regulator-always-on; + }; + + axp_ddr_reg: dcdc3 { + regulator-min-microvolt = <700000>; + regulator-max-microvolt = <3500000>; + regulator-always-on; + }; + + axp_rtc_reg: ldo1 { + regulator-always-on; + }; + + axp_analog_reg: ldo2 { + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <3300000>; + regulator-always-on; + }; + + axp_pll_reg: ldo3 { + regulator-min-microvolt = <700000>; + regulator-max-microvolt = <3500000>; + }; + + axp_hdmi_reg: ldo4 { + regulator-min-microvolt = <1250000>; + regulator-max-microvolt = <3300000>; + }; + + axp_mic_reg: ldo5 { + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <3300000>; + }; + }; + }; }; i2c1: i2c@01c2b000 { diff --git a/arch/arm/boot/dts/sun7i-a20-olinuxino-micro.dts b/arch/arm/boot/dts/sun7i-a20-olinuxino-micro.dts index eeadf76..6ec7137 100644 --- a/arch/arm/boot/dts/sun7i-a20-olinuxino-micro.dts +++ b/arch/arm/boot/dts/sun7i-a20-olinuxino-micro.dts @@ -95,6 +95,76 @@ pinctrl-names = "default"; pinctrl-0 = <&i2c0_pins_a>; status = "okay"; + #address-cells = <1>; + #size-cells = <0>; + + axp209: pmic@34 { + compatible = "x-powers,axp209"; + reg = <0x34>; + interrupt-parent = <&nmi_intc>; + interrupts = <0 8>; + + interrupt-controller; + #interrupt-cells = <1>; + + acin-supply = <&axp_ipsout_reg>; + vin2-supply = <&axp_ipsout_reg>; + vin3-supply = <&axp_ipsout_reg>; + ldo24in-supply = <&axp_ipsout_reg>; + ldo3in-supply = <&axp_ipsout_reg>; + ldo5in-supply = <&axp_ipsout_reg>; + + regulators { + compatible = "x-powers,axp20x-reg"; + + x-powers,dcdc-freq = <1500>; + + axp_ipsout_reg: axp_ipsout { + compatible = "regulator-fixed"; + regulator-name = "axp-ipsout"; + regulator-min-microvolt = <5000000>; + regulator-max-microvolt = <5000000>; + regulator-always-on; + }; + + axp_vcore_reg: dcdc2 { + regulator-min-microvolt = <700000>; + regulator-max-microvolt = <2275000>; + regulator-always-on; + }; + + axp_ddr_reg: dcdc3 { + regulator-min-microvolt = <700000>; + regulator-max-microvolt = <3500000>; + regulator-always-on; + }; + + axp_rtc_reg: ldo1 { + regulator-always-on; + }; + + axp_analog_reg: ldo2 { + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <3300000>; + regulator-always-on; + }; + + axp_pll_reg: ldo3 { + regulator-min-microvolt = <700000>; + regulator-max-microvolt = <3500000>; + }; + + axp_hdmi_reg: ldo4 { + regulator-min-microvolt = <1250000>; + regulator-max-microvolt = <3300000>; + }; + + axp_mic_reg: ldo5 { + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <3300000>; + }; + }; + }; }; i2c1: i2c@01c2b000 {