linux-input.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Dmitry Torokhov <dmitry.torokhov@gmail.com>
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
Date: Mon, 3 Jan 2022 16:29:57 -0800	[thread overview]
Message-ID: <YdOVBVUVWnVkaLTZ@google.com> (raw)
In-Reply-To: <20211222220641.439863-1-hdegoede@redhat.com>

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.

-- 
Dmitry

  reply	other threads:[~2022-01-04  0:30 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 [this message]
2022-01-06  6:50   ` Jingle.Wu
2022-01-06  9:22     ` Hans de Goede

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=YdOVBVUVWnVkaLTZ@google.com \
    --to=dmitry.torokhov@gmail.com \
    --cc=hdegoede@redhat.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).