public inbox for linux-acpi@vger.kernel.org
 help / color / mirror / Atom feed
From: Brian Perkins <bperkins-ooduxAEi7gVg9hUCZPvPmw@public.gmane.org>
To: Karol Kozimor <sziwan-DETuoxkZsSqrDJvtcaxF/A@public.gmane.org>
Cc: Pavel Machek <pavel-+ZI9xUNit7I@public.gmane.org>,
	acpi-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org
Subject: Re: trackpoint dead after S3 suspend
Date: Sun, 23 Nov 2003 02:13:27 -0500	[thread overview]
Message-ID: <3FC05E17.1010208@netspace.org> (raw)
In-Reply-To: <20031119145809.GA14399-DETuoxkZsSqrDJvtcaxF/A@public.gmane.org>

Karol Kozimor wrote:

>Thus wrote Pavel Machek:
>  
>
>>Its actually input problem. This might help, (untested!).
>>    
>>
>
>This actually makes my keyboard *not* work after any suspend, including the
>previously-OK S1. Your last patch was better for my system, it seems.
>Best regards,
>
>  
>
I tried a very naive hack, which gets a step closer to fixing things.
I essentially copied i8042_init to the resume function.  It's terribly 
ugly, and incorrect in a myriad of ways, but the mouse is responding.  
Unfortunately it appears that the mouse is still not generating 
interrupts, so the mouse response is slow and jerky.
I fooled around quite a bit, but wasn't able to do any better than this.

Probably not very helpful, but I thought I pass this on.


===== i8042.c 1.32 vs 1.34 =====
--- 1.32/drivers/input/serio/i8042.c    Fri Sep 26 02:56:26 2003
+++ 1.34/drivers/input/serio/i8042.c    Sun Nov 23 01:33:42 2003
@@ -18,6 +18,7 @@
 #include <linux/reboot.h>
 #include <linux/init.h>
 #include <linux/serio.h>
+#include <linux/sysdev.h>
 
 #include <asm/io.h>
 
@@ -398,18 +399,15 @@
  * desired.
  */
    
