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,