From: Hans de Goede <hdegoede@redhat.com>
To: "Jingle.Wu" <jingle.wu@emc.com.tw>,
'Dmitry Torokhov' <dmitry.torokhov@gmail.com>
Cc: linux-input@vger.kernel.org
Subject: Re: [PATCH] Input: elan_i2c - Fix regulator enable count imbalance after suspend/resume
Date: Thu, 6 Jan 2022 10:22:50 +0100 [thread overview]
Message-ID: <9dcdd3f9-f0a4-f0b1-adf5-6b90de7c8c7d@redhat.com> (raw)
In-Reply-To: <000b01d802c9$c0396aa0$40ac3fe0$@emc.com.tw>
Hi,
On 1/6/22 07:50, Jingle.Wu wrote:
> Hi Hans/Dmitry:
>
> It is not OK to skip elan_enable_power() for all Elan touchpad controllers.
>
> I suggest to deal with this touchpad module ID as "quirk" case to support
> this special case.
There is nothing special / quirky about this, regulator enable imbalances
simply must not happen / must be fixed.
I'll prepare a new version of the patch which adds a parameter to
elan_enable_power() to skip the regulator enable if the regulator
was not disabled on suspend.
This will allow still always calling elan_enable_power() on resume,
while also fixing the regulator imbalance.
Note that this will also help save power, the regulator imbalance
also means that the regulator will no longer get disabled _ever_
after the first suspend/resume cycle where device_may_wakeup()
returns true.
Regards,
Hans
> -----Original Message-----
> From: Dmitry Torokhov [mailto:dmitry.torokhov@gmail.com]
> Sent: Tuesday, January 4, 2022 8:30 AM
> To: Hans de Goede <hdegoede@redhat.com>
> Cc: Jingle Wu <jingle.wu@emc.com.tw>; linux-input@vger.kernel.org
> Subject: Re: [PATCH] Input: elan_i2c - Fix regulator enable count imbalance
> after suspend/resume
>
> Hi Hans,
>
> On Wed, Dec 22, 2021 at 11:06:41PM +0100, Hans de Goede wrote:
>> Before these changes elan_suspend() would only call
>> elan_disable_power() when device_may_wakeup() returns false; whereas
>> elan_resume() would unconditionally call elan_enable_power(), leading
>> to an enable count imbalance when device_may_wakeup() returns true.
>>
>> This triggers the "WARN_ON(regulator->enable_count)" in
>> regulator_put() when the elan_i2c driver gets unbound, this happens
>> e.g. with the hot-plugable dock with Elan I2C touchpad for the Asus TF103C
> 2-in-1.
>>
>> Fix this by making the elan_enable_power() call also be conditional on
>> device_may_wakeup() returning false.
>
> elan_enable_power() not only tries to toggle the regulator, but also tries
> to issue command to the controller to power/wake it up. I need confirmation
> from Jingle Wu that skipping this is OK for all Elan touchpad controllers,
> or if we need to add call to either power control or sleep control method to
> make sure the controller it fully resumed.
>
> Jingle, what can you tell us here?
>
>>
>> Signed-off-by: Hans de Goede <hdegoede@redhat.com>
>> ---
>> drivers/input/mouse/elan_i2c_core.c | 14 +++++++-------
>> 1 file changed, 7 insertions(+), 7 deletions(-)
>>
>> diff --git a/drivers/input/mouse/elan_i2c_core.c
>> b/drivers/input/mouse/elan_i2c_core.c
>> index 47af62c12267..cdb36d35ffa4 100644
>> --- a/drivers/input/mouse/elan_i2c_core.c
>> +++ b/drivers/input/mouse/elan_i2c_core.c
>> @@ -1412,17 +1412,17 @@ static int __maybe_unused elan_resume(struct
> device *dev)
>> struct elan_tp_data *data = i2c_get_clientdata(client);
>> int error;
>>
>> - if (device_may_wakeup(dev) && data->irq_wake) {
>> + if (!device_may_wakeup(dev)) {
>> + error = elan_enable_power(data);
>> + if (error) {
>> + dev_err(dev, "power up when resuming failed: %d\n",
> error);
>> + goto err;
>> + }
>> + } else if (data->irq_wake) {
>> disable_irq_wake(client->irq);
>> data->irq_wake = false;
>> }
>>
>> - error = elan_enable_power(data);
>> - if (error) {
>> - dev_err(dev, "power up when resuming failed: %d\n", error);
>> - goto err;
>> - }
>> -
>> error = elan_initialize(data, data->quirks &
> ETP_QUIRK_QUICK_WAKEUP);
>> if (error)
>> dev_err(dev, "initialize when resuming failed: %d\n",
> error);
>> --
>> 2.33.1
>>
>
> Thanks.
>
prev parent reply other threads:[~2022-01-06 9:22 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-12-22 22:06 [PATCH] Input: elan_i2c - Fix regulator enable count imbalance after suspend/resume Hans de Goede
2022-01-04 0:29 ` Dmitry Torokhov
2022-01-06 6:50 ` Jingle.Wu
2022-01-06 9:22 ` Hans de Goede [this message]
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=9dcdd3f9-f0a4-f0b1-adf5-6b90de7c8c7d@redhat.com \
--to=hdegoede@redhat.com \
--cc=dmitry.torokhov@gmail.com \
--cc=jingle.wu@emc.com.tw \
--cc=linux-input@vger.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 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).