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