Hi Pavel,

Missatge de Enric Balletbo i Serra <enric.balle...@collabora.com> del
dia dt., 18 de des. 2018 a les 17:32:
>
> 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?
>

Around Xmas are bad dates to start a discussion. I don't want this
patch will be forgotten, so a gentle ping on your thoughts on this :)
(just in case)

Cheers,
 Enric

> 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.balle...@collabora.com>
> >> Reviewed-by: Guenter Roeck <gro...@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...@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...@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 via email to