staticvoid __init amikbd_init_console_keymaps(void)
{ /* We can spare 512 bytes on stack for temp_map in init path. */ unsignedshort temp_map[NR_KEYS]; int i, j;
for (i = 0; i < MAX_NR_KEYMAPS; i++) { if (!key_maps[i]) continue;
memset(temp_map, 0, sizeof(temp_map)); for (j = 0; j < 0x78; j++) { if (!amikbd_keycode[j]) continue;
temp_map[j] = key_maps[i][amikbd_keycode[j]];
} for (j = 0; j < NR_KEYS; j++) { if (!temp_map[j])
temp_map[j] = 0xf200;
}
memcpy(key_maps[i], temp_map, sizeof(temp_map));
}
} #else/* !CONFIG_VT */ staticinlinevoid amikbd_init_console_keymaps(void) {} #endif/* !CONFIG_VT */
scancode = ~ciaa.sdr; /* get and invert scancode (keyboard is active low) */
ciaa.cra |= 0x40; /* switch SP pin to output for handshake */
udelay(85); /* wait until 85 us have expired */
ciaa.cra &= ~0x40; /* switch CIA serial port to input mode */
down = !(scancode & 1); /* lowest bit is release bit */
scancode >>= 1;
if (scancode < 0x78) { /* scancodes < 0x78 are keys */ if (scancode == 98) { /* CapsLock is a toggle switch key on Amiga */
input_report_key(dev, scancode, 1);
input_report_key(dev, scancode, 0);
} else {
input_report_key(dev, scancode, down);
}
for (i = 0; i < 0x78; i++)
set_bit(i, dev->keybit);
amikbd_init_console_keymaps();
ciaa.cra &= ~0x41; /* serial data in, turn off TA */
err = devm_request_irq(&pdev->dev, IRQ_AMIGA_CIAA_SP, amikbd_interrupt,
0, "amikbd", dev); if (err) return err;
err = input_register_device(dev); if (err) return err;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.