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