1 #ifndef __KEYBOARD_H 2 #define __KEYBOARD_H 3 4 #ifdef CONFIG_DM_KEYBOARD 5 #include <input.h> 6 #include <stdio_dev.h> 7 8 /** 9 * struct keyboard_priv - information about a keyboard, for the uclass 10 * 11 * @sdev: stdio device 12 * @input: input configuration (the driver may use this if desired) 13 */ 14 struct keyboard_priv { 15 struct stdio_dev sdev; 16 17 /* 18 * This is set up by the uclass but will only be used if the driver 19 * sets input.dev to its device pointer (it is initially NULL). 20 */ 21 struct input_config input; 22 }; 23 24 /** 25 * struct keyboard_ops - keyboard device operations 26 */ 27 struct keyboard_ops { 28 /** 29 * start() - enable the keyboard ready for use 30 * 31 * @dev: Device to enable 32 * @return 0 if OK, -ve on error 33 */ 34 int (*start)(struct udevice *dev); 35 36 /** 37 * stop() - disable the keyboard when no-longer needed 38 * 39 * @dev: Device to disable 40 * @return 0 if OK, -ve on error 41 */ 42 int (*stop)(struct udevice *dev); 43 44 /** 45 * tstc() - check if a key is available 46 * 47 * @dev: Device to check 48 * @return 0 if no key is available, 1 if a key is available, -ve on 49 * error 50 */ 51 int (*tstc)(struct udevice *dev); 52 53 /** 54 * getc() - get a key 55 * 56 * TODO(sjg@chromium.org): At present this method may wait if it calls 57 * input_getc(). 58 * 59 * @dev: Device to read from 60 * @return -EAGAIN if no key is available, otherwise key value read 61 * (as ASCII). 62 */ 63 int (*getc)(struct udevice *dev); 64 65 /** 66 * update_leds() - update keyboard LEDs 67 * 68 * This is called when the LEDs have changed and need to be updated. 69 * For example, if 'caps lock' is pressed then this method will be 70 * called with the new LED value. 71 * 72 * @dev: Device to update 73 * @leds: New LED mask (see INPUT_LED_... in input.h) 74 */ 75 int (*update_leds)(struct udevice *dev, int leds); 76 }; 77 78 #define keyboard_get_ops(dev) ((struct keyboard_ops *)(dev)->driver->ops) 79 80 #else 81 82 #ifdef CONFIG_PS2MULT 83 #include <ps2mult.h> 84 #endif 85 86 #if !defined(kbd_request_region) || \ 87 !defined(kbd_request_irq) || \ 88 !defined(kbd_read_input) || \ 89 !defined(kbd_read_status) || \ 90 !defined(kbd_write_output) || \ 91 !defined(kbd_write_command) 92 #error PS/2 low level routines not defined 93 #endif 94 95 extern int kbd_init (void); 96 extern void handle_scancode(unsigned char scancode); 97 extern int kbd_init_hw(void); 98 extern void pckbd_leds(unsigned char leds); 99 #endif /* !CONFIG_DM_KEYBOARD */ 100 101 #if defined(CONFIG_MPC5xxx) || defined(CONFIG_ARCH_MPC8540) || \ 102 defined(CONFIG_ARCH_MPC8541) || defined(CONFIG_ARCH_MPC8555) 103 int ps2ser_check(void); 104 #endif 105 106 #endif /* __KEYBOARD_H */ 107