keyboard
#include <linux/keyboard.h> /* defines KG_* macros */
sc->keyboard.rows = info.rows;
sc->keyboard.cols = info.cols;
sc->keyboard.switches = info.switches;
sc->keyboard.state = (uint8_t *)malloc(info.rows*info.cols,
if (sc->keyboard.state == NULL)
sc->keyboard.taskq = taskq_create("crosec-keyb", 1, IPL_TTY, 0);
task_set(&sc->keyboard.task, cros_ec_poll_keystate, sc);
timeout_set(&sc->keyboard.timeout, cros_ec_add_task, sc);
sc->keyboard.wskbddev = config_found((void *)sc, &a, wskbddevprint);
timeout_add_sec(&sc->keyboard.timeout, 10);
task_add(sc->keyboard.taskq, &sc->keyboard.task);
timeout_add_msec(&sc->keyboard.timeout, 100);
uint8_t state[sc->keyboard.cols];
cros_ec_scan_keyboard(sc, state, sc->keyboard.cols);
for (col = 0; col < sc->keyboard.cols; col++) {
for (row = 0; row < sc->keyboard.rows; row++) {
int off = row*sc->keyboard.cols;
if (pressed && !sc->keyboard.state[off+col]) {
sc->keyboard.state[off+col] = 1;
if (sc->keyboard.polling)
wskbd_input(sc->keyboard.wskbddev, WSCONS_EVENT_KEY_DOWN, off+col);
} else if (!pressed && sc->keyboard.state[off+col]) {
sc->keyboard.state[off+col] = 0;
if (sc->keyboard.polling)
wskbd_input(sc->keyboard.wskbddev, WSCONS_EVENT_KEY_UP, off+col);
} else if (sc->keyboard.state[off+col]) {
sc->keyboard.polling = 1;
sc->keyboard.polling = 0;
*type = sc->keyboard.state[key] ? WSCONS_EVENT_KEY_UP : WSCONS_EVENT_KEY_DOWN;
sc->keyboard.rawkbd = *(int *)data == WSKBD_RAW;
} keyboard;
set_keyboard(keyboard)
struct device_path *keyboard;
*keyboard = keyboards[i].dp;
struct device_path keyboard;
keyboard = sstor.ss_keyboard;
if (set_keyboard(&keyboard)) {
if (memcmp(&sstor.ss_keyboard, &keyboard,
sizeof keyboard) != 0) {
sstor.ss_keyboard = keyboard;
c = keyboard[val];
unsigned char keyboard[128] = {
keyboard();