kbd-jazz.c
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:2k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. /* $Id: kbd-jazz.c,v 1.1 1998/10/28 12:38:10 ralf Exp $
  2.  *
  3.  * Low-level hardware access stuff for Jazz family machines.
  4.  *
  5.  * This file is subject to the terms and conditions of the GNU General Public
  6.  * License.  See the file "COPYING" in the main directory of this archive
  7.  * for more details.
  8.  *
  9.  * Copyright (C) 1995, 1996, 1997, 1998 by Ralf Baechle
  10.  */
  11. #include <linux/sched.h>
  12. #include <linux/pc_keyb.h>
  13. #include <asm/keyboard.h>
  14. #include <asm/jazz.h>
  15. #define jazz_kh ((keyboard_hardware *) JAZZ_KEYBOARD_ADDRESS)
  16. static void jazz_request_region(void)
  17. {
  18. /* No I/O ports are being used on Jazz.  */
  19. }
  20. static int jazz_request_irq(void (*handler)(int, void *, struct pt_regs *))
  21. {
  22. int res;
  23. res = request_irq(JAZZ_KEYBOARD_IRQ, handler, 0, "keyboard", NULL);
  24. if (res != 0)
  25. return res;
  26. /* jazz_request_irq() should do this ...  */
  27. r4030_write_reg16(JAZZ_IO_IRQ_ENABLE,
  28.                   r4030_read_reg16(JAZZ_IO_IRQ_ENABLE)
  29.                   | JAZZ_IE_KEYBOARD);
  30. return 0;
  31. }
  32. static int jazz_aux_request_irq(void (*handler)(int, void *, struct pt_regs *))
  33. {
  34. int ret;
  35.     
  36. ret = request_irq(JAZZ_MOUSE_IRQ, handler, 0, "PS/2 Mouse", NULL);
  37. if (ret != 0)
  38. return ret;
  39. r4030_write_reg16(JAZZ_IO_IRQ_ENABLE, 
  40.   r4030_read_reg16(JAZZ_IO_IRQ_ENABLE) | 
  41.   JAZZ_IE_MOUSE);
  42. return 0;
  43. }
  44. static void jazz_aux_free_irq(void)
  45. {
  46. r4030_write_reg16(JAZZ_IO_IRQ_ENABLE, 
  47.                   r4030_read_reg16(JAZZ_IO_IRQ_ENABLE)
  48.                   | JAZZ_IE_MOUSE);
  49. free_irq(JAZZ_MOUSE_IRQ, NULL);
  50. }
  51. static unsigned char jazz_read_input(void)
  52. {
  53. return jazz_kh->data;
  54. }
  55. static void jazz_write_output(unsigned char val)
  56. {
  57. int status;
  58. do {
  59. status = jazz_kh->command;
  60. } while (status & KBD_STAT_IBF);
  61. jazz_kh->data = val;
  62. }
  63. static void jazz_write_command(unsigned char val)
  64. {
  65. int status;
  66. do {
  67. status = jazz_kh->command;
  68. } while (status & KBD_STAT_IBF);
  69. jazz_kh->command = val;
  70. }
  71. static unsigned char jazz_read_status(void)
  72. {
  73. return jazz_kh->command;
  74. }
  75. struct kbd_ops jazz_kbd_ops = {
  76. jazz_request_region,
  77. jazz_request_irq,
  78. jazz_aux_request_irq,
  79. jazz_aux_free_irq,
  80. jazz_read_input,
  81. jazz_write_output,
  82. jazz_write_command,
  83. jazz_read_status
  84. };