Merge branch 'master' of git://www.denx.de/git/u-boot-imx
[oweals/u-boot.git] / include / keyboard.h
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 */