All of lore.kernel.org
 help / color / mirror / Atom feed
From: Hans de Goede <hdegoede@redhat.com>
To: Werner Sembach <wse@tuxedocomputers.com>, dmitry.torokhov@gmail.com
Cc: linux-input@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v4 1/2] i8042: Add forcenorestore quirk to leave controller untouched even on s3
Date: Fri, 5 Jan 2024 20:38:41 +0100	[thread overview]
Message-ID: <fdc70b33-bfc7-4674-8aa0-44faccc33dc6@redhat.com> (raw)
In-Reply-To: <20240104183118.779778-2-wse@tuxedocomputers.com>

Hi,

On 1/4/24 19:31, Werner Sembach wrote:
> On s3 resume the i8042 driver tries to restore the controller to a known
> state by reinitializing things, however this can confuse the controller
> with different effects. Mostly occasionally unresponsive keyboards after
> resume.
> 
> These issues do not rise on s0ix resume as here the controller is assumed
> to preserved its state from before suspend.
> 
> This patch adds a quirk for devices where the reinitialization on s3 resume
> is not needed and might be harmful as described above. It does this by
> using the s0ix resume code path at selected locations.
> 
> This new quirk goes beyond what the preexisting reset=never quirk does,
> which only skips some reinitialization steps.
> 
> Signed-off-by: Werner Sembach <wse@tuxedocomputers.com>
> Cc: stable@vger.kernel.org

Thanks, patch looks good to me:

Reviewed-by: Hans de Goede <hdegoede@redhat.com>

Regards,

Hans



> ---
>  drivers/input/serio/i8042-acpipnpio.h | 10 +++++++---
>  drivers/input/serio/i8042.c           | 10 +++++++---
>  2 files changed, 14 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/input/serio/i8042-acpipnpio.h b/drivers/input/serio/i8042-acpipnpio.h
> index b585b1dab870e..10ec4534e5e14 100644
> --- a/drivers/input/serio/i8042-acpipnpio.h
> +++ b/drivers/input/serio/i8042-acpipnpio.h
> @@ -83,6 +83,7 @@ static inline void i8042_write_command(int val)
>  #define SERIO_QUIRK_KBDRESET		BIT(12)
>  #define SERIO_QUIRK_DRITEK		BIT(13)
>  #define SERIO_QUIRK_NOPNP		BIT(14)
> +#define SERIO_QUIRK_FORCENORESTORE	BIT(15)
>  
>  /* Quirk table for different mainboards. Options similar or identical to i8042
>   * module parameters.
> @@ -1657,6 +1658,8 @@ static void __init i8042_check_quirks(void)
>  	if (quirks & SERIO_QUIRK_NOPNP)
>  		i8042_nopnp = true;
>  #endif
> +	if (quirks & SERIO_QUIRK_FORCENORESTORE)
> +		i8042_forcenorestore = true;
>  }
>  #else
>  static inline void i8042_check_quirks(void) {}
> @@ -1690,7 +1693,7 @@ static int __init i8042_platform_init(void)
>  
>  	i8042_check_quirks();
>  
> -	pr_debug("Active quirks (empty means none):%s%s%s%s%s%s%s%s%s%s%s%s%s\n",
> +	pr_debug("Active quirks (empty means none):%s%s%s%s%s%s%s%s%s%s%s%s%s%s\n",
>  		i8042_nokbd ? " nokbd" : "",
>  		i8042_noaux ? " noaux" : "",
>  		i8042_nomux ? " nomux" : "",
> @@ -1710,10 +1713,11 @@ static int __init i8042_platform_init(void)
>  		"",
>  #endif
>  #ifdef CONFIG_PNP
> -		i8042_nopnp ? " nopnp" : "");
> +		i8042_nopnp ? " nopnp" : "",
>  #else
> -		"");
> +		"",
>  #endif
> +		i8042_forcenorestore ? " forcenorestore" : "");
>  
>  	retval = i8042_pnp_init();
>  	if (retval)
> diff --git a/drivers/input/serio/i8042.c b/drivers/input/serio/i8042.c
> index 9fbb8d31575ae..2233d93f90e81 100644
> --- a/drivers/input/serio/i8042.c
> +++ b/drivers/input/serio/i8042.c
> @@ -115,6 +115,10 @@ module_param_named(nopnp, i8042_nopnp, bool, 0);
>  MODULE_PARM_DESC(nopnp, "Do not use PNP to detect controller settings");
>  #endif
>  
> +static bool i8042_forcenorestore;
> +module_param_named(forcenorestore, i8042_forcenorestore, bool, 0);
> +MODULE_PARM_DESC(forcenorestore, "Force no restore on s3 resume, copying s2idle behaviour");
> +
>  #define DEBUG
>  #ifdef DEBUG
>  static bool i8042_debug;
> @@ -1232,7 +1236,7 @@ static int i8042_pm_suspend(struct device *dev)
>  {
>  	int i;
>  
> -	if (pm_suspend_via_firmware())
> +	if (!i8042_forcenorestore && pm_suspend_via_firmware())
>  		i8042_controller_reset(true);
>  
>  	/* Set up serio interrupts for system wakeup. */
> @@ -1248,7 +1252,7 @@ static int i8042_pm_suspend(struct device *dev)
>  
>  static int i8042_pm_resume_noirq(struct device *dev)
>  {
> -	if (!pm_resume_via_firmware())
> +	if (i8042_forcenorestore || !pm_resume_via_firmware())
>  		i8042_interrupt(0, NULL);
>  
>  	return 0;
> @@ -1271,7 +1275,7 @@ static int i8042_pm_resume(struct device *dev)
>  	 * not restore the controller state to whatever it had been at boot
>  	 * time, so we do not need to do anything.
>  	 */
> -	if (!pm_suspend_via_firmware())
> +	if (i8042_forcenorestore || !pm_suspend_via_firmware())
>  		return 0;
>  
>  	/*


  reply	other threads:[~2024-01-05 19:38 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-01-04 18:31 [PATCH v4 0/2] i8042: Add forcenorestore quirk to leave controller Werner Sembach
2024-01-04 18:31 ` [PATCH v4 1/2] i8042: Add forcenorestore quirk to leave controller untouched even on s3 Werner Sembach
2024-01-05 19:38   ` Hans de Goede [this message]
2024-01-09 21:48   ` Dmitry Torokhov
2024-01-10 13:51     ` Werner Sembach
2024-01-04 18:31 ` [PATCH v4 2/2] i8042: Use new forcenorestore quirk to replace old buggy quirk combination Werner Sembach
2024-01-05 19:38   ` 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=fdc70b33-bfc7-4674-8aa0-44faccc33dc6@redhat.com \
    --to=hdegoede@redhat.com \
    --cc=dmitry.torokhov@gmail.com \
    --cc=linux-input@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=wse@tuxedocomputers.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.