xref: /OK3568_Linux_fs/u-boot/include/keyboard.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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