Re: [PATCH 2/2] extcon intel-cht-wc: Enable external charger

From: Hans de Goede
Date: Wed Feb 20 2019 - 11:42:35 EST


Hi,

On 2/19/19 9:20 PM, Yauhen Kharuzhy wrote:
On Tue, Feb 19, 2019 at 02:39:55PM +0100, Hans de Goede wrote:
I also wonder if you've considered just disabling the extcon driver
for the PMIC leaving it in automatic mode. Unlike the GPD win / pocket
with their Type-C connector, your device seems to actually be using
the PMIC as it was designed, so the automatic mode might just work
and not touching the PMIC at all might be best.

Hm. We need to detect charger type (which can be kind of ACA) and set charging
limit properly, control OTG boost converter of the charger, request
hi-voltage charging etc.
I am not sure that this is possible without of software intervention.
Mixing of software
events handling with hardware charging control will be a source of
errors and instability.
So, no, I didn't think about HW-controlled charging when Linux is
running. But this may
be subject of future investigation.

Ok, I was hoping that the CCSM hardware would automatically do charger-type
detection and set the input-current-limit accordingly.

I have checked this. UEFI firmware configures PMIC to SW-controlled
mode if no OTG cable connected at start. If change PMIC mode to
HW-controlled, charging works but no IINLIM control by PMIC is observed
(ILIM pin is disabled and 0x00 register value is not changed). When OTG
cable is connected, bq25892 registers are not changed also (OTG boost
converter is disabled).

So, I consider that this machine is designed for software charging and
OTG mode control.

Ok, that is similar to my experience with the GPD devices with
TypeC connector.

Q: In theory, enabling of 'charge enable' output without of properly
configuration of external charger can cause some problems (USB overload,
battery overcurrent etc.). I think that there are no such stupidly
designed devices exist but we cannot be sure. What should we do with this?

This should not be a problem, the input-current-limit of the charger
will already be setup by the firmware at boot and if a charger gets
plugged in later then the input-current-limit will reset to 500mA.

Likewise the max charging current for the battery should already
be configured properly by the firmware (this must be the case since
the device will also charge while off) and we don't even know what
the max charging current for the battery is, so we just have to rely
on the firmware/BIOS here.

In the Lenovo Yoga Book the firmware seems to set safe input current limit
only (500 mA). Fast charging can be enabled by software and exactly value
of limits for this are known from Lenovo's sources only...

The input-current-limit only specifies how much current the charger may
draw from the micro-usb for both supplying the laptop as well as for
charging the battery combined. You can safely set this as high as
the charger can handle (2A for a dedicated charger).

The BQ25892 should have a *separate* setting for the max current to
use while charging the battery (assuming that the input current allows
drawing enough current in the first place). I would hope that those bits
have some sane value set from the firmware...

Yes, the charger has separate battery current limit but firmware doesn't
change its default value (2048 mA) while Lenovo's software driver does.
It set battery charging limit to 4 A and input limit to 2 A (it makes
sense because Lenovo adapter and BQ25892 both support voltage increasing
upto 12V).

Hmm, I guess your device uses a separate power-barrel charging conector
then? 12v over micro-usb requires special negotiation which the Whiskey Cove
PMIC does not support AFAIK.

In either case if you want to increase the max battery current to 4A
in the kernel, then this will have to be guarded by a DMI check.

I beieve the way to do this wuld be throuh a device-property on the
charger which gets set from drivers/i2c/busses/i2c-cht-wc.c, but as
said this needs to be behind a DMI check, e cannot just g and boost
the max charge current to 4A everywhere.

Regards,

Hans