diff mbox

[RESEND,2/2] ARM: dts: Add tps65090 FET constraints on Peach Pit and Pi

Message ID 1407757091-18730-2-git-send-email-javier.martinez@collabora.co.uk (mailing list archive)
State New, archived
Headers show

Commit Message

Javier Martinez Canillas Aug. 11, 2014, 11:38 a.m. UTC
Both Exynos5420 Peach Pit and Exynos5800 Peach Pi boards
have a tps65090 PMU that has a number of switches (FETs)
that are just on/off devices but they do have a current
limit and the output voltage of the switch is ramped up
within a controlled slope.

After the switch is turned on, a safety timer is started
and before this timer times out the output voltage must
have reached the input voltage. Otherwise the switch is
turned off expecting an overload condition.

So using the maximum output voltage slew rate and the timer
minimum and maximum timeouts, a voltage constraints can be
expressed as bounded limits for the timeout. That is what
is used in the board schematics and should be in the DT too.

Signed-off-by: Javier Martinez Canillas <javier.martinez@collabora.co.uk>
---
 arch/arm/boot/dts/exynos5420-peach-pit.dts | 14 ++++++++++++++
 arch/arm/boot/dts/exynos5800-peach-pi.dts  | 14 ++++++++++++++
 2 files changed, 28 insertions(+)

Comments

Doug Anderson Aug. 11, 2014, 3:57 p.m. UTC | #1
Javier,

On Mon, Aug 11, 2014 at 4:38 AM, Javier Martinez Canillas
<javier.martinez@collabora.co.uk> wrote:
> Both Exynos5420 Peach Pit and Exynos5800 Peach Pi boards
> have a tps65090 PMU that has a number of switches (FETs)
> that are just on/off devices but they do have a current
> limit and the output voltage of the switch is ramped up
> within a controlled slope.
>
> After the switch is turned on, a safety timer is started
> and before this timer times out the output voltage must
> have reached the input voltage. Otherwise the switch is
> turned off expecting an overload condition.
>
> So using the maximum output voltage slew rate and the timer
> minimum and maximum timeouts, a voltage constraints can be
> expressed as bounded limits for the timeout. That is what
> is used in the board schematics and should be in the DT too.

I don't understand this, but if you and Mark are happy with it...

...I'm also not 100% certain what the above description has to do with
this change, but I'll admit to having only skimmed some of the earlier
conversations.


