All of lore.kernel.org
 help / color / mirror / Atom feed
From: Enric Balletbo i Serra <enric.balletbo@collabora.com>
To: Pavel Machek <pavel@ucw.cz>
Cc: linux-pm@vger.kernel.org, sre@kernel.org,
	Sameer Nanda <snanda@chromium.org>,
	bleung@chromium.org, gwendal@chromium.org,
	linux-kernel@vger.kernel.org, groeck@chromium.org,
	Adam.Thomson.Opensource@diasemi.com, kernel@collabora.com,
	"Rafael J. Wysocki" <rjw@rjwysocki.net>,
	Len Brown <len.brown@intel.com>
Subject: Re: [PATCH v3 1/2] power: supply: add input voltage limit property
Date: Tue, 18 Dec 2018 17:31:53 +0100	[thread overview]
Message-ID: <2fcfc863-3218-55e8-2a0f-75d7cb2d55db@collabora.com> (raw)
In-Reply-To: <20181213222000.GA12302@amd>

Hi Pavel,

On 13/12/18 23:20, Pavel Machek wrote:
> Hi!
> 
>> This is part of the Pixel C's thermal management strategy to effectively
>> limit the input power to 5V 3A when the screen is on. When the screen is
>> on, the display, the CPU, and the GPU all contribute more heat to the
>> system than while the screen is off, and we made a tradeoff to throttle
>> the charger in order to give more of the thermal budget to those other
>> components.
>>
>> So there's nothing fundamentally broken about the hardware that would
>> cause the Pixel C to malfunction if we were charging at 9V or 12V instead
>> of 5V when the screen is on, ie if userspace doesn't change this.
>>
>> What would happen is that you wouldn't meet Google's skin temperature
>> targets on the system if the charger was allowed to run at 9V or 12V with
>> the screen on.
>>
>> For folks hacking on Pixel Cs (which is now outside of Google's official
>> support window for Android) and customizing their own kernel and userspace
>> this would be acceptable, but we wanted to expose this feature in the
>> power supply properties because the feature does exist in the Emedded
>> Controller firmware of the Pixel C and all of Google's Chromebooks with
>> USB-C made since 2015 in case someone running an up to date kernel wanted
>> to limit the charging power for thermal or other reasons.
>>
>> This patch exposes a new property, similar to input current limit, to
>> re-configure the maximum voltage from the external supply at runtime
>> based on system-level knowledge or user input.
> 
> Could we get power input limit, instead?
> 

I'm open but I have some concerns, so lets discuss a bit about it :)

According to the USB PD 2.0 specs if we limit the source at 15W we can get 5V/3A
or 9V/1.67A, if I am not mistaken the higher voltage caused problem since the
conversion to lower internal voltages generated more heat, so in this case
9V/1.67A is not a valid value for us (maybe someone from ChromeOS can confirm
this?).

There is also the USB Power Delivery Specification revision 3.0, who defines a
programmable power supply protocol that allows granular control over VBUS power
in 20 mV steps to facilitate constant current or constant voltage charging. So,
maybe we might be interested on set a specific constant current or a specific
contant voltage. I think that in this case would be interesting have the
possibility to set voltage or current. What do you think?

Thanks,
 Enric


