Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 1 | /* |
| 2 | * Commands to the keyboard processor |
| 3 | */ |
| 4 | |
| 5 | #define LK_PARAM 0x80 /* start/end parameter list */ |
| 6 | |
| 7 | #define LK_CMD_RESUME 0x8b /* resume transmission to the host */ |
| 8 | #define LK_CMD_INHIBIT 0x89 /* stop transmission to the host */ |
| 9 | #define LK_CMD_LEDS_ON 0x13 /* light LEDs */ |
| 10 | /* 1st param: led bitmask */ |
| 11 | #define LK_CMD_LEDS_OFF 0x11 /* turn off LEDs */ |
| 12 | /* 1st param: led bitmask */ |
| 13 | #define LK_CMD_DIS_KEYCLK 0x99 /* disable the keyclick */ |
| 14 | #define LK_CMD_ENB_KEYCLK 0x1b /* enable the keyclick */ |
| 15 | /* 1st param: volume */ |
| 16 | #define LK_CMD_DIS_CTLCLK 0xb9 /* disable the Ctrl keyclick */ |
| 17 | #define LK_CMD_ENB_CTLCLK 0xbb /* enable the Ctrl keyclick */ |
| 18 | #define LK_CMD_SOUND_CLK 0x9f /* emit a keyclick */ |
| 19 | #define LK_CMD_DIS_BELL 0xa1 /* disable the bell */ |
| 20 | #define LK_CMD_ENB_BELL 0x23 /* enable the bell */ |
| 21 | /* 1st param: volume */ |
| 22 | #define LK_CMD_BELL 0xa7 /* emit a bell */ |
| 23 | #define LK_CMD_TMP_NORPT 0xd1 /* disable typematic */ |
| 24 | /* for the currently pressed key */ |
| 25 | #define LK_CMD_ENB_RPT 0xe3 /* enable typematic */ |
| 26 | /* for RPT_DOWN groups */ |
| 27 | #define LK_CMD_DIS_RPT 0xe1 /* disable typematic */ |
| 28 | /* for RPT_DOWN groups */ |
| 29 | #define LK_CMD_RPT_TO_DOWN 0xd9 /* set RPT_DOWN groups to DOWN */ |
| 30 | #define LK_CMD_REQ_ID 0xab /* request the keyboard ID */ |
| 31 | #define LK_CMD_POWER_UP 0xfd /* init power-up sequence */ |
| 32 | #define LK_CMD_TEST_MODE 0xcb /* enter the factory test mode */ |
| 33 | #define LK_CMD_TEST_EXIT 0x80 /* exit the factory test mode */ |
| 34 | #define LK_CMD_SET_DEFAULTS 0xd3 /* set power-up defaults */ |
| 35 | |
| 36 | #define LK_CMD_MODE(m,div) (LK_PARAM|(((div)&0xf)<<3)|(((m)&0x3)<<1)) |
| 37 | /* select the repeat mode */ |
| 38 | /* for the selected key group */ |
| 39 | #define LK_CMD_MODE_AR(m,div) ((((div)&0xf)<<3)|(((m)&0x3)<<1)) |
| 40 | /* select the repeat mode */ |
| 41 | /* and the repeat register */ |
| 42 | /* for the selected key group */ |
| 43 | /* 1st param: register number */ |
| 44 | #define LK_CMD_RPT_RATE(r) (0x78|(((r)&0x3)<<1)) |
| 45 | /* set the delay and repeat rate */ |
| 46 | /* for the selected repeat register */ |
| 47 | /* 1st param: initial delay */ |
| 48 | /* 2nd param: repeat rate */ |
| 49 | |
| 50 | /* there are 4 leds, represent them in the low 4 bits of a byte */ |
| 51 | #define LK_PARAM_LED_MASK(ledbmap) (LK_PARAM|((ledbmap)&0xf)) |
| 52 | #define LK_LED_WAIT 0x1 /* Wait LED */ |
| 53 | #define LK_LED_COMP 0x2 /* Compose LED */ |
| 54 | #define LK_LED_LOCK 0x4 /* Lock LED */ |
| 55 | #define LK_LED_HOLD 0x8 /* Hold Screen LED */ |
| 56 | |
| 57 | /* max volume is 0, lowest is 0x7 */ |
| 58 | #define LK_PARAM_VOLUME(v) (LK_PARAM|((v)&0x7)) |
| 59 | |
| 60 | /* mode set command details, div is a key group number */ |
| 61 | #define LK_MODE_DOWN 0x0 /* make only */ |
| 62 | #define LK_MODE_RPT_DOWN 0x1 /* make and typematic */ |
| 63 | #define LK_MODE_DOWN_UP 0x3 /* make and release */ |
| 64 | |
| 65 | /* there are 4 repeat registers */ |
| 66 | #define LK_PARAM_AR(r) (LK_PARAM|((v)&0x3)) |
| 67 | |
| 68 | /* |
| 69 | * Mappings between key groups and keycodes are as follows: |
| 70 | * |
| 71 | * 1: 0xbf - 0xff -- alphanumeric, |
| 72 | * 2: 0x91 - 0xa5 -- numeric keypad, |
| 73 | * 3: 0xbc -- Backspace, |
| 74 | * 4: 0xbd - 0xbe -- Tab, Return, |
| 75 | * 5: 0xb0 - 0xb2 -- Lock, Compose Character, |
| 76 | * 6: 0xad - 0xaf -- Ctrl, Shift, |
| 77 | * 7: 0xa6 - 0xa8 -- Left Arrow, Right Arrow, |
| 78 | * 8: 0xa9 - 0xac -- Up Arrow, Down Arrow, Right Shift, |
| 79 | * 9: 0x88 - 0x90 -- editor keypad, |
| 80 | * 10: 0x56 - 0x62 -- F1 - F5, |
| 81 | * 11: 0x63 - 0x6e -- F6 - F10, |
| 82 | * 12: 0x6f - 0x7a -- F11 - F14, |
| 83 | * 13: 0x7b - 0x7d -- Help, Do, |
| 84 | * 14: 0x7e - 0x87 -- F17 - F20. |
| 85 | * |
| 86 | * Notes: |
| 87 | * 1. Codes in the 0x00 - 0x40 range are reserved. |
| 88 | * 2. The assignment of the 0x41 - 0x55 range is undiscovered, probably 10. |
| 89 | */ |
| 90 | |
| 91 | /* delay is 5 - 630 ms; 0x00 and 0x7f are reserved */ |
| 92 | #define LK_PARAM_DELAY(t) ((t)&0x7f) |
| 93 | |
| 94 | /* rate is 12 - 127 Hz; 0x00 - 0x0b and 0x7d (power-up!) are reserved */ |
| 95 | #define LK_PARAM_RATE(r) (LK_PARAM|((r)&0x7f)) |
| 96 | |
| 97 | #define LK_SHIFT 1<<0 |
| 98 | #define LK_CTRL 1<<1 |
| 99 | #define LK_LOCK 1<<2 |
| 100 | #define LK_COMP 1<<3 |
| 101 | |
| 102 | #define LK_KEY_SHIFT 0xae |
| 103 | #define LK_KEY_CTRL 0xaf |
| 104 | #define LK_KEY_LOCK 0xb0 |
| 105 | #define LK_KEY_COMP 0xb1 |
| 106 | |
| 107 | #define LK_KEY_RELEASE 0xb3 /* all keys released */ |
| 108 | #define LK_KEY_REPEAT 0xb4 /* repeat the last key */ |
| 109 | |
| 110 | /* status responses */ |
| 111 | #define LK_STAT_RESUME_ERR 0xb5 /* keystrokes lost while inhibited */ |
| 112 | #define LK_STAT_ERROR 0xb6 /* an invalid command received */ |
| 113 | #define LK_STAT_INHIBIT_ACK 0xb7 /* transmission inhibited */ |
| 114 | #define LK_STAT_TEST_ACK 0xb8 /* the factory test mode entered */ |
| 115 | #define LK_STAT_MODE_KEYDOWN 0xb9 /* a key is down on a change */ |
| 116 | /* to the DOWN_UP mode; */ |
| 117 | /* the keycode follows */ |
| 118 | #define LK_STAT_MODE_ACK 0xba /* the mode command succeeded */ |
| 119 | |
| 120 | #define LK_STAT_PWRUP_ID 0x01 /* the power-up response start mark */ |
| 121 | #define LK_STAT_PWRUP_OK 0x00 /* the power-up self test OK */ |
| 122 | #define LK_STAT_PWRUP_KDOWN 0x3d /* a key was down during the test */ |
| 123 | #define LK_STAT_PWRUP_ERROR 0x3e /* keyboard self test failure */ |
| 124 | |
| 125 | extern unsigned char scancodeRemap[256]; |