> Signed-off-by: Javier Martinez Canillas <javier.martinez@collabora.co.uk>
> ---
>  arch/arm/boot/dts/exynos5420-peach-pit.dts | 14 ++++++++++++++
>  arch/arm/boot/dts/exynos5800-peach-pi.dts  | 14 ++++++++++++++
>  2 files changed, 28 insertions(+)
>
> diff --git a/arch/arm/boot/dts/exynos5420-peach-pit.dts b/arch/arm/boot/dts/exynos5420-peach-pit.dts
> index d8710c1..eefafe6 100644
> --- a/arch/arm/boot/dts/exynos5420-peach-pit.dts
> +++ b/arch/arm/boot/dts/exynos5420-peach-pit.dts
> @@ -386,27 +386,41 @@
>                                         };
>                                         tps65090_fet1: fet1 {
>                                                 regulator-name = "vcd_led";
> +                                               regulator-min-microvolt = <5000000>;
> +                                               regulator-max-microvolt = <1700000>;

This is almost certainly wrong.  Your max is smaller than your min.
Perhaps you want an extra 0.

>                                         };
>                                         tps65090_fet2: fet2 {
>                                                 regulator-name = "video_mid";
> +                                               regulator-min-microvolt = <4500000>;
> +                                               regulator-max-microvolt = <5500000>;
>                                                 regulator-always-on;
>                                         };
>                                         tps65090_fet3: fet3 {
>                                                 regulator-name = "wwan_r";
> +                                               regulator-min-microvolt = <3000000>;
> +                                               regulator-max-microvolt = <5500000>;
>                                                 regulator-always-on;
>                                         };
>                                         tps65090_fet4: fet4 {
>                                                 regulator-name = "sdcard";
> +                                               regulator-min-microvolt = <3000000>;
> +                                               regulator-max-microvolt = <5500000>;
>                                                 regulator-always-on;
>                                         };
>                                         tps65090_fet5: fet5 {
>                                                 regulator-name = "camout";
> +                                               regulator-min-microvolt = <3000000>;
> +                                               regulator-max-microvolt = <5500000>;
>                                         };
>                                         tps65090_fet6: fet6 {
>                                                 regulator-name = "lcd_vdd";
> +                                               regulator-min-microvolt = <3000000>;
> +                                               regulator-max-microvolt = <5500000>;
>                                         };
>                                         tps65090_fet7: fet7 {
>                                                 regulator-name = "video_mid_1a";
> +                                               regulator-min-microvolt = <3000000>;
> +                                               regulator-max-microvolt = <5500000>;
>                                                 regulator-always-on;
>                                         };
>                                         tps65090_ldo1: ldo1 {
> diff --git a/arch/arm/boot/dts/exynos5800-peach-pi.dts b/arch/arm/boot/dts/exynos5800-peach-pi.dts
> index 07b29b7..5c38bc0 100644
> --- a/arch/arm/boot/dts/exynos5800-peach-pi.dts
> +++ b/arch/arm/boot/dts/exynos5800-peach-pi.dts
> @@ -384,27 +384,41 @@
>                                         };
>                                         tps65090_fet1: fet1 {
>                                                 regulator-name = "vcd_led";
> +                                               regulator-min-microvolt = <5000000>;
> +                                               regulator-max-microvolt = <1700000>;

Here, too.

>                                         };
>                                         tps65090_fet2: fet2 {
>                                                 regulator-name = "video_mid";
> +                                               regulator-min-microvolt = <4500000>;
> +                                               regulator-max-microvolt = <5500000>;
>                                                 regulator-always-on;
>                                         };
>                                         tps65090_fet3: fet3 {
>                                                 regulator-name = "wwan_r";
> +                                               regulator-min-microvolt = <3000000>;
> +                                               regulator-max-microvolt = <5500000>;
>                                                 regulator-always-on;
>                                         };
>                                         tps65090_fet4: fet4 {
>                                                 regulator-name = "sdcard";
> +                                               regulator-min-microvolt = <3000000>;
> +                                               regulator-max-microvolt = <5500000>;
>                                                 regulator-always-on;
>                                         };
>                                         tps65090_fet5: fet5 {
>                                                 regulator-name = "camout";
> +                                               regulator-min-microvolt = <3000000>;
> +                                               regulator-max-microvolt = <5500000>;
>                                         };
>                                         tps65090_fet6: fet6 {
>                                                 regulator-name = "lcd_vdd";
> +                                               regulator-min-microvolt = <3000000>;
> +                                               regulator-max-microvolt = <5500000>;
>                                         };
>                                         tps65090_fet7: fet7 {
>                                                 regulator-name = "video_mid_1a";
> +                                               regulator-min-microvolt = <3000000>;
> +                                               regulator-max-microvolt = <5500000>;
>                                                 regulator-always-on;
>                                         };
>                                         tps65090_ldo1: ldo1 {

Other than 1.7V vs. 17V, this matches what I see in the tps65090
specifications.  Technically I think that this should also be applied
to other tps65090 users in mainline since it's a property shared among
every user of tps65090.  That means exynos5250-snow and
tegra114-dalmore.  I'd be tempted to say that it belongs in source
code or in a dts fragment as well.

-Doug
Mark Brown Aug. 11, 2014, 4:02 p.m. UTC | #2
On Mon, Aug 11, 2014 at 08:57:24AM -0700, Doug Anderson wrote:
> On Mon, Aug 11, 2014 at 4:38 AM, Javier Martinez Canillas

> > After the switch is turned on, a safety timer is started
> > and before this timer times out the output voltage must
> > have reached the input voltage. Otherwise the switch is
> > turned off expecting an overload condition.

> > So using the maximum output voltage slew rate and the timer
> > minimum and maximum timeouts, a voltage constraints can be
> > expressed as bounded limits for the timeout. That is what
> > is used in the board schematics and should be in the DT too.

> I don't understand this, but if you and Mark are happy with it...

I have not looked at this change to my knowledge.

> ...I'm also not 100% certain what the above description has to do with
> this change, but I'll admit to having only skimmed some of the earlier
> conversations.

It's not at all clear to me either looking at the quoted section.
Javier Martinez Canillas Aug. 11, 2014, 5:31 p.m. UTC | #3
Hello Mark,

On 08/11/2014 06:02 PM, Mark Brown wrote:
> On Mon, Aug 11, 2014 at 08:57:24AM -0700, Doug Anderson wrote:
>> On Mon, Aug 11, 2014 at 4:38 AM, Javier Martinez Canillas
> 
>> > After the switch is turned on, a safety timer is started
>> > and before this timer times out the output voltage must
>> > have reached the input voltage. Otherwise the switch is
>> > turned off expecting an overload condition.
> 
>> > So using the maximum output voltage slew rate and the timer
>> > minimum and maximum timeouts, a voltage constraints can be
>> > expressed as bounded limits for the timeout. That is what
>> > is used in the board schematics and should be in the DT too.
> 
>> I don't understand this, but if you and Mark are happy with it...
> 
> I have not looked at this change to my knowledge.
> 

No worries, I have to re-spin anyways to fix the 17v typo that Doug pointed out.
But basically is related to our previous discussion in patch:

"[RFC 3/5] regulator: core: Only apply constraints if available on list voltage"

where you explained [0] to me that child regulators should explicit set their
constraints instead of getting from its parent supply. So this patch adds the
needed constraints for the children FETs even when their output voltage depend
on its parent supply.

>> ...I'm also not 100% certain what the above description has to do with
>> this change, but I'll admit to having only skimmed some of the earlier
>> conversations.
> 
> It's not at all clear to me either looking at the quoted section.
> 

Yes, the commit message is not great to say the least. Also I didn't have the
last version of the documentation so I misunderstood from where the constraints
mentioned in the schematics came from. Will fix the commit message when posting v2.

Thanks a lot and best regards,
Javier

[0]: https://lkml.org/lkml/2014/7/30/99
Javier Martinez Canillas Aug. 11, 2014, 5:47 p.m. UTC | #4
Hello Doug,

On 08/11/2014 05:57 PM, Doug Anderson wrote:
> Javier,
> 
> On Mon, Aug 11, 2014 at 4:38 AM, Javier Martinez Canillas
> <javier.martinez@collabora.co.uk> wrote:
>> Both Exynos5420 Peach Pit and Exynos5800 Peach Pi boards
>> have a tps65090 PMU that has a number of switches (FETs)
>> that are just on/off devices but they do have a current
>> limit and the output voltage of the switch is ramped up
>> within a controlled slope.
>>
>> After the switch is turned on, a safety timer is started
>> and before this timer times out the output voltage must
>> have reached the input voltage. Otherwise the switch is
>> turned off expecting an overload condition.
>>
>> So using the maximum output voltage slew rate and the timer
>> minimum and maximum timeouts, a voltage constraints can be
>> expressed as bounded limits for the timeout. That is what
>> is used in the board schematics and should be in the DT too.
> 
> I don't understand this, but if you and Mark are happy with it...
> 
> ...I'm also not 100% certain what the above description has to do with
> this change, but I'll admit to having only skimmed some of the earlier
> conversations.
>

As I stated before, I wrongly assumed from where the constraints in the
schematics came from. From the latest doc I now know that there is a
"recommended operating conditions table". I'll fix it in v2, sorry for the
confusion...

> 
>> Signed-off-by: Javier Martinez Canillas <javier.martinez@collabora.co.uk>
>> ---
>>  arch/arm/boot/dts/exynos5420-peach-pit.dts | 14 ++++++++++++++
>>  arch/arm/boot/dts/exynos5800-peach-pi.dts  | 14 ++++++++++++++
>>  2 files changed, 28 insertions(+)
>>
>> diff --git a/arch/arm/boot/dts/exynos5420-peach-pit.dts b/arch/arm/boot/dts/exynos5420-peach-pit.dts
>> index d8710c1..eefafe6 100644
>> --- a/arch/arm/boot/dts/exynos5420-peach-pit.dts
>> +++ b/arch/arm/boot/dts/exynos5420-peach-pit.dts
>> @@ -386,27 +386,41 @@
>>                                         };
>>                                         tps65090_fet1: fet1 {
>>                                                 regulator-name = "vcd_led";
>> +                                               regulator-min-microvolt = <5000000>;
>> +                                               regulator-max-microvolt = <1700000>;
> 
> This is almost certainly wrong.  Your max is smaller than your min.
> Perhaps you want an extra 0.
> 
>>                                         };
>>                                         tps65090_fet2: fet2 {
>>                                                 regulator-name = "video_mid";
>> +                                               regulator-min-microvolt = <4500000>;
>> +                                               regulator-max-microvolt = <5500000>;
>>                                                 regulator-always-on;
>>                                         };
>>                                         tps65090_fet3: fet3 {
>>                                                 regulator-name = "wwan_r";
>> +                                               regulator-min-microvolt = <3000000>;
>> +                                               regulator-max-microvolt = <5500000>;
>>                                                 regulator-always-on;
>>                                         };
>>                                         tps65090_fet4: fet4 {
>>                                                 regulator-name = "sdcard";
>> +                                               regulator-min-microvolt = <3000000>;
>> +                                               regulator-max-microvolt = <5500000>;
>>                                                 regulator-always-on;
>>                                         };
>>                                         tps65090_fet5: fet5 {
>>                                                 regulator-name = "camout";
>> +                                               regulator-min-microvolt = <3000000>;
>> +                                               regulator-max-microvolt = <5500000>;
>>                                         };
>>                                         tps65090_fet6: fet6 {
>>                                                 regulator-name = "lcd_vdd";
>> +                                               regulator-min-microvolt = <3000000>;
>> +                                               regulator-max-microvolt = <5500000>;
>>                                         };
>>                                         tps65090_fet7: fet7 {
>>                                                 regulator-name = "video_mid_1a";
>> +                                               regulator-min-microvolt = <3000000>;
>> +                                               regulator-max-microvolt = <5500000>;
>>                                                 regulator-always-on;
>>                                         };
>>                                         tps65090_ldo1: ldo1 {
>> diff --git a/arch/arm/boot/dts/exynos5800-peach-pi.dts b/arch/arm/boot/dts/exynos5800-peach-pi.dts
>> index 07b29b7..5c38bc0 100644
>> --- a/arch/arm/boot/dts/exynos5800-peach-pi.dts
>> +++ b/arch/arm/boot/dts/exynos5800-peach-pi.dts
>> @@ -384,27 +384,41 @@
>>                                         };
>>                                         tps65090_fet1: fet1 {
>>                                                 regulator-name = "vcd_led";
>> +                                               regulator-min-microvolt = <5000000>;
>> +                                               regulator-max-microvolt = <1700000>;
> 
> Here, too.
> 
>>                                         };
>>                                         tps65090_fet2: fet2 {
>>                                                 regulator-name = "video_mid";
>> +                                               regulator-min-microvolt = <4500000>;
>> +                                               regulator-max-microvolt = <5500000>;
>>                                                 regulator-always-on;
>>                                         };
>>                                         tps65090_fet3: fet3 {
>>                                                 regulator-name = "wwan_r";
>> +                                               regulator-min-microvolt = <3000000>;
>> +                                               regulator-max-microvolt = <5500000>;
>>                                                 regulator-always-on;
>>                                         };
>>                                         tps65090_fet4: fet4 {
>>                                                 regulator-name = "sdcard";
>> +                                               regulator-min-microvolt = <3000000>;
>> +                                               regulator-max-microvolt = <5500000>;
>>                                                 regulator-always-on;
>>                                         };
>>                                         tps65090_fet5: fet5 {
>>                                                 regulator-name = "camout";
>> +                                               regulator-min-microvolt = <3000000>;
>> +                                               regulator-max-microvolt = <5500000>;
>>                                         };
>>                                         tps65090_fet6: fet6 {
>>                                                 regulator-name = "lcd_vdd";
>> +                                               regulator-min-microvolt = <3000000>;
>> +                                               regulator-max-microvolt = <5500000>;
>>                                         };
>>                                         tps65090_fet7: fet7 {
>>                                                 regulator-name = "video_mid_1a";
>> +                                               regulator-min-microvolt = <3000000>;
>> +                                               regulator-max-microvolt = <5500000>;
>>                                                 regulator-always-on;
>>                                         };
>>                                         tps65090_ldo1: ldo1 {
> 
> Other than 1.7V vs. 17V, this matches what I see in the tps65090
> specifications.  Technically I think that this should also be applied
> to other tps65090 users in mainline since it's a property shared among
> every user of tps65090.  That means exynos5250-snow and
> tegra114-dalmore.  I'd be tempted to say that it belongs in source
> code or in a dts fragment as well.
> 

Agreed, now is clear from the table that these are operating conditions related
to the PMIC and is not a per board value. So since these are constants, they
should be added to the driver source code and not in the DTS. I'll do this in v2
as well.

> -Doug
> 

Best regards,
Javier
diff mbox

Patch

diff --git a/arch/arm/boot/dts/exynos5420-peach-pit.dts b/arch/arm/boot/dts/exynos5420-peach-pit.dts
index d8710c1..eefafe6 100644
--- a/arch/arm/boot/dts/exynos5420-peach-pit.dts
+++ b/arch/arm/boot/dts/exynos5420-peach-pit.dts
@@ -386,27 +386,41 @@ 
 					};
 					tps65090_fet1: fet1 {
 						regulator-name = "vcd_led";
+						regulator-min-microvolt = <5000000>;
+						regulator-max-microvolt = <1700000>;
 					};
 					tps65090_fet2: fet2 {
 						regulator-name = "video_mid";
+						regulator-min-microvolt = <4500000>;
+						regulator-max-microvolt = <5500000>;
 						regulator-always-on;
 					};
 					tps65090_fet3: fet3 {
 						regulator-name = "wwan_r";
+						regulator-min-microvolt = <3000000>;
+						regulator-max-microvolt = <5500000>;
 						regulator-always-on;
 					};
 					tps65090_fet4: fet4 {
 						regulator-name = "sdcard";
+						regulator-min-microvolt = <3000000>;
+						regulator-max-microvolt = <5500000>;
 						regulator-always-on;
 					};
 					tps65090_fet5: fet5 {
 						regulator-name = "camout";
+						regulator-min-microvolt = <3000000>;
+						regulator-max-microvolt = <5500000>;
 					};
 					tps65090_fet6: fet6 {
 						regulator-name = "lcd_vdd";
+						regulator-min-microvolt = <3000000>;
+						regulator-max-microvolt = <5500000>;
 					};
 					tps65090_fet7: fet7 {
 						regulator-name = "video_mid_1a";
+						regulator-min-microvolt = <3000000>;
+						regulator-max-microvolt = <5500000>;
 						regulator-always-on;
 					};
 					tps65090_ldo1: ldo1 {
diff --git a/arch/arm/boot/dts/exynos5800-peach-pi.dts b/arch/arm/boot/dts/exynos5800-peach-pi.dts
index 07b29b7..5c38bc0 100644
--- a/arch/arm/boot/dts/exynos5800-peach-pi.dts
+++ b/arch/arm/boot/dts/exynos5800-peach-pi.dts
@@ -384,27 +384,41 @@ 
 					};
 					tps65090_fet1: fet1 {
 						regulator-name = "vcd_led";
+						regulator-min-microvolt = <5000000>;
+						regulator-max-microvolt = <1700000>;
 					};
 					tps65090_fet2: fet2 {
 						regulator-name = "video_mid";
+						regulator-min-microvolt = <4500000>;
+						regulator-max-microvolt = <5500000>;
 						regulator-always-on;
 					};
 					tps65090_fet3: fet3 {
 						regulator-name = "wwan_r";
+						regulator-min-microvolt = <3000000>;
+						regulator-max-microvolt = <5500000>;
 						regulator-always-on;
 					};
 					tps65090_fet4: fet4 {
 						regulator-name = "sdcard";
+						regulator-min-microvolt = <3000000>;
+						regulator-max-microvolt = <5500000>;
 						regulator-always-on;
 					};
 					tps65090_fet5: fet5 {
 						regulator-name = "camout";
+						regulator-min-microvolt = <3000000>;
+						regulator-max-microvolt = <5500000>;
 					};
 					tps65090_fet6: fet6 {
 						regulator-name = "lcd_vdd";
+						regulator-min-microvolt = <3000000>;
+						regulator-max-microvolt = <5500000>;
 					};
 					tps65090_fet7: fet7 {
 						regulator-name = "video_mid_1a";
+						regulator-min-microvolt = <3000000>;
+						regulator-max-microvolt = <5500000>;
 						regulator-always-on;
 					};
 					tps65090_ldo1: ldo1 {