diff mbox

[RFC,1/4] mfd: AXP20x: Add power supply bindings documentation

Message ID 20141103210244.1425e0c7@neptune.home (mailing list archive)
State New, archived
Headers show

Commit Message

Bruno Prémont Nov. 3, 2014, 8:02 p.m. UTC
Hi Maxime,

On Tue, 21 October 2014 Maxime Ripard <maxime.ripard@free-electrons.com> wrote:
> On Tue, Oct 21, 2014 at 06:09:16PM +0200, Bruno Prémont wrote:
> > On Tue, 21 October 2014 Lee Jones <lee.jones@linaro.org> wrote:
> > > On Mon, 20 Oct 2014, Bruno Prémont wrote:
> > > > ---
> > > > Note: the OCV values seem to have some defaults build into the
> > > > PMIC though may need adjustment if the used battery has a different
> > > > open circuit voltage curve.
> > > > As far as understood (these values are set in vendor driver but not
> > > > mentioned in chip documentation) they represent charge percentage
> > > > for some predefined voltages.
> > > > 
> > > > If prefixing these values with "x-power," is preferred the following
> > > > patch should becomes a dependency:
> > > >   http://lists.infradead.org/pipermail/linux-arm-kernel/2014-June/267606.html
> > > > and users in patch 2/4, 4/4 need adjusting.
> > > > 
> > > > 
> > > >  Documentation/devicetree/bindings/mfd/axp20x.txt |   20 +
> > > >  1 files changed, 20 insertions(+), 0 deletion(-)
> > > > 
> > > > diff --git a/Documentation/devicetree/bindings/mfd/axp20x.txt b/Documentation/devicetree/bindings/mfd/axp20x.txt
> > > > index cc9e01b..8ea681c 100644
> > > > --- a/Documentation/devicetree/bindings/mfd/axp20x.txt
> > > > +++ b/Documentation/devicetree/bindings/mfd/axp20x.txt
> > > > @@ -28,6 +28,20 @@ Required properties:
> > > >  		      (range: 750-1875). Default: 1.5MHz
> > > >  
> > > >  Optional properties for DCDCs:
> > > > +- backup: Settings for backup/RTC battery charger
> > > > +	  (Voltage in µV, current in µA)
> > > > +	  If not present, charger will be left untouched
> > > > +- battery.ocv: OCV capacity curve points (16 data values)
> > > > +- battery.resistance: internal battery resistance in m?
> > > > +                      (defaults to 100m?)
> > > > +- battery.capacity: Battery capacity in mAh
> > > > +		    If this attribute is missing, charger will be disabled
> > > > +		    unless there is a battery connected.
> > > > +- battery.temp_sensor: Description of temperautre sensor, 3 values
> > > > +		       - driver current (20µA, 40µA, 60µA or 80µA)
> > > > +		       - low temperature warning level (in µV)
> > > > +		       - high temperature warning level (in µV)
> > > > +		       If missing, temperature sensor gets disabled
> > > >  - x-powers,dcdc-workmode: 1 for PWM mode, 0 for AUTO mode
> > > >  			  Default: AUTO mode
> > > >  
> > > > @@ -49,6 +63,12 @@ axp209: pmic@34 {
> > > >  	ldo3in-supply = <&axp_ipsout_reg>;
> > > >  	ldo5in-supply = <&axp_ipsout_reg>;
> > > >  
> > > > +	backup = <3000000 200>;
> > > > +	battery.ocv = <0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0>;
> > > > +	battery.resistance = <0>;
> > > > +	battery.capacity = <2000>;
> > > > +	battery.temp_sensor = <20 1000000 4000000>;
> > > 
> > > Since when do we use '.'s in property names?
> > 
> > I've not found guidelines on this, but whatever is the right way to
> > name them, I'm open for suggestions.
> 
> You can take a look at the ePAPR specs. Even if it's quite outdated,
> it still puts you in the right mindset.

There seems to be some kind of e-mail wall in front of this document.

> That being said, since they are driver-specific properties, they
> should be prefixed by the vendor name (here x-powers).
> 
> And I think they all belong in a sub-node, just like what's been done
> for the regulators.

Doing something like this?:

What are the rules to define the label after the colon?
Looking at the existing nodes it's either some address or a number...


and then the following in driver code (also adjusting the other
property names accessed)?:

@@ -678,11 +677,11 @@ static int axp20x_battery_config(struct platform_device *pdev,
        if (ret)
                return ret;
 
-       np = of_node_get(axp20x->dev->of_node);
+       np = of_find_node_by_name(axp20x->dev->of_node, "battery");
        if (!np)
                return -ENODEV;
 
-       ret = of_property_read_u32_array(np, "battery.ocv", ocv, 16);
+       ret = of_property_read_u32_array(np, "x-powers,ocv", ocv, 16);
        for (i = 0; ret == 0 && i < ARRAY_SIZE(ocv); i++)
                if (ocv[i] > 100) {
                        dev_warn(&pdev->dev, "OCV[%d] %u > 100\n", i, ocv[i]);


Bruno

Comments

Maxime Ripard Nov. 4, 2014, 2:31 p.m. UTC | #1
Hi Bruno,

On Mon, Nov 03, 2014 at 09:02:44PM +0100, Bruno Prémont wrote: 
> Doing something like this?:
> 
> --- a/arch/arm/boot/dts/sun7i-a20-cubietruck.dts
> +++ b/arch/arm/boot/dts/sun7i-a20-cubietruck.dts
> @@ -126,9 +126,11 @@
>                                 interrupt-controller;
>                                 #interrupt-cells = <1>;
>  
> -                               backup = <3000000 200>;
> -                               battery.resistance = <100>;
> -                               battery.capacity = <2000>;
> +                               x-powers,backup = <3000000 200>;

I don't really remember what was that property used for. Would it make
sense to put it into the battery node?

> +                               battery: battery@0 {
> +                                       x-powers,resistance = <100>;
> +                                       x-powers,capacity = <2000>;
> +                               };
>                         };
>                 };
> 
> What are the rules to define the label after the colon?
> Looking at the existing nodes it's either some address or a number...

It's not called the label, but the node name, and it's defined in the
ePAPR.

It's <device-class>[@<address>]

The address being something to identify the node on a bus, so it can
be a chip select number, a memory address, an i2c address,
etc. there's really no absolute answer here.

I don't think you really need one in this case.

> and then the following in driver code (also adjusting the other
> property names accessed)?:
> 
> @@ -678,11 +677,11 @@ static int axp20x_battery_config(struct platform_device *pdev,
>         if (ret)
>                 return ret;
>  
> -       np = of_node_get(axp20x->dev->of_node);
> +       np = of_find_node_by_name(axp20x->dev->of_node, "battery");
>         if (!np)
>                 return -ENODEV;
>  
> -       ret = of_property_read_u32_array(np, "battery.ocv", ocv, 16);
> +       ret = of_property_read_u32_array(np, "x-powers,ocv", ocv, 16);
>         for (i = 0; ret == 0 && i < ARRAY_SIZE(ocv); i++)
>                 if (ocv[i] > 100) {
>                         dev_warn(&pdev->dev, "OCV[%d] %u > 100\n", i, ocv[i]);

Yep, it looks sensible.

Maxime
Bruno Prémont Nov. 4, 2014, 9:08 p.m. UTC | #2
Hi Maxime,

On Tue, 04 November 2014 Maxime Ripard <maxime.ripard@free-electrons.com> wrote:
> On Mon, Nov 03, 2014 at 09:02:44PM +0100, Bruno Prémont wrote: 
> > Doing something like this?:
> > 
> > --- a/arch/arm/boot/dts/sun7i-a20-cubietruck.dts
> > +++ b/arch/arm/boot/dts/sun7i-a20-cubietruck.dts
> > @@ -126,9 +126,11 @@
> >                                 interrupt-controller;
> >                                 #interrupt-cells = <1>;
> >  
> > -                               backup = <3000000 200>;
> > -                               battery.resistance = <100>;
> > -                               battery.capacity = <2000>;
> > +                               x-powers,backup = <3000000 200>;
> 
> I don't really remember what was that property used for. Would it make
> sense to put it into the battery node?

The backup/rtc battery is completely distinct from main battery.

It's presence is in no way related to that of the main battery,
thus I would not put it into the same node.
As all the information needed is included in the property I see
no reason to move it into a separate node.

> > +                               battery: battery@0 {
> > +                                       x-powers,resistance = <100>;
> > +                                       x-powers,capacity = <2000>;
> > +                               };
> >                         };
> >                 };
> > 
> > What are the rules to define the label after the colon?
> > Looking at the existing nodes it's either some address or a number...
> 
> It's not called the label, but the node name, and it's defined in the
> ePAPR.
> 
> It's <device-class>[@<address>]
> 
> The address being something to identify the node on a bus, so it can
> be a chip select number, a memory address, an i2c address,
> etc. there's really no absolute answer here.
> 
> I don't think you really need one in this case.

In that case, I better omit it completely.

> > and then the following in driver code (also adjusting the other
> > property names accessed)?:
> > 
> > @@ -678,11 +677,11 @@ static int axp20x_battery_config(struct platform_device *pdev,
> >         if (ret)
> >                 return ret;
> >  
> > -       np = of_node_get(axp20x->dev->of_node);
> > +       np = of_find_node_by_name(axp20x->dev->of_node, "battery");
> >         if (!np)
> >                 return -ENODEV;
> >  
> > -       ret = of_property_read_u32_array(np, "battery.ocv", ocv, 16);
> > +       ret = of_property_read_u32_array(np, "x-powers,ocv", ocv, 16);
> >         for (i = 0; ret == 0 && i < ARRAY_SIZE(ocv); i++)
> >                 if (ocv[i] > 100) {
> >                         dev_warn(&pdev->dev, "OCV[%d] %u > 100\n", i, ocv[i]);
> 
> Yep, it looks sensible.

Thanks,
Bruno
Bruno Prémont Nov. 4, 2014, 9:21 p.m. UTC | #3
Hi Ezaul,

On Tue, 04 November 2014 Ezaul Zillmer <ezaulzillmer@gmail.com> wrote:
> Cubieboard2  + Kernel 3.18-rc3
> 
> [   15.955655] axp20x-regulator axp20x-regulator: regulators node not found
> [   15.962580] LDO1: 1300 mV
> [   15.965732] LDO2: at 3000 mV
> [   15.969120] LDO3: at 2275 mV
> [   15.972314] LDO4: at 2800 mV
> [   15.975700] LDO5: at 2800 mV
> [   15.979075] DCDC2: at 1400 mV
> [   15.982555] DCDC3: at 1250 mV
> [   15.985706] axp20x 0-0034: AXP20X driver loaded
> 
> What was missing for axp20x work of cubieboard2 dt? 
> as poderiar do to run this drive? 

Not sure what patches, it at all you have on top of 3.18-rc3.
As far as I know 3.18 should not have any AXP driver that's
not already present in 3.17.

The base AXP driver only includes power-off support and bits for
regulators while the DT part of regulators is missing (at least
for cubietruck).

My patches, ideally combined with Carlo's patches from June or so
I mentioned in introduction mail would include power supply and 
input driver for power button. The regulator DT entries are in some
other patch (I think Maxime did have them in some of his trees -
probably defining them causes too much trouble because all uses are
not yet ready to explicitly use them).

On DT side, on top of my patches, for cubieboard2 you might need to
add the backup battery property if it has such a battery - I don't
think the CB2 has a main battery connector but I might be wrong
(I only have a cubietruck).

Except for that a hwmon driver would be useful to cover some of the
last bits of the AXP like temprature sensor and main voltage sensor.
With that about all the features should be covered.

Bruno
Maxime Ripard Nov. 5, 2014, 2:48 p.m. UTC | #4
On Tue, Nov 04, 2014 at 10:08:27PM +0100, Bruno Prémont wrote:
> On Tue, 04 November 2014 Maxime Ripard <maxime.ripard@free-electrons.com> wrote:
> > On Mon, Nov 03, 2014 at 09:02:44PM +0100, Bruno Prémont wrote: 
> > > Doing something like this?:
> > > 
> > > --- a/arch/arm/boot/dts/sun7i-a20-cubietruck.dts
> > > +++ b/arch/arm/boot/dts/sun7i-a20-cubietruck.dts
> > > @@ -126,9 +126,11 @@
> > >                                 interrupt-controller;
> > >                                 #interrupt-cells = <1>;
> > >  
> > > -                               backup = <3000000 200>;
> > > -                               battery.resistance = <100>;
> > > -                               battery.capacity = <2000>;
> > > +                               x-powers,backup = <3000000 200>;
> > 
> > I don't really remember what was that property used for. Would it make
> > sense to put it into the battery node?
> 
> The backup/rtc battery is completely distinct from main battery.
> 
> It's presence is in no way related to that of the main battery,
> thus I would not put it into the same node.
> As all the information needed is included in the property I see
> no reason to move it into a separate node.

Oh. So it is to model some button battery that might be here to keep
the RTC state while the board is unpowered?

How is that related to the PMIC?

Maybe modeling as a fixed regulator would be more accurate.

Maxime
Koen Kooi Nov. 5, 2014, 2:55 p.m. UTC | #5
> Op 5 nov. 2014, om 15:48 heeft Maxime Ripard <maxime.ripard@free-electrons.com> het volgende geschreven:
> 
> On Tue, Nov 04, 2014 at 10:08:27PM +0100, Bruno Prémont wrote:
>> On Tue, 04 November 2014 Maxime Ripard <maxime.ripard@free-electrons.com> wrote:
>>> On Mon, Nov 03, 2014 at 09:02:44PM +0100, Bruno Prémont wrote: 
>>>> Doing something like this?:
>>>> 
>>>> --- a/arch/arm/boot/dts/sun7i-a20-cubietruck.dts
>>>> +++ b/arch/arm/boot/dts/sun7i-a20-cubietruck.dts
>>>> @@ -126,9 +126,11 @@
>>>>                                interrupt-controller;
>>>>                                #interrupt-cells = <1>;
>>>> 
>>>> -                               backup = <3000000 200>;
>>>> -                               battery.resistance = <100>;
>>>> -                               battery.capacity = <2000>;
>>>> +                               x-powers,backup = <3000000 200>;
>>> 
>>> I don't really remember what was that property used for. Would it make
>>> sense to put it into the battery node?
>> 
>> The backup/rtc battery is completely distinct from main battery.
>> 
>> It's presence is in no way related to that of the main battery,
>> thus I would not put it into the same node.
>> As all the information needed is included in the property I see
>> no reason to move it into a separate node.
> 
> Oh. So it is to model some button battery that might be here to keep
> the RTC state while the board is unpowered?
> 
> How is that related to the PMIC?

Some PMICs can recharge it and detect it it's empty or not.
diff mbox

Patch

--- a/arch/arm/boot/dts/sun7i-a20-cubietruck.dts
+++ b/arch/arm/boot/dts/sun7i-a20-cubietruck.dts
@@ -126,9 +126,11 @@ 
                                interrupt-controller;
                                #interrupt-cells = <1>;
 
-                               backup = <3000000 200>;
-                               battery.resistance = <100>;
-                               battery.capacity = <2000>;
+                               x-powers,backup = <3000000 200>;
+                               battery: battery@0 {
+                                       x-powers,resistance = <100>;
+                                       x-powers,capacity = <2000>;
+                               };
                        };
                };