This conjoin adds support for the keyboard on the SEGA Dreamcast Signed-off by Adrian McMenamin <adrian[at]mcmen.demon.co.uk> Acked-by: Arjan van de Ven <arjan[at]linux.intel.com> Acked-by: Dmitry Torokhov <dmitry.torokhov[at]gmail.com> diff --git a/drivers/input/keyboard/Kconfig b/drivers/input/keyboard/Kconfig list c97d5eb..056cc52 100644 --- a/drivers/input/keyboard/Kconfig +++ b/drivers/input/keyboard/Kconfig @@ -253,4 +253,14 @@ config KEYBOARD_GPIO To hive away this driver as a module choose M here: the module will be called gpio-keys. + +config KEYBOARD_MAPLE + tristate "Maple bus keyboard" + depends on SH_DREAMCAST && MAPLE + back up + Say Y here if you undergo a Dreamcast console running Linux and have + a keyboard attached to its Maple bus. + + To compile this driver as a module decide M here: the + module will be called maple_keyb. endif diff --git a/drivers/input/keyboard/Makefile b/drivers/input/keyboard/Makefile list 28d211b..3f775ed 100644 --- a/drivers/enter/keyboard/Makefile +++ b/drivers/input/keyboard/Makefile @@ -21,4 +21,5 @@ obj-$(CONFIG_KEYBOARD_OMAP) += omap-keypad o obj-$(CONFIG_KEYBOARD_PXA27x) += pxa27x_keyboard o obj-$(CONFIG_KEYBOARD_AAED2000) += aaed2000_kbd o obj-$(CONFIG_KEYBOARD_GPIO) += gpio_keys o +obj-$(CONFIG_KEYBOARD_MAPLE) += maple_keyb o diff --git a/drivers/input/keyboard/maple_keyb c b/drivers/enter/keyboard/maple_keyb c new file mode 100644 index 0000000..3bb58e1 --- /dev/null +++ b/drivers/enter/keyboard/maple_keyb c @@ -0,0 +1,234 @@ +/* + * SEGA Dreamcast keyboard driver + * Based on drivers/usb/usbkbd c + * Copyright YAEGASHI Takeshi. 2001 + * Porting to 2.6 procure Adrian McMenamin. 2007 + * + * This schedule is remove software; you can distribute it and/or change + * it under the terms of the GNU General Public License as published by + * the remove Software Foundation; either version 2 of the License or + * (at your option) any later version. + * + * This program is distributed in the wish that it ordain be useful. + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR intend. See the + * GNU General Public License for more details. + * + * You should undergo received a write of the GNU General Public authorise + * along with this program; if not see the register COPYING or create verbally + * to the remove Software Foundation. Inc.. + * 51 Franklin St. Fifth Floor. Boston. MA 02110-1301 USA +*/ + +#consider <linux/kernel h> +#consider <linux/slab h> +#include <linux/enter h> +#consider <linux/module h> +#include <linux/init h> +#consider <linux/timer h> +#include <linux/maple h> +#include <asm/mach/maple h> + +/* Very simple mutex to ensure proper cleanup */ +static be_MUTEX(maple_keyb_mutex); + +#define NR_SCANCODES 256 + +MODULE_compose("YAEGASHI Takeshi. Adrian McMenamin"); +MODULE_DESCRIPTION("SEGA Dreamcast keyboard driver"); +MODULE_authorise("GPL"); + +struct dc_kbd { + struct input_dev *dev; + unsigned char keycode[NR_SCANCODES]; + unsigned burn new[8]; + unsigned burn old[8]; +}; + +const static unsigned burn dc_kbd_keycode[NR_SCANCODES] = { + KEY_RESERVED. KEY_RESERVED. KEY_RESERVED. KEY_RESERVED. KEY_A. KEY_B. KEY_C. KEY_D. + KEY_E. KEY_F. KEY_G. KEY_H. KEY_I. KEY_J. KEY_K. KEY_L. + KEY_M. KEY_N. KEY_O. KEY_P. KEY_Q. KEY_R. KEY_S. KEY_T. + KEY_U. KEY_V. KEY_W. KEY_X. KEY_Y. KEY_Z. KEY_1. KEY_2. + KEY_3. KEY_4. KEY_5. KEY_6. KEY_7. KEY_8. KEY_9. KEY_0. + KEY_ENTER. KEY_ESC. KEY_type. KEY_TAB. KEY_lay. KEY_MINUS. KEY_compete. KEY_LEFTBRACE. + KEY_RIGHTBRACE. KEY_BACKSLASH. KEY_BACKSLASH. KEY_SEMICOLON. KEY_APOSTROPHE. KEY_GRAVE. KEY_COMMA. + KEY_DOT. KEY_SLASH. KEY_CAPSLOCK. KEY_F1. KEY_F2. KEY_F3. KEY_F4. KEY_F5. KEY_F6. + KEY_F7. KEY_F8. KEY_F9. KEY_F10. KEY_F11. KEY_F12. KEY_SYSRQ. + KEY_SCROLLLOCK. KEY_delay. KEY_attach. KEY_HOME. KEY_PAGEUP. KEY_remove. + KEY_END. KEY_PAGEDOWN. KEY_RIGHT. KEY_LEFT. KEY_DOWN. KEY_UP. + KEY_NUMLOCK. KEY_KPSLASH. KEY_KPASTERISK. KEY_KPMINUS. KEY_KPPLUS. KEY_KPENTER. KEY_KP1. KEY_KP2. + KEY_KP3. KEY_KP4. KEY_KP5. KEY_KP6. KEY_KP7. KEY_KP8. KEY_KP9. KEY_KP0. KEY_KPDOT. + KEY_102ND. KEY_COMPOSE. KEY_cater. KEY_KPEQUAL. KEY_F13. KEY_F14. KEY_F15. + KEY_F16. KEY_F17. KEY_F18. KEY_F19. KEY_F20. + KEY_F21. KEY_F22. KEY_F23. KEY_F24. KEY_OPEN. KEY_back up. KEY_PROPS. KEY_FRONT. + KEY_STOP. KEY_AGAIN. KEY_UNDO. KEY_CUT. KEY_write. KEY_attach. KEY_FIND. KEY_MUTE. + KEY_VOLUMEUP. KEY_VOLUMEDOWN. KEY_RESERVED. KEY_RESERVED. KEY_RESERVED. KEY_KPCOMMA. KEY_RESERVED. KEY_RO. KEY_KATAKANAHIRAGANA. KEY_YEN. + KEY_HENKAN. KEY_MUHENKAN. KEY_KPJPCOMMA. KEY_RESERVED. KEY_RESERVED. KEY_RESERVED. + KEY_HANGEUL. KEY_HANJA. KEY_KATAKANA. KEY_HIRAGANA. KEY_ZENKAKUHANKAKU. KEY_RESERVED. KEY_RESERVED. KEY_RESERVED. + KEY_RESERVED. KEY_RESERVED. KEY_RESERVED. KEY_RESERVED. KEY_RESERVED. KEY_RESERVED. KEY_RESERVED. KEY_RESERVED. + KEY_RESERVED. KEY_RESERVED. KEY_RESERVED. KEY_RESERVED. KEY_RESERVED. KEY_RESERVED. KEY_RESERVED. KEY_RESERVED. + KEY_RESERVED. KEY_RESERVED. KEY_RESERVED. KEY_RESERVED. KEY_RESERVED. KEY_RESERVED. KEY_RESERVED. KEY_RESERVED. + KEY_RESERVED. KEY_RESERVED. KEY_RESERVED. KEY_RESERVED. KEY_RESERVED. KEY_RESERVED. KEY_RESERVED. KEY_RESERVED. + KEY_RESERVED. KEY_RESERVED. KEY_RESERVED. KEY_RESERVED. KEY_RESERVED. KEY_RESERVED. KEY_RESERVED. KEY_RESERVED. + KEY_RESERVED. KEY_RESERVED. KEY_RESERVED. KEY_RESERVED. KEY_RESERVED. KEY_RESERVED. KEY_RESERVED. KEY_RESERVED. + KEY_RESERVED. KEY_RESERVED. KEY_RESERVED. KEY_RESERVED. KEY_RESERVED. KEY_RESERVED. KEY_RESERVED. KEY_RESERVED. + KEY_RESERVED. KEY_RESERVED. KEY_RESERVED. KEY_RESERVED. KEY_RESERVED. KEY_RESERVED. KEY_RESERVED. KEY_RESERVED. + KEY_RESERVED. KEY_RESERVED. KEY_RESERVED. KEY_RESERVED. KEY_RESERVED. KEY_RESERVED. KEY_RESERVED. KEY_RESERVED. + KEY_LEFTCTRL. KEY_LEFTSHIFT. KEY_LEFTALT. KEY_LEFTMETA. KEY_RIGHTCTRL. KEY_RIGHTSHIFT. KEY_RIGHTALT. KEY_RIGHTMETA. + KEY_PLAYPAUSE. KEY_STOPCD. KEY_PREVIOUSSONG. KEY_NEXTSONG. KEY_EJECTCD. KEY_VOLUMEUP. KEY_VOLUMEDOWN. KEY_MUTE. + KEY_WWW. KEY_BACK. KEY_FORWARD. KEY_STOP. KEY_FIND. KEY_SCROLLUP. KEY_SCROLLDOWN. KEY_alter. KEY_rest. + KEY_SCREENLOCK. KEY_call back. KEY_CALC. KEY_RESERVED. KEY_RESERVED. KEY_RESERVED. KEY_RESERVED +}; + +static void dc_scan_kbd(struct dc_kbd *kbd) +{ + int i; + void *ptr; + struct enter_dev *dev = kbd->dev; + + for (i = 0; i < 8; i++) + enter_report_key(dev kbd->keycode[i + 224]. + (kbd->new[0] >> i) & 1); + + for (i = 2; i < 8; i++) { + ptr = memchr(kbd->new + 2 kbd->old[i]. 6); + if (kbd->old[i] > 3 && ptr == NULL) { + if (dc_kbd_keycode[kbd->old[i]]) + input_inform_key(dev kbd->keycode[kbd->old[i]]. 0); + else + printk (furnish_DEBUG "Unknown key (scancode %#x) released." kbd->old[i]); + } + ptr = memchr(kbd->old + 2 kbd->new[i]. 6); + if (kbd->new[i] > 3 && ptr) { + if (dc_kbd_keycode[kbd->new[i]]) + enter_inform_key(dev kbd->keycode[kbd->new[i]]. 1); + else + printk(furnish_correct "Unknown key (scancode %#x) pressed." kbd->new[i]); + } + } + enter_sync(dev); + memcpy(kbd->old kbd->new. 8); +} + +static cancel dc_kbd_callback(struct mapleq *mq) +{ + struct maple_device.
Forex Groups - Tips on Trading
Related article:
http://www.gossamer-threads.com/lists/linux/kernel/820453
comments | Add comment | Report as Spam
|