> That is what you really want, it is more generally useful, and it is
> what current input limit should have been, in the first place...
> 
> Thanks,
> 									Pavel
> 
>> Signed-off-by: Enric Balletbo i Serra <enric.balletbo@collabora.com>
>> Reviewed-by: Guenter Roeck <groeck@chromium.org>
>> ---
>>
>> Changes in v3:
>> - Improve commit log and documentation with Benson comments.
>>
>> Changes in v2:
>> - Document the new property in ABI/testing/sysfs-class-power.
>> - Add the Reviewed-by Guenter Roeck tag.
>>
>>  Documentation/ABI/testing/sysfs-class-power | 15 +++++++++++++++
>>  Documentation/power/power_supply_class.txt  |  2 ++
>>  drivers/power/supply/power_supply_sysfs.c   |  1 +
>>  include/linux/power_supply.h                |  1 +
>>  4 files changed, 19 insertions(+)
>>
>> diff --git a/Documentation/ABI/testing/sysfs-class-power b/Documentation/ABI/testing/sysfs-class-power
>> index 5e23e22dce1b..6dee5c105a28 100644
>> --- a/Documentation/ABI/testing/sysfs-class-power
>> +++ b/Documentation/ABI/testing/sysfs-class-power
>> @@ -335,6 +335,21 @@ Description:
>>  		Access: Read, Write
>>  		Valid values: Represented in microamps
>>  
>> +What:		/sys/class/power_supply/<supply_name>/input_voltage_limit
>> +Date:		Nov 2018
>> +Contact:	linux-pm@vger.kernel.org
>> +Description:
>> +		This entry configures the incoming VBUS voltage limit currently
>> +		set in the supply. Normally this is configured based on
>> +		system-level knowledge or user input (e.g. This is part of the
>> +		Pixel C's thermal management strategy to effectively limit the
>> +		input power to 5V when the screen is on to meet Google's skin
>> +		temperature targets). Note that this feature should not be
>> +		used for safety critical things.
>> +
>> +		Access: Read, Write
>> +		Valid values: Represented in microvolts
>> +
>>  What:		/sys/class/power_supply/<supply_name>/online,
>>  Date:		May 2007
>>  Contact:	linux-pm@vger.kernel.org
>> diff --git a/Documentation/power/power_supply_class.txt b/Documentation/power/power_supply_class.txt
>> index 300d37896e51..7b4be615b4f8 100644
>> --- a/Documentation/power/power_supply_class.txt
>> +++ b/Documentation/power/power_supply_class.txt
>> @@ -137,6 +137,8 @@ power supply object.
>>  
>>  INPUT_CURRENT_LIMIT - input current limit programmed by charger. Indicates
>>  the current drawn from a charging source.
>> +INPUT_VOLTAGE_LIMIT - input voltage limit programmed by charger. Indicates
>> +the voltage limit from a charging source.
>>  
>>  CHARGE_CONTROL_LIMIT - current charge control limit setting
>>  CHARGE_CONTROL_LIMIT_MAX - maximum charge control limit setting
>> diff --git a/drivers/power/supply/power_supply_sysfs.c b/drivers/power/supply/power_supply_sysfs.c
>> index dce24f596160..5848742ebb59 100644
>> --- a/drivers/power/supply/power_supply_sysfs.c
>> +++ b/drivers/power/supply/power_supply_sysfs.c
>> @@ -275,6 +275,7 @@ static struct device_attribute power_supply_attrs[] = {
>>  	POWER_SUPPLY_ATTR(charge_control_limit),
>>  	POWER_SUPPLY_ATTR(charge_control_limit_max),
>>  	POWER_SUPPLY_ATTR(input_current_limit),
>> +	POWER_SUPPLY_ATTR(input_voltage_limit),
>>  	POWER_SUPPLY_ATTR(energy_full_design),
>>  	POWER_SUPPLY_ATTR(energy_empty_design),
>>  	POWER_SUPPLY_ATTR(energy_full),
>> diff --git a/include/linux/power_supply.h b/include/linux/power_supply.h
>> index f80769175c56..608ba88e32ee 100644
>> --- a/include/linux/power_supply.h
>> +++ b/include/linux/power_supply.h
>> @@ -122,6 +122,7 @@ enum power_supply_property {
>>  	POWER_SUPPLY_PROP_CHARGE_CONTROL_LIMIT,
>>  	POWER_SUPPLY_PROP_CHARGE_CONTROL_LIMIT_MAX,
>>  	POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT,
>> +	POWER_SUPPLY_PROP_INPUT_VOLTAGE_LIMIT,
>>  	POWER_SUPPLY_PROP_ENERGY_FULL_DESIGN,
>>  	POWER_SUPPLY_PROP_ENERGY_EMPTY_DESIGN,
>>  	POWER_SUPPLY_PROP_ENERGY_FULL,
> 

  reply	other threads:[~2018-12-18 16:32 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-12-13 12:09 [PATCH v3 1/2] power: supply: add input voltage limit property Enric Balletbo i Serra
2018-12-13 12:09 ` [PATCH v3 2/2] power: supply: cros: allow to set input voltage and current limit Enric Balletbo i Serra
2018-12-13 14:39   ` Guenter Roeck
2018-12-13 14:13 ` [PATCH v3 1/2] power: supply: add input voltage limit property Adam Thomson
2018-12-13 22:20 ` Pavel Machek
2018-12-18 16:31   ` Enric Balletbo i Serra [this message]
2019-01-08 17:19     ` Enric Balletbo Serra
2019-01-08 17:39       ` Guenter Roeck
2019-01-08 18:47       ` Pavel Machek

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=2fcfc863-3218-55e8-2a0f-75d7cb2d55db@collabora.com \
    --to=enric.balletbo@collabora.com \
    --cc=Adam.Thomson.Opensource@diasemi.com \
    --cc=bleung@chromium.org \
    --cc=groeck@chromium.org \
    --cc=gwendal@chromium.org \
    --cc=kernel@collabora.com \
    --cc=len.brown@intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=pavel@ucw.cz \
    --cc=rjw@rjwysocki.net \
    --cc=snanda@chromium.org \
    --cc=sre@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.