--- /dev/null Tue May 5 22:32:27 1998 +++ work/drivers/char/kbd_7110.c Tue Oct 26 20:20:57 1999 [ ... Other includes ... ] +#include [ Lots of hardware-specific things ... ] + + +#if defined(CONFIG_VT) && defined(CONFIG_MAGIC_SYSRQ) +extern int sysrq_pressed; +#endif + + +void kbd7110_arch_handler(unsigned char value, char up_flag) +{ +#if defined(CONFIG_VT) && defined(CONFIG_MAGIC_SYSRQ) + if (value == 1) { + sysrq_pressed = !up_flag; + return; + } +#endif + if (up_flag) return; + switch (value) { +#ifdef KBD_ARCHKEY_2 + case 2: + KBD_ARCHKEY_2; + break; +#endif +#ifdef KBD_ARCHKEY_3 + case 3: + KBD_ARCHKEY_3; + break; +#endif +#ifdef KBD_ARCHKEY_4 + case 4: + KBD_ARCHKEY_4; + break; +#endif +#ifdef KBD_ARCHKEY_5 + case 5: + KBD_ARCHKEY_5; + break; +#endif +#ifdef KBD_ARCHKEY_6 + case 6: + KBD_ARCHKEY_6; + break; +#endif +#ifdef KBD_ARCHKEY_7 + case 7: + KBD_ARCHKEY_7; + break; +#endif +#ifdef KBD_ARCHKEY_8 + case 8: + KBD_ARCHKEY_8; + break; +#endif +#ifdef KBD_ARCHKEY_9 + case 9: + KBD_ARCHKEY_9; + break; +#endif +#ifdef KBD_ARCHKEY_10 + case 10: + KBD_ARCHKEY_10; + break; +#endif +#ifdef KBD_ARCHKEY_11 + case 11: + KBD_ARCHKEY_11; + break; +#endif + default: + return; + } +} --- ref/drivers/char/keyboard.c Tue Oct 12 19:05:53 1999 +++ work/drivers/char/keyboard.c Tue Oct 26 23:13:17 1999 @@ -108,12 +111,12 @@ static k_handfn do_self, do_fn, do_spec, do_pad, do_dead, do_cons, do_cur, do_shift, do_meta, do_ascii, do_lock, do_lowercase, do_slock, do_dead2, - do_ignore; + do_ignore, do_arch; static k_hand key_handler[16] = { do_self, do_fn, do_spec, do_pad, do_dead, do_cons, do_cur, do_shift, do_meta, do_ascii, do_lock, do_lowercase, do_slock, do_dead2, - do_ignore, do_ignore + do_ignore, do_arch }; /* Key types processed even in raw modes */ @@ -155,7 +158,7 @@ struct pt_regs * kbd_pt_regs; #ifdef CONFIG_MAGIC_SYSRQ -static int sysrq_pressed; +/*static*/ int sysrq_pressed; int sysrq_enabled = 1; #endif @@ -515,6 +518,13 @@ static void do_null() { compute_shiftstate(); +} + +static void do_arch(unsigned char value, char up_flag) +{ +#ifdef kbd_arch_handler + kbd_arch_handler(value,up_flag); +#endif } static void do_spec(unsigned char value, char up_flag) --- /dev/null Tue May 5 22:32:27 1998 +++ work/drivers/char/keymap_psion.map Tue Oct 26 20:20:57 1999 @@ -0,0 +1,233 @@ +# arch/arm/drivers/char/keymap_psion.map - UK (default) keyboard map +# [ ... boring stuff ... ] +altgr keycode 58 = Find # Home + keycode 59 = comma slash +control alt keycode 59 = 0xf01 # SysRq + keycode 60 = Up Scroll_Forward +altgr keycode 60 = Next + keycode 61 = space +altgr keycode 61 = 0xf03 # Backlight + keycode 62 = F14 # STOP + keycode 63 = SShift [...] --- /dev/null Tue May 5 22:32:27 1998 +++ work/include/asm-arm/arch-clps7110/kbd_psion.h Tue Oct 26 20:21:15 1999 @@ -0,0 +1,87 @@ +/* + * include/asm-arm/arch-clps7110/kbd_psion.h + * + * Psion specific defines for it's keyboard. + * + * Copyright (C) Roger Gammans 1998 + */ + + +#ifndef __ASM_ARCH_PSION_H +#define __ASM_ARCH_PSION_H + +#include +#include + + /* + * Arm's keyboard is active high row select... + * (must try to remember) + */ +#define KB_ALLCOLS KBSC_HI +#define KB_DISCHARGE KBSC_LO +#define KB_LASTROW 7 + + /* + * Be sure to change the if you increase the + * number of kbd rows... + */ +#define KEYCODE(r,c) ( ((c)<<3) + (r)+1) +#define NR_KEYCODES 64 + +#define KB_ROWMASK(r) (1 << (r)) + + /* + * KB_DELAY is used to allow the matrix + * to stabilize.., value is determined via + * experimentation. + */ + +#define KB_DELAY {16 ,16 ,16 ,16 ,16 ,16 ,16 ,16 ,16} + + /* + * Not sure whether this trick works yet! + * + */ +#undef KBD_SUPPORTS_WIREOR + + + /* + * treat debounce monostable as 30ms + */ + +#define KB_DEB_JIFFY (30/HZ) + + /* + * only read from + */ +#define KB_ROW (IO_PADR & 0x7f) + + /* + * only written to + */ +#define KB_COL(n) IO_SYSCON = ((IO_SYSCON & ~KBDSCAN) | (KBSC_COL0+n)) + + +/* + * Architecture-specific keys. Value 0 is invalid. 1 is SysRq. + */ + +#define KBD_ARCHKEY_2 psion_off() +#define KBD_ARCHKEY_3 psion_toggle_backlight() +#define KBD_ARCHKEY_4 psion_contrast(0) +#define KBD_ARCHKEY_5 psion_contrast(1) + +/* KBD_ARCHKEY_6 to KBD_ARCHKEY_11 reserved for debugging */ + +#define KBD_ARCHKEY_6 psion_debug_power_led() /* Ctrl-Alt-Z */ + +/* #define KBD_ARCHKEY_11 psion_debug_cf() */ + +void psion_off(void); +void psion_toggle_backlight(void); +void psion_contrast(int increase); + +void psion_debug_power_led(void); +void psion_debug_cf(void); + +#endif --- /dev/null Tue May 5 22:32:27 1998 +++ work/include/asm-arm/arch-clps7110/keyboard.h Tue Oct 26 20:21:15 1999 @@ -0,0 +1,108 @@ +/* + * include/asm-arm/arch-clps7110/keyboard.h + * + * Part of the clps7110 keyboard driver. + * + * Copyright (C) Roger Gammans 1998 + * + */ + + +#ifndef __ASM_ARCH_KEYBOARD_H +#define __ASM_ARCH_KEYBOARD_H + +#include +#include + +#ifdef CONFIG_ARCH_GEOFOX +#include +#else +#ifdef CONFIG_ARCH_PSION +#include +#else +#error Unknown Architecture +#endif +#endif +/* + *#warning Keymaps for this architecture haven't been completed yet + */ [ ... lots of hardware-specific stuff ... ] +extern unsigned char kbd7110_sysrq_xlate[NR_KEYCODES]; +#define kbd_sysrq_xlate ((sysrq_pressed = 0), kbd7110_sysrq_xlate) +#define kbd_pretranslate(x,y) (1) +#define kbd_unexpected_up(kc) (0x80) +#define kbd_setkeycode(sc,kc) (-EINVAL) +#define kbd_getkeycode(sc) (-EINVAL) + +extern void kbd7110_arch_handler(unsigned char value, char up_flag); +#define kbd_arch_handler kbd7110_arch_handler + + +#define SYSRQ_KEY 0x100 /* dummy */ +