From: Artur Weber <aweber.kernel@gmail.com>
To: Krzysztof Kozlowski <krzk@kernel.org>,
Chanwoo Choi <cw00.choi@samsung.com>
Cc: Sebastian Reichel <sre@kernel.org>, Rob Herring <robh@kernel.org>,
Conor Dooley <conor+dt@kernel.org>, Lee Jones <lee@kernel.org>,
Krzysztof Kozlowski <krzk+dt@kernel.org>,
Alim Akhtar <alim.akhtar@samsung.com>,
linux-pm@vger.kernel.org, devicetree@vger.kernel.org,
linux-kernel@vger.kernel.org,
linux-arm-kernel@lists.infradead.org,
linux-samsung-soc@vger.kernel.org,
~postmarketos/upstreaming@lists.sr.ht,
Henrik Grimler <henrik@grimler.se>,
Wolfgang Wiedmeyer <wolfgit@wiedmeyer.de>,
Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>
Subject: Re: [PATCH v2 6/9] power: supply: max77693: Add USB extcon detection for enabling charging
Date: Sat, 20 Jul 2024 22:59:50 +0200 [thread overview]
Message-ID: <9eedeaa3-ceda-427a-80d8-de6b59eb1f4d@gmail.com> (raw)
In-Reply-To: <20240715-max77693-charger-extcon-v2-6-0838ffbb18c3@gmail.com>
On 15.07.2024 14:55, Artur Weber wrote:
> Add a device tree property, "maxim,usb-connector", that can be used to
> specify a USB connector to use to detect whether a charging cable has
> been plugged in/out, and enable/disable charging accordingly.
>
> To accommodate this, also add an internal pointer to the CHARGER regulator,
> which is used to enable/disable charging and set the input current limit
> (which will be done in subsequent commits).
>
> The extcon listener/worker implementation is inspired by the rt5033_charger
> driver.
>
> Signed-off-by: Artur Weber <aweber.kernel@gmail.com>
> ...> diff --git a/drivers/power/supply/max77693_charger.c
b/drivers/power/supply/max77693_charger.c
> index 0ddaa03669a2..2dc273dd96ee 100644
> --- a/drivers/power/supply/max77693_charger.c
> +++ b/drivers/power/supply/max77693_charger.c
> ...
> +static int max77693_set_charging(struct max77693_charger *chg, bool enable)
> +{
> + int is_enabled;
> + int ret = 0;
> +
> + is_enabled = regulator_is_enabled(chg->regu);
> + if (is_enabled < 0)
> + return is_enabled;
> +
> + if (enable && !is_enabled)
> + ret = regulator_enable(chg->regu);
> + else if (!enable && is_enabled)
> + ret = regulator_disable(chg->regu);
> +
> + return ret;
> +}
Nevermind, the regulator-based approach simply doesn't work here,
because we pretty frequently end up in a situation like this:
[ 20.162612] ------------[ cut here ]------------
[ 20.162618] WARNING: CPU: 0 PID: 29 at drivers/regulator/core.c:3015
_regulator_disable+0x140/0x1a0
[ 20.162645] unbalanced disables for CHARGER
[ 20.162649] Modules linked in: fuse brcmfmac_wcc hci_uart btintel
btbcm bluetooth snd_soc_midas_wm1811 st_accel_i2c st_sensors_i2c
st_accel_spi st_accel brcmfmac ecdh_generic st_sensors st_sensors_spi
ecc libaes brcmutil cfg80211 rfkill exynos_adc yamaha_yas530
industrialio_triggered_buffer kfifo_buf exynos_rng s5p_sss cm3323
industrialio
[ 20.162737] CPU: 0 PID: 29 Comm: kworker/0:2 Tainted: G W
6.10.0-postmarketos-exynos4 #82
[ 20.162747] Hardware name: Samsung Exynos (Flattened Device Tree)
[ 20.162754] Workqueue: events max77693_charger_extcon_work
[ 20.162770] Call trace:
[ 20.162778] unwind_backtrace from show_stack+0x10/0x14
[ 20.162804] show_stack from dump_stack_lvl+0x50/0x64
[ 20.162824] dump_stack_lvl from __warn+0x94/0xc0
[ 20.162838] __warn from warn_slowpath_fmt+0x120/0x1b4
[ 20.162855] warn_slowpath_fmt from _regulator_disable+0x140/0x1a0
[ 20.162873] _regulator_disable from regulator_disable+0x34/0x6c
[ 20.162890] regulator_disable from
max77693_charger_extcon_work+0x1e4/0x268
[ 20.162907] max77693_charger_extcon_work from
process_one_work+0x154/0x2dc
[ 20.162925] process_one_work from worker_thread+0x250/0x438
[ 20.162941] worker_thread from kthread+0x110/0x12c
[ 20.162958] kthread from ret_from_fork+0x14/0x28
[ 20.162970] Exception stack(0xc18edfb0 to 0xc18edff8)
[ 20.162979] dfa0: 00000000
00000000 00000000 00000000
[ 20.162987] dfc0: 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000
[ 20.162994] dfe0: 00000000 00000000 00000000 00000000 00000013 00000000
[ 20.162999] ---[ end trace 0000000000000000 ]---
[ 20.163007] max77693-charger max77693-charger: failed to set charging
(-5)
This can be reproduced by booting the device in with no cable plugged
in, then plugging in an OTG cable. It prints the warning on connect and
disconnect. More importantly, this prevents a switch to/from OTG mode in
the scenarios that print a warning. (I've also encountered some issues
with similar warnings being printed on unsuspend, but wasn't able to
reproduce them; I'm willing to assume they were related to plugging in
an OTG cable as the wakeup trigger.)
As far as I understand it, this is because regulator_is_enabled checks
for the hardware state, not for the in-software regulator enable count,
and the charging bits are flipped on by default (presumably by the
bootloader). I thought regulator-boot-on would handle this, but clearly
it doesn't...
Best regards
Artur
next prev parent reply other threads:[~2024-07-20 20:59 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-07-15 12:55 [PATCH v2 0/9] power: supply: max77693: Toggle charging/OTG based on extcon status Artur Weber
2024-07-15 12:55 ` [PATCH v2 1/9] dt-bindings: power: supply: max77693: Add monitored-battery property Artur Weber
2024-07-22 5:48 ` Krzysztof Kozlowski
2024-07-15 12:55 ` [PATCH v2 2/9] dt-bindings: power: supply: max77693: Add maxim,usb-connector property Artur Weber
2024-07-22 5:49 ` Krzysztof Kozlowski
2024-07-15 12:55 ` [PATCH v2 3/9] regulator: max77693: Set fast charge current in MAX77693 CHARGER regulator Artur Weber
2024-07-15 12:55 ` [PATCH v2 4/9] power: supply: max77693: Expose CURRENT_MAX property Artur Weber
2024-07-15 12:55 ` [PATCH v2 5/9] power: supply: max77693: Set charge current limits during init Artur Weber
2024-07-25 15:37 ` Lee Jones
2024-07-15 12:55 ` [PATCH v2 6/9] power: supply: max77693: Add USB extcon detection for enabling charging Artur Weber
2024-07-20 20:59 ` Artur Weber [this message]
2024-07-15 12:55 ` [PATCH v2 7/9] power: supply: max77693: Add support for detecting and enabling OTG Artur Weber
2024-07-25 15:38 ` Lee Jones
2024-07-15 12:55 ` [PATCH v2 8/9] ARM: dts: samsung: exynos4212-tab3: Add battery node with charge current value Artur Weber
2024-07-15 12:55 ` [PATCH v2 9/9] ARM: dts: samsung: exynos4212-tab3: Add USB connector node Artur Weber
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=9eedeaa3-ceda-427a-80d8-de6b59eb1f4d@gmail.com \
--to=aweber.kernel@gmail.com \
--cc=GNUtoo@cyberdimension.org \
--cc=alim.akhtar@samsung.com \
--cc=conor+dt@kernel.org \
--cc=cw00.choi@samsung.com \
--cc=devicetree@vger.kernel.org \
--cc=henrik@grimler.se \
--cc=krzk+dt@kernel.org \
--cc=krzk@kernel.org \
--cc=lee@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=linux-samsung-soc@vger.kernel.org \
--cc=robh@kernel.org \
--cc=sre@kernel.org \
--cc=wolfgit@wiedmeyer.de \
--cc=~postmarketos/upstreaming@lists.sr.ht \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).