Hi Artur, On Mon, Jul 29, 2024 at 07:47:34PM +0200, Artur Weber wrote: > This patchset does the following: > > - Add CURRENT_MAX and INPUT_CURRENT_MAX power supply properties to > expose the "fast charge current" (maximum current from charger to > battery) and "CHGIN input current limit" (maximum current from > external supply to charger). > > - Add functions for toggling charging and OTG modes. > > - Add an extcon-based handler that enables charging or OTG depending > on the cable type plugged in. The extcon device to use for cable > detection can be specified in the device tree, and is entirely > optional. > > The extcon listener implementation is inspired by the rt5033 charger > driver (commit 8242336dc8a8 ("power: supply: rt5033_charger: Add cable > detection and USB OTG supply")). Tested on exynos4412-i9305 (after applying the changes in patch 8 - 10 to exynos4412-midas.dtsi). It works well, device correctly identifies a usb cable connected to charger or a usb cable connected to computer, and sets a limit of 1.8 A and 0.5 A in the two cases. I did notice that device does not always detect cable insertion, so I can occassionally get two de-attach events in a row. Cable was inserted between 428 and 462 in below log snippet: [ 389.458399] max77693-muic max77693-muic: external connector is attached(chg_type:0x3, prev_chg_type:0x3) [ 389.469765] max77693-charger max77693-charger: fast charging. connector type: 6 [ 428.151857] max77693-muic max77693-muic: external connector is detached(chg_type:0x3, prev_chg_type:0x0) [ 428.160319] max77693-charger max77693-charger: not charging. connector type: 13 [ 462.156048] max77693-muic max77693-muic: external connector is detached(chg_type:0x0, prev_chg_type:0x0) [ 469.881925] max77693-muic max77693-muic: external connector is attached(chg_type:0x3, prev_chg_type:0x3) [ 469.890049] max77693-charger max77693-charger: fast charging. connector type: 6 but this is probably an issue in extcon driver though rather than charger. I have not tested so that MHL still works, as I do not have access to that cable at the moment, will try it in a few days. Best regards Henrik Grimler > Signed-off-by: Artur Weber <aweber.kernel@xxxxxxxxx> > > v3 no longer uses the CHARGER regulator to manage the power status, and > that's for two reasons: > > - Regulator enable/disable behavior was interfering with how the power > supply driver worked (we occasionally got "unbalanced disables" > errors when switching charging state, despite checking for the > regulator status with regulator_is_enabled() - the CHARGER reg would > report as enabled despite the enable count being 0). > This broke OTG insertion if the OTG cable was plugged in first, and > sometimes caused warnings on unsuspend. > > - Changing the charging values directly in the power supply driver is > less opaque and lets us avoid bringing in a dependency on regulators. > > It also splits the current limits back into two properties: > INPUT_CURRENT_LIMIT and CONSTANT_CHARGE_CURRENT_MAX. Again, there are > two reasons for this split: > > - They are two separate current controls, one for USB->charger and one > for charger->battery, and they have different limits (0-2.1A for CC > vs 60mA-2.58A for input). Given that the power supply core has the > properties for both values separately, it's more logical to present > them as such. > > - It's safer to keep these separate; CONSTANT_CHARGE_CURRENT_MAX is > pretty explicitly only set *once* - at probe time with a safe value > specified in the DT. This way, INPUT_CURRENT_LIMIT is safer to modify > since in the event of an invalid value the CC current will hold back > the extra current thus preventing damage to the battery. > > The latter is relevant as I'm working on a follow-up patchset that > allows for controlling the charging parameters using power supply > properties/sysfs properties rather than the CHARGER regulator. > > Note that the CHARGER regulator gets disabled automatically if it's > not used, which will disable charging if it was auto-enabled by the > extcon code. This can be worked around by re-attaching the cable, or > more properly by removing the CHARGER regulator from DT for devices > that use the extcon-based charger management, as has been done in the > Galaxy Tab 3 8.0 DTSI. > > See v1 for old description: > > https://lore.kernel.org/r/20240530-max77693-charger-extcon-v1-0-dc2a9e5bdf30@xxxxxxxxx > --- > Changes in v3: > - Drop uses of CHARGER regulator, manage registers directly in power > supply driver instead > - Link to v2: https://lore.kernel.org/r/20240715-max77693-charger-extcon-v2-0-0838ffbb18c3@xxxxxxxxx > > Changes in v2: > - Changed to use monitored-battery for charge current value > - Both current limit variables are now set by the CHARGER regulator > - Link to v1: https://lore.kernel.org/r/20240530-max77693-charger-extcon-v1-0-dc2a9e5bdf30@xxxxxxxxx > > --- > Artur Weber (10): > dt-bindings: power: supply: max77693: Add monitored-battery property > dt-bindings: power: supply: max77693: Add maxim,usb-connector property > power: supply: max77693: Expose input current limit and CC current properties > power: supply: max77693: Set charge current limits during init > power: supply: max77693: Add USB extcon detection for enabling charging > power: supply: max77693: Add support for detecting and enabling OTG > power: supply: max77693: Set up charge/input current according to cable type > ARM: dts: samsung: exynos4212-tab3: Add battery node with charge current value > ARM: dts: samsung: exynos4212-tab3: Add USB connector node > ARM: dts: exynos4212-tab3: Drop CHARGER regulator > > .../bindings/power/supply/maxim,max77693.yaml | 15 + > arch/arm/boot/dts/samsung/exynos4212-tab3.dtsi | 22 +- > drivers/power/supply/Kconfig | 1 + > drivers/power/supply/max77693_charger.c | 302 ++++++++++++++++++++- > include/linux/mfd/max77693-private.h | 12 + > 5 files changed, 337 insertions(+), 15 deletions(-) > --- > base-commit: 0c3836482481200ead7b416ca80c68a29cfdaabd > change-id: 20240525-max77693-charger-extcon-9ebb7bad83ce > > Best regards, > -- > Artur Weber <aweber.kernel@xxxxxxxxx> >