On 04/10/16 23:33, Mike Larkin wrote:
Please test this diff on all machines that you can successfully (today)
resume with 'zzz'. Please make sure that after resume, the keyboard
still works.

This diff re-enables the keyboard on resume. Previously, we were re-enabling
the keyboard *controller* but apparently on some machines (notably the HP
4530s) the keyboard itself resumes in 'disabled' state and requires a
re-enable.

Keyboards are finicky, and this diff requires widespread testing before it
can go in, to ensure no regressions. Please let me know if you have keyboard
issues after resume.

Thanks.

-ml

Index: dev/pckbc/pckbd.c
===================================================================
RCS file: /cvs/src/sys/dev/pckbc/pckbd.c,v
retrieving revision 1.42
diff -u -p -a -u -r1.42 pckbd.c
--- dev/pckbc/pckbd.c   4 May 2015 09:33:46 -0000       1.42
+++ dev/pckbc/pckbd.c   11 Apr 2016 06:24:06 -0000
@@ -123,13 +123,14 @@ static int pckbd_is_console(pckbc_tag_t,

  int pckbdprobe(struct device *, void *, void *);
  void pckbdattach(struct device *, struct device *, void *);
+int pckbdactivate(struct device *, int);

  struct cfattach pckbd_ca = {
        sizeof(struct pckbd_softc),
        pckbdprobe,
        pckbdattach,
        NULL,
-       NULL
+       pckbdactivate
  };

  int   pckbd_enable(void *, int);
@@ -181,6 +182,29 @@ static int pckbd_decode(struct pckbd_int
  static int    pckbd_led_encode(int);

  struct pckbd_internal pckbd_consdata;
+
+int
+pckbdactivate(struct device *self, int act)
+{
+       struct pckbd_softc *sc = (struct pckbd_softc *)self;
+       int rv = 0;
+       u_char cmd[1];
+
+       switch(act) {
+       case DVACT_RESUME:      
+               /*
+                * Some keyboards are not enabled after a reset,
+                * so make sure it is enabled now.
+                */
+               cmd[0] = KBC_ENABLE;
+               (void) pckbc_poll_cmd(sc->id->t_kbctag, sc->id->t_kbcslot,
+                   cmd, 1, 0, NULL, 0);
+               rv = config_activate_children(self, act);
+               break;
+       }
+
+       return (rv);
+}

  int
  pckbd_set_xtscancode(pckbc_tag_t kbctag, pckbc_slot_t kbcslot,


I have an HP 9480m that suffers from the "keyboard broken after resume" problem. This patch seems to fix it! The attached USB keyboard still functions normally.

Thanks!

Reply via email to