xref: /rk3399_rockchip-uboot/include/keyboard.h (revision 0f5aec880039a54d480495a8952509e8d4f319ee)
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