u-boot/include/keyboard.h
Simon Glass 91f815450f input: Convert 'keyboard' driver to use input library
This has duplicated scan code tables and logic. We can use the input
library to implement most of the features here.

This needs testing. The only supported board appears to be TQM5200.
Unfortunately no maintainer is listed for this board.

Signed-off-by: Simon Glass <sjg@chromium.org>
2015-11-19 20:13:41 -07:00

107 lines
2.5 KiB
C

#ifndef __KEYBOARD_H
#define __KEYBOARD_H
#ifdef CONFIG_DM_KEYBOARD
#include <input.h>
#include <stdio_dev.h>
/**
* struct keyboard_priv - information about a keyboard, for the uclass
*
* @sdev: stdio device
* @input: input configuration (the driver may use this if desired)
*/
struct keyboard_priv {
struct stdio_dev sdev;
/*
* This is set up by the uclass but will only be used if the driver
* sets input.dev to its device pointer (it is initially NULL).
*/
struct input_config input;
};
/**
* struct keyboard_ops - keyboard device operations
*/
struct keyboard_ops {
/**
* start() - enable the keyboard ready for use
*
* @dev: Device to enable
* @return 0 if OK, -ve on error
*/
int (*start)(struct udevice *dev);
/**
* stop() - disable the keyboard when no-longer needed
*
* @dev: Device to disable
* @return 0 if OK, -ve on error
*/
int (*stop)(struct udevice *dev);
/**
* tstc() - check if a key is available
*
* @dev: Device to check
* @return 0 if no key is available, 1 if a key is available, -ve on
* error
*/
int (*tstc)(struct udevice *dev);
/**
* getc() - get a key
*
* TODO(sjg@chromium.org): At present this method may wait if it calls
* input_getc().
*
* @dev: Device to read from
* @return -EAGAIN if no key is available, otherwise key value read
* (as ASCII).
*/
int (*getc)(struct udevice *dev);
/**
* update_leds() - update keyboard LEDs
*
* This is called when the LEDs have changed and need to be updated.
* For example, if 'caps lock' is pressed then this method will be
* called with the new LED value.
*
* @dev: Device to update
* @leds: New LED mask (see INPUT_LED_... in input.h)
*/
int (*update_leds)(struct udevice *dev, int leds);
};
#define keyboard_get_ops(dev) ((struct keyboard_ops *)(dev)->driver->ops)
#else
#ifdef CONFIG_PS2MULT
#include <ps2mult.h>
#endif
#if !defined(kbd_request_region) || \
!defined(kbd_request_irq) || \
!defined(kbd_read_input) || \
!defined(kbd_read_status) || \
!defined(kbd_write_output) || \
!defined(kbd_write_command)
#error PS/2 low level routines not defined
#endif
extern int kbd_init (void);
extern void handle_scancode(unsigned char scancode);
extern int kbd_init_hw(void);
extern void pckbd_leds(unsigned char leds);
#endif /* !CONFIG_DM_KEYBOARD */
#if defined(CONFIG_MPC5xxx) || defined(CONFIG_MPC8540) || \
defined(CONFIG_MPC8541) || defined(CONFIG_MPC8555)
int ps2ser_check(void);
#endif
#endif /* __KEYBOARD_H */