-static int __init i8042_controller_init(void)
+static int i8042_controller_init(void)
 {
-
 /*
  * Test the i8042. We need to know if it thinks it's working correctly
  * before doing anything else.
  */
 
     i8042_flush();
-
     if (i8042_reset) {
-
         unsigned char param;
 
         if (i8042_command(&param, I8042_CMD_CTL_TEST)) {
@@ -683,7 +681,7 @@
 static int __init i8042_port_register(struct i8042_values *values, 
struct serio *port)
 {
     values->exists = 1;
-
+   
     i8042_ctr &= ~values->disable;
 
     if (i8042_command(&i8042_ctr, I8042_CMD_CTL_WCTR)) {
@@ -783,6 +781,83 @@
     values->mux = index;
 }
 
+static int i8042_resume_port(struct serio *port)
+{
+    struct serio_dev *dev = port->dev;
+    if (dev) {
+#if 1
+        dev->disconnect(port);
+        dev->connect(port, dev);
+#endif
+        serio_close(port);
+        serio_open(port, dev);
+        serio_rescan(port);  
+    }   
+}
+
+static int i8042_resume(struct sys_device *dev)
+{
+    if (i8042_controller_init())
+        printk(KERN_ERR "i8042: resume failed\n");
+    i8042_resume_port(&i8042_aux_port);
+    i8042_resume_port(&i8042_kbd_port);
+    return 0;
+}
+
+static int i8042_resume2(struct sys_device *dev)
+{
+
+  int i;
+  printk(KERN_ERR "i8042_resume2 line:%d\n",__LINE__);
+
+    if (i8042_platform_init())
+        return -EBUSY;
+  printk(KERN_ERR "i8042_resume2 line:%d\n",__LINE__);
+    i8042_aux_values.irq = I8042_AUX_IRQ;
+    i8042_kbd_values.irq = I8042_KBD_IRQ;
+  printk(KERN_ERR "i8042_resume2 line:%d\n",__LINE__);
+    if (i8042_controller_init())
+        return -ENODEV;
+  printk(KERN_ERR "i8042_resume2 line:%d\n",__LINE__);
+    if (i8042_dumbkbd)
+        i8042_kbd_port.write = NULL;
+  printk(KERN_ERR "i8042_resume2 line:%d\n",__LINE__);
+
+    for (i = 0; i < 4; i++)
+        i8042_init_mux_values(i8042_mux_values + i, i8042_mux_port + i, i);
+
+    if (!i8042_nomux && !i8042_check_mux(&i8042_aux_values))
+        for (i = 0; i < 4; i++)
+            i8042_port_register(i8042_mux_values + i, i8042_mux_port + i);
+    else
+        if (!i8042_noaux && !i8042_check_aux(&i8042_aux_values))
+            i8042_port_register(&i8042_aux_values, &i8042_aux_port);
+
+    i8042_port_register(&i8042_kbd_values, &i8042_kbd_port);
+    init_timer(&i8042_timer);
+  printk(KERN_ERR "i8042_resume2 line:%d\n",__LINE__);
+    i8042_timer.function = i8042_timer_func;
+  printk(KERN_ERR "i8042_resume2 line:%d\n",__LINE__);
+    mod_timer(&i8042_timer, jiffies + I8042_POLL_PERIOD);
+  printk(KERN_ERR "i8042_resume2 line:%d\n",__LINE__);
+
+    i8042_resume_port(&i8042_aux_port);
+    i8042_resume_port(&i8042_kbd_port);
+
+
+    return 0;
+}
+
+static struct sysdev_class kbc_sysclass = {
+    set_kset_name("i8042"),
+    .resume = i8042_resume2,
+};
+
+static struct sys_device device_i8042 = {
+    .id    = 0,
+    .cls    = &kbc_sysclass,
+};
+
 int __init i8042_init(void)
 {
     int i;
@@ -818,6 +893,14 @@
     mod_timer(&i8042_timer, jiffies + I8042_POLL_PERIOD);
 
     register_reboot_notifier(&i8042_notifier);
+
+    {
+        int error = sysdev_class_register(&kbc_sysclass);
+        if (!error)
+            error = sys_device_register(&device_i8042);
+        if (error)
+            printk(KERN_CRIT "Unable to register i8042 to driver model\n");
+    }
 
     return 0;
 }




-------------------------------------------------------
This SF.net email is sponsored by: SF.net Giveback Program.
Does SourceForge.net help you be more productive?  Does it
help you create better code?  SHARE THE LOVE, and help us help
YOU!  Click Here: http://sourceforge.net/donate/

  parent reply	other threads:[~2003-11-23  7:13 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-11-13 17:05 trackpoint dead after S3 suspend Brian Perkins
     [not found] ` <3FB3B9D0.5020408-ooduxAEi7gVg9hUCZPvPmw@public.gmane.org>
2003-11-13 18:12   ` Karol Kozimor
2003-11-16 22:53   ` Pavel Machek
     [not found]     ` <20031116225331.GA206-I/5MKhXcvmPrBKCeMvbIDA@public.gmane.org>
2003-11-19 14:58       ` Karol Kozimor
     [not found]         ` <20031119145809.GA14399-DETuoxkZsSqrDJvtcaxF/A@public.gmane.org>
2003-11-19 19:08           ` Pavel Machek
2003-11-23  7:13           ` Brian Perkins [this message]
     [not found]             ` <3FC05E17.1010208-ooduxAEi7gVg9hUCZPvPmw@public.gmane.org>
2003-11-23 10:32               ` Pavel Machek
     [not found]                 ` <3FC1A754.5080209@netspace.org>
     [not found]                   ` <3FC1A754.5080209-ooduxAEi7gVg9hUCZPvPmw@public.gmane.org>
2003-11-24  9:54                     ` Pavel Machek

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=3FC05E17.1010208@netspace.org \
    --to=bperkins-ooduxaei7gvg9huczpvpmw@public.gmane.org \
    --cc=acpi-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org \
    --cc=pavel-+ZI9xUNit7I@public.gmane.org \
    --cc=sziwan-DETuoxkZsSqrDJvtcaxF/A@public.gmane.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