avionic design with actual uboot and tooling
submodule of avionic design uboot bootloader and with included tools to get you started , read readme.md and readme-tk1-loader.md
This commit is contained in:
87
u-boot/drivers/input/keyboard.c
Normal file
87
u-boot/drivers/input/keyboard.c
Normal file
@@ -0,0 +1,87 @@
|
||||
/***********************************************************************
|
||||
*
|
||||
* (C) Copyright 2004
|
||||
* DENX Software Engineering
|
||||
* Wolfgang Denk, wd@denx.de
|
||||
*
|
||||
* Keyboard driver
|
||||
*
|
||||
***********************************************************************/
|
||||
|
||||
#include <common.h>
|
||||
#include <console.h>
|
||||
#include <input.h>
|
||||
|
||||
#include <stdio_dev.h>
|
||||
#include <keyboard.h>
|
||||
#include <stdio_dev.h>
|
||||
|
||||
static struct input_config config;
|
||||
|
||||
static int kbd_read_keys(struct input_config *config)
|
||||
{
|
||||
#if defined(CONFIG_MPC5xxx) || defined(CONFIG_MPC8540) || \
|
||||
defined(CONFIG_MPC8541) || defined(CONFIG_MPC8555)
|
||||
/* no ISR is used, so received chars must be polled */
|
||||
ps2ser_check();
|
||||
#endif
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int check_leds(int ret)
|
||||
{
|
||||
int leds;
|
||||
|
||||
leds = input_leds_changed(&config);
|
||||
if (leds >= 0)
|
||||
pckbd_leds(leds);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* test if a character is in the queue */
|
||||
static int kbd_testc(struct stdio_dev *dev)
|
||||
{
|
||||
return check_leds(input_tstc(&config));
|
||||
}
|
||||
|
||||
/* gets the character from the queue */
|
||||
static int kbd_getc(struct stdio_dev *dev)
|
||||
{
|
||||
return check_leds(input_getc(&config));
|
||||
}
|
||||
|
||||
void handle_scancode(unsigned char scan_code)
|
||||
{
|
||||
bool release = false;
|
||||
|
||||
/* Compare with i8042_kbd_check() in i8042.c if some logic is missing */
|
||||
if (scan_code & 0x80) {
|
||||
scan_code &= 0x7f;
|
||||
release = true;
|
||||
}
|
||||
|
||||
input_add_keycode(&config, scan_code, release);
|
||||
}
|
||||
|
||||
/* TODO: convert to driver model */
|
||||
int kbd_init (void)
|
||||
{
|
||||
struct stdio_dev kbddev;
|
||||
struct input_config *input = &config;
|
||||
|
||||
if(kbd_init_hw()==-1)
|
||||
return -1;
|
||||
memset (&kbddev, 0, sizeof(kbddev));
|
||||
strcpy(kbddev.name, "kbd");
|
||||
kbddev.flags = DEV_FLAGS_INPUT;
|
||||
kbddev.getc = kbd_getc;
|
||||
kbddev.tstc = kbd_testc;
|
||||
|
||||
input_init(input, 0);
|
||||
input->read_keys = kbd_read_keys;
|
||||
input_add_tables(input, true);
|
||||
|
||||
return input_stdio_register(&kbddev);
|
||||
}
|
||||
Reference in New Issue
Block a user