11c43771bSwdenk #ifndef __KEYBOARD_H 21c43771bSwdenk #define __KEYBOARD_H 31c43771bSwdenk 4e84421d8SSimon Glass #ifdef CONFIG_DM_KEYBOARD 5e84421d8SSimon Glass #include <input.h> 6e84421d8SSimon Glass #include <stdio_dev.h> 7e84421d8SSimon Glass 8e84421d8SSimon Glass /** 9e84421d8SSimon Glass * struct keyboard_priv - information about a keyboard, for the uclass 10e84421d8SSimon Glass * 11e84421d8SSimon Glass * @sdev: stdio device 12e84421d8SSimon Glass * @input: input configuration (the driver may use this if desired) 13e84421d8SSimon Glass */ 14e84421d8SSimon Glass struct keyboard_priv { 15e84421d8SSimon Glass struct stdio_dev sdev; 16e84421d8SSimon Glass 17e84421d8SSimon Glass /* 18e84421d8SSimon Glass * This is set up by the uclass but will only be used if the driver 19e84421d8SSimon Glass * sets input.dev to its device pointer (it is initially NULL). 20e84421d8SSimon Glass */ 21e84421d8SSimon Glass struct input_config input; 22e84421d8SSimon Glass }; 23e84421d8SSimon Glass 24e84421d8SSimon Glass /** 25e84421d8SSimon Glass * struct keyboard_ops - keyboard device operations 26e84421d8SSimon Glass */ 27e84421d8SSimon Glass struct keyboard_ops { 28e84421d8SSimon Glass /** 29e84421d8SSimon Glass * start() - enable the keyboard ready for use 30e84421d8SSimon Glass * 31e84421d8SSimon Glass * @dev: Device to enable 32e84421d8SSimon Glass * @return 0 if OK, -ve on error 33e84421d8SSimon Glass */ 34e84421d8SSimon Glass int (*start)(struct udevice *dev); 35e84421d8SSimon Glass 36e84421d8SSimon Glass /** 37e84421d8SSimon Glass * stop() - disable the keyboard when no-longer needed 38e84421d8SSimon Glass * 39e84421d8SSimon Glass * @dev: Device to disable 40e84421d8SSimon Glass * @return 0 if OK, -ve on error 41e84421d8SSimon Glass */ 42e84421d8SSimon Glass int (*stop)(struct udevice *dev); 43e84421d8SSimon Glass 44e84421d8SSimon Glass /** 45e84421d8SSimon Glass * tstc() - check if a key is available 46e84421d8SSimon Glass * 47e84421d8SSimon Glass * @dev: Device to check 48e84421d8SSimon Glass * @return 0 if no key is available, 1 if a key is available, -ve on 49e84421d8SSimon Glass * error 50e84421d8SSimon Glass */ 51e84421d8SSimon Glass int (*tstc)(struct udevice *dev); 52e84421d8SSimon Glass 53e84421d8SSimon Glass /** 54e84421d8SSimon Glass * getc() - get a key 55e84421d8SSimon Glass * 56e84421d8SSimon Glass * TODO(sjg@chromium.org): At present this method may wait if it calls 57e84421d8SSimon Glass * input_getc(). 58e84421d8SSimon Glass * 59e84421d8SSimon Glass * @dev: Device to read from 60e84421d8SSimon Glass * @return -EAGAIN if no key is available, otherwise key value read 61e84421d8SSimon Glass * (as ASCII). 62e84421d8SSimon Glass */ 63e84421d8SSimon Glass int (*getc)(struct udevice *dev); 64e84421d8SSimon Glass 65e84421d8SSimon Glass /** 66e84421d8SSimon Glass * update_leds() - update keyboard LEDs 67e84421d8SSimon Glass * 68e84421d8SSimon Glass * This is called when the LEDs have changed and need to be updated. 69e84421d8SSimon Glass * For example, if 'caps lock' is pressed then this method will be 70e84421d8SSimon Glass * called with the new LED value. 71e84421d8SSimon Glass * 72e84421d8SSimon Glass * @dev: Device to update 73e84421d8SSimon Glass * @leds: New LED mask (see INPUT_LED_... in input.h) 74e84421d8SSimon Glass */ 75e84421d8SSimon Glass int (*update_leds)(struct udevice *dev, int leds); 76e84421d8SSimon Glass }; 77e84421d8SSimon Glass 78e84421d8SSimon Glass #define keyboard_get_ops(dev) ((struct keyboard_ops *)(dev)->driver->ops) 79e84421d8SSimon Glass 80e84421d8SSimon Glass #else 81e84421d8SSimon Glass 821c43771bSwdenk #ifdef CONFIG_PS2MULT 831c43771bSwdenk #include <ps2mult.h> 841c43771bSwdenk #endif 851c43771bSwdenk 861c43771bSwdenk #if !defined(kbd_request_region) || \ 871c43771bSwdenk !defined(kbd_request_irq) || \ 881c43771bSwdenk !defined(kbd_read_input) || \ 891c43771bSwdenk !defined(kbd_read_status) || \ 901c43771bSwdenk !defined(kbd_write_output) || \ 911c43771bSwdenk !defined(kbd_write_command) 921c43771bSwdenk #error PS/2 low level routines not defined 931c43771bSwdenk #endif 941c43771bSwdenk 951c43771bSwdenk extern int kbd_init (void); 961c43771bSwdenk extern void handle_scancode(unsigned char scancode); 971c43771bSwdenk extern int kbd_init_hw(void); 981c43771bSwdenk extern void pckbd_leds(unsigned char leds); 99e84421d8SSimon Glass #endif /* !CONFIG_DM_KEYBOARD */ 1001c43771bSwdenk 101064b55cfSHeiko Schocher #if defined(CONFIG_ARCH_MPC8540) || \ 1023c3d8ab5SYork Sun defined(CONFIG_ARCH_MPC8541) || defined(CONFIG_ARCH_MPC8555) 10391f81545SSimon Glass int ps2ser_check(void); 10491f81545SSimon Glass #endif 10591f81545SSimon Glass 106*0f5aec88SJoseph Chen #ifdef CONFIG_USB_KEYBOARD 107*0f5aec88SJoseph Chen /** 108*0f5aec88SJoseph Chen * Check if usb keyboard receive F1~F12. 109*0f5aec88SJoseph Chen * 110*0f5aec88SJoseph Chen * @key_fn: KEY_F1, KEY_F2, KEY_F3, .... KEY_F12. (defined in input.h) 111*0f5aec88SJoseph Chen * 112*0f5aec88SJoseph Chen * return 1 if received, otherwise 0. 113*0f5aec88SJoseph Chen */ 114*0f5aec88SJoseph Chen extern int usb_kbd_recv_fn(int key_fn); 115*0f5aec88SJoseph Chen #endif 116*0f5aec88SJoseph Chen 1171c43771bSwdenk #endif /* __KEYBOARD_H */ 118