Re: psmouse doesn't seem to reinitialize after mem suspend (acpi) when using i8042 on ALi M1553 ISA bridge with 2.6.11.11 or 2.6.12-rc5?

From: Dmitry Torokhov (dtor_core_at_ameritech.net)
Date: 06/08/05

  • Next message: Nagendra Singh Tomar: "Re: Zeroed pages returned for heap"
    To: linux-kernel@vger.kernel.org, Adam Morley <adam.morley@gmail.com>
    Date:	Tue, 7 Jun 2005 22:52:39 -0500
    
    

    On Monday 06 June 2005 02:28, Adam Morley wrote:
    > Hi Dimitry,
    >
    > On 6/5/05, Dmitry Torokhov <dtor_core@ameritech.net> wrote:
    > > On Sunday 05 June 2005 21:24, Adam Morley wrote:
    > > > When I do a mem suspend (echo mem > /sys/power/state), either through
    > > > a lid switch ACPI action, or manually echo'ing the parameter, the
    > > > mouse doesn't work after un-suspending. It seems like it is no longer
    > > > detected/initialized. cat'ing the device file doesn't produce output,
    > > > and gpm and X don't get mouse inputs.
    > >
    > > Could you please try booting 2.6.12-rc5 with "i8042.debug" on the kernel
    > > command line; suspend, resume and post your dmesg?
    >
    > Sure. Here it is. Suspend was done using acpid using a lid action.
    > psmouse was modprobe -r'ed before suspend and modprobe'ed back in
    > after resume.
    >

    We are trying to resume but KBC signals timeout condition every time we
    ping AUX port:

    > drivers/input/serio/i8042.c: 60 -> i8042 (command) [220701]
    > drivers/input/serio/i8042.c: 47 -> i8042 (parameter) [220701]
    > drivers/input/serio/i8042.c: d4 -> i8042 (command) [220703]
    > drivers/input/serio/i8042.c: f2 -> i8042 (parameter) [220703]
    > drivers/input/serio/i8042.c: fe <- i8042 (interrupt, AUX, 12, timeout) [220725]
    > drivers/input/serio/i8042.c: d4 -> i8042 (command) [220726]
    > drivers/input/serio/i8042.c: ed -> i8042 (parameter) [220726]
    > drivers/input/serio/i8042.c: fe <- i8042 (interrupt, AUX, 12, timeout) [220747]
    > drivers/input/serio/i8042.c: 60 -> i8042 (command) [220748]
    > drivers/input/serio/i8042.c: 45 -> i8042 (parameter) [220748]
    > drivers/input/serio/i8042.c: 60 -> i8042 (command) [220943]
    > drivers/input/serio/i8042.c: 47 -> i8042 (parameter) [220943]
    > drivers/input/serio/i8042.c: d4 -> i8042 (command) [220943]
    > drivers/input/serio/i8042.c: f2 -> i8042 (parameter) [220943]
    > drivers/input/serio/i8042.c: fe <- i8042 (interrupt, AUX, 12, timeout) [220965]

    Could you please try the patch below?

    -- 
    Dmitry
    From: Vojtech Pavlik <vojtech@suse.cz>
    Input: Only write the CTR in i8042 resume function. Reading it is
           wrong, since it may (will) contain nonsensical data.
    Signed-off-by: Vojtech Pavlik <vojtech@suse.cz>
    Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
    ---
     drivers/input/serio/i8042.c |   48 +++++++++++++++++++++++++-------------------
     1 files changed, 28 insertions(+), 20 deletions(-)
    Index: work/drivers/input/serio/i8042.c
    ===================================================================
    --- work.orig/drivers/input/serio/i8042.c
    +++ work/drivers/input/serio/i8042.c
    @@ -698,6 +698,26 @@ static void i8042_timer_func(unsigned lo
     	i8042_interrupt(0, NULL, NULL);
     }
     
    +static int i8042_ctl_test(void)
    +{
    +	unsigned char param;
    +
    +	if (!i8042_reset)
    +		return 0;
    +
    +	if (i8042_command(&param, I8042_CMD_CTL_TEST)) {
    +		printk(KERN_ERR "i8042.c: i8042 controller self test timeout.\n");
    +		return -1;
    +	}
    +
    +	if (param != I8042_RET_CTL_TEST) {
    +		printk(KERN_ERR "i8042.c: i8042 controller selftest failed. (%#x != %#x)\n",
    +			 param, I8042_RET_CTL_TEST);
    +		return -1;
    +	}
    +
    +	return 0;
    +}
     
     /*
      * i8042_controller init initializes the i8042 controller, and,
    @@ -719,21 +739,8 @@ static int i8042_controller_init(void)
     		return -1;
     	}
     
    -	if (i8042_reset) {
    -
    -		unsigned char param;
    -
    -		if (i8042_command(&param, I8042_CMD_CTL_TEST)) {
    -			printk(KERN_ERR "i8042.c: i8042 controller self test timeout.\n");
    -			return -1;
    -		}
    -
    -		if (param != I8042_RET_CTL_TEST) {
    -			printk(KERN_ERR "i8042.c: i8042 controller selftest failed. (%#x != %#x)\n",
    -				 param, I8042_RET_CTL_TEST);
    -			return -1;
    -		}
    -	}
    +	if (i8042_ctl_test())
    +		return -1;
     
     /*
      * Save the CTR for restoral on unload / reboot.
    @@ -806,9 +813,7 @@ static void i8042_controller_reset(void)
      * Reset the controller if requested.
      */
     
    -	if (i8042_reset)
    -		if (i8042_command(&param, I8042_CMD_CTL_TEST))
    -			printk(KERN_ERR "i8042.c: i8042 controller reset timeout.\n");
    +	i8042_ctl_test();
     
     /*
      * Disable MUX mode if present.
    @@ -920,8 +925,11 @@ static int i8042_resume(struct device *d
     	if (level != RESUME_ENABLE)
     		return 0;
     
    -	if (i8042_controller_init()) {
    -		printk(KERN_ERR "i8042: resume failed\n");
    +	if (i8042_ctl_test())
    +		return -1;
    +
    +	if (i8042_command(&i8042_ctr, I8042_CMD_CTL_WCTR)) {
    +		printk(KERN_ERR "i8042: Can't write CTR\n");
     		return -1;
     	}
     
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at  http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at  http://www.tux.org/lkml/
    

  • Next message: Nagendra Singh Tomar: "Re: Zeroed pages returned for heap"

    Relevant Pages

    • Re: 2.6.0-test6: APM unable to suspend (the 2.6.0-test2 saga continues)
      ... >> the timer is deleted before suspend. ... Ok here we remove the timer. ... in the controller (like if the mouse sends a byte and the interface is ... send the line "unsubscribe linux-kernel" in ...
      (Linux-Kernel)
    • Re: 2.6 kernel wont reboot on AMD system - 8042 problem?
      ... > controller and have it keep going. ... 0x65 is what one would expect to be in the CTR register ... We _negate_ the value if the AUXDATA bit is ... send the line "unsubscribe linux-kernel" in ...
      (Linux-Kernel)
    • Re: 2.6.6-mm2, usb ehci warnings/error?
      ... One of the USB patches makes OHCI suspend ... it wrongly marks the controller itself (vs just the ... root hub part of it) as having suspended. ... send the line "unsubscribe linux-kernel" in ...
      (Linux-Kernel)
    • [patch 05/13] i8042: dont read CTR when resuming
      ... Only write the CTR in i8042 resume function. ... +static int i8042_ctl_test ... * Reset the controller if requested. ... send the line "unsubscribe linux-kernel" in ...
      (Linux-Kernel)
    • Re: 2.6.18-rc6-mm2
      ... If I suspend again the EHCI controller fails to suspend and the suspend is aborted. ... ACPI: bus type pci registered ... pnp: PnP ACPI init ...
      (Linux-Kernel)