Module Name:    src
Committed By:   nonaka
Date:           Sat Apr 24 21:21:28 UTC 2010

Modified Files:
        src/sys/arch/hpcarm/dev: wzero3_kbd.c

Log Message:
nuke sc_stable_count.


To generate a diff of this commit:
cvs rdiff -u -r1.1 -r1.2 src/sys/arch/hpcarm/dev/wzero3_kbd.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/hpcarm/dev/wzero3_kbd.c
diff -u src/sys/arch/hpcarm/dev/wzero3_kbd.c:1.1 src/sys/arch/hpcarm/dev/wzero3_kbd.c:1.2
--- src/sys/arch/hpcarm/dev/wzero3_kbd.c:1.1	Sat Apr 17 13:36:21 2010
+++ src/sys/arch/hpcarm/dev/wzero3_kbd.c	Sat Apr 24 21:21:28 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: wzero3_kbd.c,v 1.1 2010/04/17 13:36:21 nonaka Exp $	*/
+/*	$NetBSD: wzero3_kbd.c,v 1.2 2010/04/24 21:21:28 nonaka Exp $	*/
 
 /*
  * Copyright (c) 2008, 2009 NONAKA Kimihiro <non...@netbsd.org>
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: wzero3_kbd.c,v 1.1 2010/04/17 13:36:21 nonaka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: wzero3_kbd.c,v 1.2 2010/04/24 21:21:28 nonaka Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -107,9 +107,7 @@
 	/* polling stuff */
 	struct callout sc_keyscan_ch;
 	int sc_interval;
-	int sc_stable_count;
 #define	KEY_INTERVAL	50	/* ms */
-#define	STABLE_COUNT	2
 
 #if defined(KEYTEST) || defined(KEYTEST2) || defined(KEYTEST3) || defined(KEYTEST4) || defined(KEYTEST5)
 	void *sc_test_ih;
@@ -302,7 +300,6 @@
 
 	/* Install interrupt handler. */
 	if (sc->sc_key_pin >= 0) {
-		sc->sc_stable_count = 1;
 		pxa2x0_gpio_set_function(sc->sc_key_pin, GPIO_IN);
 		sc->sc_key_ih = pxa2x0_gpio_intr_establish(sc->sc_key_pin,
 		    IST_EDGE_BOTH, IPL_TTY, wzero3kbd_intr, sc);
@@ -311,7 +308,6 @@
 			    "couldn't establish key interrupt\n");
 		}
 	} else {
-		sc->sc_stable_count = STABLE_COUNT;
 		sc->sc_interval = KEY_INTERVAL / (1000 / hz);
 		if (sc->sc_interval < 1)
 			sc->sc_interval = 1;
@@ -668,6 +664,7 @@
 {
 	struct wzero3kbd_softc *sc = (struct wzero3kbd_softc *)arg;
 	int row, col, data;
+	int keycol;
 	int keydown;
 	int i;
 	int s;
@@ -688,13 +685,9 @@
 		CSR_WRITE1(KBDCHARGE, 0);
 
 		/* select scan column# */
-		if (col < 8) {
-			CSR_WRITE1(KBDCOL_L, 1U << col);
-			CSR_WRITE1(KBDCOL_U, 0);
-		} else {
-			CSR_WRITE1(KBDCOL_L, 0);
-			CSR_WRITE1(KBDCOL_U, 1U << (col - 8));
-		}
+		keycol = 1 >> col;
+		CSR_WRITE1(KBDCOL_L, keycol & 0xff);
+		CSR_WRITE1(KBDCOL_U, keycol >> 8);
 		delay(KEYWAIT);
 		CSR_WRITE1(KBDCHARGE, 0);
 
@@ -724,21 +717,12 @@
 	/* send key scan code */
 	keydown = 0;
 	for (i = 0; i < sc->sc_nrow * sc->sc_ncolumn; i++) {
-		uint8_t keystat = sc->sc_keystat[i];
-		keydown |= keystat;
-		if (keystat == 0) {
-			if (sc->sc_okeystat[i] != 0) {
-				/* key release */
-				hpckbd_input(sc->sc_hpckbd, 0, i);
-				sc->sc_okeystat[i] = 0;
-			}
-		} else {
-			if (++sc->sc_okeystat[i] >= sc->sc_stable_count) {
-				/* key press */
-				hpckbd_input(sc->sc_hpckbd, 1, i);
-				sc->sc_okeystat[i] = sc->sc_stable_count;
-			}
-		}
+		if (sc->sc_keystat[i] == sc->sc_okeystat[i])
+			continue;
+
+		keydown |= sc->sc_keystat[i];
+		hpckbd_input(sc->sc_hpckbd, sc->sc_keystat[i], i);
+		sc->sc_okeystat[i] = sc->sc_keystat[i];
 	}
 
 	splx(s);

Reply via email to