xref: /openbmc/u-boot/include/keyboard.h (revision 3ebd892f)
1 #ifndef __KEYBOARD_H
2 #define __KEYBOARD_H
3 
4 #include <input.h>
5 #include <stdio_dev.h>
6 
7 /**
8  * struct keyboard_priv - information about a keyboard, for the uclass
9  *
10  * @sdev:	stdio device
11  * @input:	input configuration (the driver may use this if desired)
12  */
13 struct keyboard_priv {
14 	struct stdio_dev sdev;
15 
16 	/*
17 	 * This is set up by the uclass but will only be used if the driver
18 	 * sets input.dev to its device pointer (it is initially NULL).
19 	 */
20 	struct input_config input;
21 };
22 
23 /**
24  * struct keyboard_ops - keyboard device operations
25  */
26 struct keyboard_ops {
27 	/**
28 	 * start() - enable the keyboard ready for use
29 	 *
30 	 * @dev:	Device to enable
31 	 * @return 0 if OK, -ve on error
32 	 */
33 	int (*start)(struct udevice *dev);
34 
35 	/**
36 	 * stop() - disable the keyboard when no-longer needed
37 	 *
38 	 * @dev:	Device to disable
39 	 * @return 0 if OK, -ve on error
40 	 */
41 	int (*stop)(struct udevice *dev);
42 
43 	/**
44 	 * tstc() - check if a key is available
45 	 *
46 	 * @dev:	Device to check
47 	 * @return 0 if no key is available, 1 if a key is available, -ve on
48 	 *	   error
49 	 */
50 	int (*tstc)(struct udevice *dev);
51 
52 	/**
53 	 * getc() - get a key
54 	 *
55 	 * TODO(sjg@chromium.org): At present this method may wait if it calls
56 	 * input_getc().
57 	 *
58 	 * @dev:	Device to read from
59 	 * @return -EAGAIN if no key is available, otherwise key value read
60 	 *	   (as ASCII).
61 	 */
62 	int (*getc)(struct udevice *dev);
63 
64 	/**
65 	 * update_leds() - update keyboard LEDs
66 	 *
67 	 * This is called when the LEDs have changed and need to be updated.
68 	 * For example, if 'caps lock' is pressed then this method will be
69 	 * called with the new LED value.
70 	 *
71 	 * @dev:	Device to update
72 	 * @leds:	New LED mask (see INPUT_LED_... in input.h)
73 	 */
74 	int (*update_leds)(struct udevice *dev, int leds);
75 };
76 
77 #define keyboard_get_ops(dev)	((struct keyboard_ops *)(dev)->driver->ops)
78 
79 #endif /* __KEYBOARD_H */
80