Merge branch 'for-next/gpio-keys'
This commit is contained in:
commit
92ab6b5ea5
|
@ -56,11 +56,11 @@ static struct i2c_board_info i2c_devices[] = {
|
|||
};
|
||||
#if defined(CONFIG_KEYBOARD_TWL6030) && defined(CONFIG_KEYBOARD_GPIO)
|
||||
static struct twl6030_pwrbtn_platform_data pwrbtn_data = {
|
||||
.code = KEY_ENTER
|
||||
.code = BB_KEY_ENTER
|
||||
};
|
||||
static struct gpio_keys_button keys[] = {
|
||||
{ .code = KEY_UP , .gpio = 43, .active_low = 1 },
|
||||
{ .code = KEY_DOWN, .gpio = 44, .active_low = 1 },
|
||||
{ .code = BB_KEY_UP , .gpio = 43, .active_low = 1 },
|
||||
{ .code = BB_KEY_DOWN, .gpio = 44, .active_low = 1 },
|
||||
};
|
||||
static struct gpio_keys_platform_data gk_data = {
|
||||
.buttons = keys,
|
||||
|
|
|
@ -234,13 +234,13 @@ static void ek_add_device_lcdc(void) {}
|
|||
#ifdef CONFIG_KEYBOARD_GPIO
|
||||
struct gpio_keys_button keys[] = {
|
||||
{
|
||||
.code = KEY_UP,
|
||||
.code = BB_KEY_UP,
|
||||
.gpio = AT91_PIN_PA26,
|
||||
}, {
|
||||
.code = KEY_DOWN,
|
||||
.code = BB_KEY_DOWN,
|
||||
.gpio = AT91_PIN_PA25,
|
||||
}, {
|
||||
.code = KEY_ENTER,
|
||||
.code = BB_KEY_ENTER,
|
||||
.gpio = AT91_PIN_PA24,
|
||||
},
|
||||
};
|
||||
|
|
|
@ -182,25 +182,25 @@ static void ek_device_add_leds(void) {}
|
|||
#ifdef CONFIG_KEYBOARD_GPIO
|
||||
struct gpio_keys_button keys[] = {
|
||||
{
|
||||
.code = KEY_HOME,
|
||||
.code = BB_KEY_HOME,
|
||||
.gpio = AT91_PIN_PB6,
|
||||
}, {
|
||||
.code = KEY_RETURN,
|
||||
.code = BB_KEY_RETURN,
|
||||
.gpio = AT91_PIN_PB7,
|
||||
}, {
|
||||
.code = KEY_LEFT,
|
||||
.code = BB_KEY_LEFT,
|
||||
.gpio = AT91_PIN_PB14,
|
||||
}, {
|
||||
.code = KEY_RIGHT,
|
||||
.code = BB_KEY_RIGHT,
|
||||
.gpio = AT91_PIN_PB15,
|
||||
}, {
|
||||
.code = KEY_UP,
|
||||
.code = BB_KEY_UP,
|
||||
.gpio = AT91_PIN_PB16,
|
||||
}, {
|
||||
.code = KEY_DOWN,
|
||||
.code = BB_KEY_DOWN,
|
||||
.gpio = AT91_PIN_PB17,
|
||||
}, {
|
||||
.code = KEY_RETURN,
|
||||
.code = BB_KEY_RETURN,
|
||||
.gpio = AT91_PIN_PB18,
|
||||
},
|
||||
};
|
||||
|
|
|
@ -110,7 +110,7 @@ static void ek_add_device_mci(void) {}
|
|||
|
||||
struct qt1070_platform_data qt1070_pdata = {
|
||||
.irq_pin = AT91_PIN_PB19,
|
||||
.code = { KEY_ENTER, KEY_ENTER, KEY_UP, KEY_DOWN, },
|
||||
.code = { BB_KEY_ENTER, BB_KEY_ENTER, BB_KEY_UP, BB_KEY_DOWN, },
|
||||
.nb_code = 4,
|
||||
};
|
||||
|
||||
|
|
|
@ -339,16 +339,16 @@ struct gpio_led dab_mmx_leds[] = {
|
|||
#ifdef CONFIG_KEYBOARD_GPIO
|
||||
struct gpio_keys_button keys[] = {
|
||||
{
|
||||
.code = KEY_UP,
|
||||
.code = BB_KEY_UP,
|
||||
.gpio = AT91_PIN_PB25,
|
||||
}, {
|
||||
.code = KEY_HOME,
|
||||
.code = BB_KEY_HOME,
|
||||
.gpio = AT91_PIN_PB13,
|
||||
}, {
|
||||
.code = KEY_DOWN,
|
||||
.code = BB_KEY_DOWN,
|
||||
.gpio = AT91_PIN_PA26,
|
||||
}, {
|
||||
.code = KEY_ENTER,
|
||||
.code = BB_KEY_ENTER,
|
||||
.gpio = AT91_PIN_PC9,
|
||||
},
|
||||
};
|
||||
|
|
|
@ -456,7 +456,7 @@ static int do_edit(int argc, char *argv[])
|
|||
|
||||
c = read_key();
|
||||
switch (c) {
|
||||
case KEY_UP:
|
||||
case BB_KEY_UP:
|
||||
if (!curline->prev)
|
||||
continue;
|
||||
|
||||
|
@ -464,7 +464,7 @@ static int do_edit(int argc, char *argv[])
|
|||
cursy--;
|
||||
textx = setpos(curline->data, linepos);
|
||||
break;
|
||||
case KEY_DOWN:
|
||||
case BB_KEY_DOWN:
|
||||
if (!curline->next)
|
||||
continue;
|
||||
|
||||
|
@ -472,19 +472,19 @@ static int do_edit(int argc, char *argv[])
|
|||
cursy++;
|
||||
textx = setpos(curline->data, linepos);
|
||||
break;
|
||||
case KEY_RIGHT:
|
||||
case BB_KEY_RIGHT:
|
||||
textx++;
|
||||
break;
|
||||
case KEY_LEFT:
|
||||
case BB_KEY_LEFT:
|
||||
textx--;
|
||||
break;
|
||||
case KEY_HOME:
|
||||
case BB_KEY_HOME:
|
||||
textx = 0;
|
||||
break;
|
||||
case KEY_END:
|
||||
case BB_KEY_END:
|
||||
textx = curlen;
|
||||
break;
|
||||
case KEY_PAGEUP:
|
||||
case BB_KEY_PAGEUP:
|
||||
for (i = 0; i < screenheight - 1; i++) {
|
||||
if (!curline->prev)
|
||||
break;
|
||||
|
@ -493,7 +493,7 @@ static int do_edit(int argc, char *argv[])
|
|||
}
|
||||
textx = setpos(curline->data, linepos);
|
||||
break;
|
||||
case KEY_PAGEDOWN:
|
||||
case BB_KEY_PAGEDOWN:
|
||||
for (i = 0; i < screenheight - 1; i++) {
|
||||
if (!curline->next)
|
||||
break;
|
||||
|
@ -502,7 +502,7 @@ static int do_edit(int argc, char *argv[])
|
|||
}
|
||||
textx = setpos(curline->data, linepos);
|
||||
break;
|
||||
case KEY_DEL:
|
||||
case BB_KEY_DEL:
|
||||
if (textx == curlen) {
|
||||
if (curline->next)
|
||||
merge_line(curline);
|
||||
|
|
|
@ -303,7 +303,7 @@ int menu_show(struct menu *m)
|
|||
int repaint = 0;
|
||||
|
||||
if (m->auto_select >= 0)
|
||||
ch = KEY_RETURN;
|
||||
ch = BB_KEY_RETURN;
|
||||
else
|
||||
ch = read_key();
|
||||
|
||||
|
@ -327,7 +327,7 @@ int menu_show(struct menu *m)
|
|||
}
|
||||
break;
|
||||
}
|
||||
case KEY_UP:
|
||||
case BB_KEY_UP:
|
||||
m->selected = list_entry(m->selected->list.prev, struct menu_entry,
|
||||
list);
|
||||
if (&(m->selected->list) == &(m->entries)) {
|
||||
|
@ -336,7 +336,7 @@ int menu_show(struct menu *m)
|
|||
}
|
||||
repaint = 1;
|
||||
break;
|
||||
case KEY_DOWN:
|
||||
case BB_KEY_DOWN:
|
||||
m->selected = list_entry(m->selected->list.next, struct menu_entry,
|
||||
list);
|
||||
if (&(m->selected->list) == &(m->entries)) {
|
||||
|
@ -353,11 +353,11 @@ int menu_show(struct menu *m)
|
|||
m->selected->action(m, m->selected);
|
||||
repaint = 1;
|
||||
break;
|
||||
case KEY_ENTER:
|
||||
if (ch_previous == KEY_RETURN)
|
||||
case BB_KEY_ENTER:
|
||||
if (ch_previous == BB_KEY_RETURN)
|
||||
break;
|
||||
case KEY_RETURN:
|
||||
if (ch_previous == KEY_ENTER)
|
||||
case BB_KEY_RETURN:
|
||||
if (ch_previous == BB_KEY_ENTER)
|
||||
break;
|
||||
clear();
|
||||
gotoXY(1,1);
|
||||
|
@ -368,11 +368,11 @@ int menu_show(struct menu *m)
|
|||
else
|
||||
print_menu(m);
|
||||
break;
|
||||
case KEY_HOME:
|
||||
case BB_KEY_HOME:
|
||||
m->selected = list_first_entry(&m->entries, struct menu_entry, list);
|
||||
repaint = 1;
|
||||
break;
|
||||
case KEY_END:
|
||||
case BB_KEY_END:
|
||||
m->selected = list_last_entry(&m->entries, struct menu_entry, list);
|
||||
repaint = 1;
|
||||
break;
|
||||
|
|
|
@ -65,8 +65,8 @@ int password(unsigned char *passwd, size_t length, int flags, int timeout)
|
|||
puts("\r\n");
|
||||
return 0;
|
||||
case CTL_CH('h'):
|
||||
case KEY_DEL7:
|
||||
case KEY_DEL:
|
||||
case BB_KEY_DEL7:
|
||||
case BB_KEY_DEL:
|
||||
if (pos > 0) {
|
||||
if (flags & STAR)
|
||||
puts("\b \b");
|
||||
|
|
|
@ -2,3 +2,4 @@ obj-$(CONFIG_KEYBOARD_GPIO) += gpio_keys.o
|
|||
obj-$(CONFIG_KEYBOARD_TWL6030) += twl6030_pwrbtn.o
|
||||
obj-$(CONFIG_KEYBOARD_IMX_KEYPAD) += imx_keypad.o
|
||||
obj-$(CONFIG_KEYBOARD_QT1070) += qt1070.o
|
||||
obj-y += keymap.o
|
||||
|
|
|
@ -11,32 +11,57 @@
|
|||
#include <gpio_keys.h>
|
||||
#include <poller.h>
|
||||
#include <gpio.h>
|
||||
#include <of_gpio.h>
|
||||
#include <input/keyboard.h>
|
||||
|
||||
static inline struct gpio_keys_platform_data *
|
||||
struct gpio_key {
|
||||
int code;
|
||||
|
||||
int gpio;
|
||||
int active_low;
|
||||
|
||||
int previous_state;
|
||||
};
|
||||
|
||||
struct gpio_keys {
|
||||
struct gpio_key *buttons;
|
||||
int nbuttons;
|
||||
|
||||
/* optional */
|
||||
int fifo_size;
|
||||
|
||||
struct kfifo *recv_fifo;
|
||||
struct poller_struct poller;
|
||||
struct console_device cdev;
|
||||
|
||||
int use_keycodes;
|
||||
};
|
||||
|
||||
static inline struct gpio_keys *
|
||||
poller_to_gk_pdata(struct poller_struct *poller)
|
||||
{
|
||||
return container_of(poller, struct gpio_keys_platform_data, poller);
|
||||
return container_of(poller, struct gpio_keys, poller);
|
||||
}
|
||||
|
||||
static inline struct gpio_keys_platform_data *
|
||||
static inline struct gpio_keys *
|
||||
cdev_to_gk_pdata(struct console_device *cdev)
|
||||
{
|
||||
return container_of(cdev, struct gpio_keys_platform_data, cdev);
|
||||
return container_of(cdev, struct gpio_keys, cdev);
|
||||
}
|
||||
|
||||
static void gpio_key_poller(struct poller_struct *poller)
|
||||
{
|
||||
struct gpio_keys_platform_data *pdata = poller_to_gk_pdata(poller);
|
||||
struct gpio_keys_button *gb;
|
||||
struct gpio_keys *gk = poller_to_gk_pdata(poller);
|
||||
struct gpio_key *gb;
|
||||
int i, val;
|
||||
|
||||
for (i = 0; i < pdata->nbuttons; i++) {
|
||||
for (i = 0; i < gk->nbuttons; i++) {
|
||||
|
||||
gb = &pdata->buttons[i];
|
||||
gb = &gk->buttons[i];
|
||||
val = gpio_get_value(gb->gpio);
|
||||
|
||||
if (val != gb->previous_state && val != gb->active_low) {
|
||||
kfifo_put(pdata->recv_fifo, (u_char*)&gb->code, sizeof(int));
|
||||
kfifo_put(gk->recv_fifo, (u_char*)&gb->code, sizeof(int));
|
||||
debug("pressed gpio(%d) as %d\n", gb->gpio, gb->code);
|
||||
}
|
||||
gb->previous_state = val;
|
||||
|
@ -45,66 +70,139 @@ static void gpio_key_poller(struct poller_struct *poller)
|
|||
|
||||
static int gpio_keys_tstc(struct console_device *cdev)
|
||||
{
|
||||
struct gpio_keys_platform_data *pdata = cdev_to_gk_pdata(cdev);
|
||||
struct gpio_keys *gk = cdev_to_gk_pdata(cdev);
|
||||
|
||||
return (kfifo_len(pdata->recv_fifo) == 0) ? 0 : 1;
|
||||
return (kfifo_len(gk->recv_fifo) == 0) ? 0 : 1;
|
||||
}
|
||||
|
||||
static int gpio_keys_getc(struct console_device *cdev)
|
||||
{
|
||||
int code = 0;
|
||||
struct gpio_keys_platform_data *pdata = cdev_to_gk_pdata(cdev);
|
||||
struct gpio_keys *gk = cdev_to_gk_pdata(cdev);
|
||||
|
||||
kfifo_get(pdata->recv_fifo, (u_char*)&code, sizeof(int));
|
||||
return code;
|
||||
kfifo_get(gk->recv_fifo, (u_char*)&code, sizeof(int));
|
||||
|
||||
if (IS_ENABLED(CONFIG_OFDEVICE) && gk->use_keycodes)
|
||||
return keycode_bb_keys[code];
|
||||
else
|
||||
return code;
|
||||
}
|
||||
|
||||
static int __init gpio_keys_probe(struct device_d *dev)
|
||||
static int gpio_keys_probe_pdata(struct gpio_keys *gk, struct device_d *dev)
|
||||
{
|
||||
int ret, i, gpio;
|
||||
struct gpio_keys_platform_data *pdata;
|
||||
struct console_device *cdev;
|
||||
int i;
|
||||
|
||||
pdata = dev->platform_data;
|
||||
|
||||
if (!pdata) {
|
||||
/* small (so we copy it) but critical! */
|
||||
pr_err("missing platform_data\n");
|
||||
dev_err(dev, "missing platform_data\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
if (!pdata->fifo_size)
|
||||
pdata->fifo_size = 50;
|
||||
if (pdata->fifo_size)
|
||||
gk->fifo_size = pdata->fifo_size;
|
||||
|
||||
pdata->recv_fifo = kfifo_alloc(pdata->fifo_size);
|
||||
gk->buttons = xzalloc(pdata->nbuttons * sizeof(*gk->buttons));
|
||||
gk->nbuttons = pdata->nbuttons;
|
||||
|
||||
for (i = 0; i < pdata->nbuttons; i++) {
|
||||
gpio = pdata->buttons[i].gpio;
|
||||
for (i = 0; i < gk->nbuttons; i++) {
|
||||
gk->buttons[i].gpio = pdata->buttons[i].gpio;
|
||||
gk->buttons[i].code = pdata->buttons[i].code;
|
||||
gk->buttons[i].active_low = pdata->buttons[i].active_low;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int gpio_keys_probe_dt(struct gpio_keys *gk, struct device_d *dev)
|
||||
{
|
||||
struct device_node *npkey, *np = dev->device_node;
|
||||
int i = 0, ret;
|
||||
|
||||
if (!IS_ENABLED(CONFIG_OFDEVICE))
|
||||
return -ENODEV;
|
||||
|
||||
gk->nbuttons = of_get_child_count(np);
|
||||
gk->buttons = xzalloc(gk->nbuttons * sizeof(*gk->buttons));
|
||||
|
||||
for_each_child_of_node(np, npkey) {
|
||||
enum of_gpio_flags gpioflags;
|
||||
uint32_t keycode;
|
||||
|
||||
gk->buttons[i].gpio = of_get_named_gpio_flags(npkey, "gpios", 0, &gpioflags);
|
||||
if (gk->buttons[i].gpio < 0)
|
||||
return gk->buttons[i].gpio;
|
||||
|
||||
if (gpioflags & OF_GPIO_ACTIVE_LOW)
|
||||
gk->buttons[i].active_low = 1;
|
||||
|
||||
ret = of_property_read_u32(npkey, "linux,code", &keycode);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
gk->buttons[i].code = keycode;
|
||||
|
||||
i++;
|
||||
}
|
||||
|
||||
gk->use_keycodes = 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int __init gpio_keys_probe(struct device_d *dev)
|
||||
{
|
||||
int ret, i, gpio;
|
||||
struct console_device *cdev;
|
||||
struct gpio_keys *gk;
|
||||
|
||||
gk = xzalloc(sizeof(*gk));
|
||||
gk->fifo_size = 50;
|
||||
|
||||
if (dev->device_node)
|
||||
ret = gpio_keys_probe_dt(gk, dev);
|
||||
else
|
||||
ret = gpio_keys_probe_pdata(gk, dev);
|
||||
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
gk->recv_fifo = kfifo_alloc(gk->fifo_size);
|
||||
|
||||
for (i = 0; i < gk->nbuttons; i++) {
|
||||
gpio = gk->buttons[i].gpio;
|
||||
ret = gpio_request(gpio, "gpio_keys");
|
||||
if (ret) {
|
||||
pr_err("gpio_keys: (%d) can not be requested\n", gpio);
|
||||
return ret;
|
||||
}
|
||||
gpio_direction_input(gpio);
|
||||
pdata->buttons[i].previous_state =
|
||||
pdata->buttons[i].active_low;
|
||||
gk->buttons[i].previous_state = gk->buttons[i].active_low;
|
||||
}
|
||||
|
||||
pdata->poller.func = gpio_key_poller;
|
||||
gk->poller.func = gpio_key_poller;
|
||||
|
||||
cdev = &pdata->cdev;
|
||||
cdev = &gk->cdev;
|
||||
dev->type_data = cdev;
|
||||
cdev->dev = dev;
|
||||
cdev->tstc = gpio_keys_tstc;
|
||||
cdev->getc = gpio_keys_getc;
|
||||
|
||||
console_register(&pdata->cdev);
|
||||
console_register(&gk->cdev);
|
||||
|
||||
return poller_register(&pdata->poller);
|
||||
return poller_register(&gk->poller);
|
||||
}
|
||||
|
||||
static struct of_device_id key_gpio_of_ids[] = {
|
||||
{ .compatible = "gpio-keys", },
|
||||
{ }
|
||||
};
|
||||
|
||||
static struct driver_d gpio_keys_driver = {
|
||||
.name = "gpio_keys",
|
||||
.probe = gpio_keys_probe,
|
||||
.of_compatible = DRV_OF_COMPAT(key_gpio_of_ids),
|
||||
};
|
||||
device_platform_driver(gpio_keys_driver);
|
||||
|
|
|
@ -0,0 +1,136 @@
|
|||
#include <linux/types.h>
|
||||
#include <input/keyboard.h>
|
||||
|
||||
#include <dt-bindings/input/input.h>
|
||||
#include <readkey.h>
|
||||
|
||||
uint8_t keycode_bb_keys[NR_KEYS] = {
|
||||
[KEY_RESERVED] = 0xff,
|
||||
[KEY_ESC] = 0x1b,
|
||||
[KEY_1] = '1',
|
||||
[KEY_2] = '2',
|
||||
[KEY_3] = '3',
|
||||
[KEY_4] = '4',
|
||||
[KEY_5] = '5',
|
||||
[KEY_6] = '6',
|
||||
[KEY_7] = '7',
|
||||
[KEY_8] = '8',
|
||||
[KEY_9] = '9',
|
||||
[KEY_0] = '0',
|
||||
[KEY_MINUS] = '-',
|
||||
[KEY_EQUAL] = '=',
|
||||
[KEY_BACKSPACE] = 0xff,
|
||||
[KEY_TAB] = '\t',
|
||||
[KEY_Q] = 'q',
|
||||
[KEY_W] = 'w',
|
||||
[KEY_E] = 'e',
|
||||
[KEY_R] = 'r',
|
||||
[KEY_T] = 't',
|
||||
[KEY_Y] = 'y',
|
||||
[KEY_U] = 'u',
|
||||
[KEY_I] = 'i',
|
||||
[KEY_O] = 'o',
|
||||
[KEY_P] = 'p',
|
||||
[KEY_LEFTBRACE] = '(',
|
||||
[KEY_RIGHTBRACE] = ')',
|
||||
[KEY_ENTER] = '\n',
|
||||
[KEY_LEFTCTRL] = 0xff,
|
||||
[KEY_A] = 'a',
|
||||
[KEY_S] = 's',
|
||||
[KEY_D] = 'd',
|
||||
[KEY_F] = 'f',
|
||||
[KEY_G] = 'g',
|
||||
[KEY_H] = 'h',
|
||||
[KEY_J] = 'j',
|
||||
[KEY_K] = 'k',
|
||||
[KEY_L] = 'l',
|
||||
[KEY_SEMICOLON] = ';',
|
||||
[KEY_APOSTROPHE] = 0xff,
|
||||
[KEY_GRAVE] = '^',
|
||||
[KEY_LEFTSHIFT] = 0xff,
|
||||
[KEY_BACKSLASH] = 0xff,
|
||||
[KEY_Z] = 'z',
|
||||
[KEY_X] = 'x',
|
||||
[KEY_C] = 'c',
|
||||
[KEY_V] = 'v',
|
||||
[KEY_B] = 'b',
|
||||
[KEY_N] = 'n',
|
||||
[KEY_M] = 'm',
|
||||
[KEY_COMMA] = ',',
|
||||
[KEY_DOT] = '.',
|
||||
[KEY_SLASH] = '/',
|
||||
[KEY_RIGHTSHIFT] = 0xff,
|
||||
[KEY_KPASTERISK] = 0xff,
|
||||
[KEY_LEFTALT] = 0xff,
|
||||
[KEY_SPACE] = ' ',
|
||||
[KEY_CAPSLOCK] = 0xff,
|
||||
[KEY_F1] = 0xff,
|
||||
[KEY_F2] = 0xff,
|
||||
[KEY_F3] = 0xff,
|
||||
[KEY_F4] = 0xff,
|
||||
[KEY_F5] = 0xff,
|
||||
[KEY_F6] = 0xff,
|
||||
[KEY_F7] = 0xff,
|
||||
[KEY_F8] = 0xff,
|
||||
[KEY_F9] = 0xff,
|
||||
[KEY_F10] = 0xff,
|
||||
[KEY_NUMLOCK] = 0xff,
|
||||
[KEY_SCROLLLOCK] = 0xff,
|
||||
[KEY_KP7] = 0xff,
|
||||
[KEY_KP8] = 0xff,
|
||||
[KEY_KP9] = 0xff,
|
||||
[KEY_KPMINUS] = 0xff,
|
||||
[KEY_KP4] = 0xff,
|
||||
[KEY_KP5] = 0xff,
|
||||
[KEY_KP6] = 0xff,
|
||||
[KEY_KPPLUS] = 0xff,
|
||||
[KEY_KP1] = 0xff,
|
||||
[KEY_KP2] = 0xff,
|
||||
[KEY_KP3] = 0xff,
|
||||
[KEY_KP0] = 0xff,
|
||||
[KEY_KPDOT] = 0xff,
|
||||
[KEY_ZENKAKUHANKAKU] = 0xff,
|
||||
[KEY_102ND] = 0xff,
|
||||
[KEY_F11] = 0xff,
|
||||
[KEY_F12] = 0xff,
|
||||
[KEY_RO] = 0xff,
|
||||
[KEY_KATAKANA] = 0xff,
|
||||
[KEY_HIRAGANA] = 0xff,
|
||||
[KEY_HENKAN] = 0xff,
|
||||
[KEY_KATAKANAHIRAGANA] =0xff,
|
||||
[KEY_MUHENKAN] = 0xff,
|
||||
[KEY_KPJPCOMMA] = 0xff,
|
||||
[KEY_KPENTER] = 0xff,
|
||||
[KEY_RIGHTCTRL] = 0xff,
|
||||
[KEY_KPSLASH] = 0xff,
|
||||
[KEY_SYSRQ] = 0xff,
|
||||
[KEY_RIGHTALT] = 0xff,
|
||||
[KEY_LINEFEED] = 0xff,
|
||||
[KEY_HOME] = 0xff,
|
||||
[KEY_UP] = BB_KEY_UP,
|
||||
[KEY_PAGEUP] = BB_KEY_PAGEUP,
|
||||
[KEY_LEFT] = BB_KEY_LEFT,
|
||||
[KEY_RIGHT] = BB_KEY_RIGHT,
|
||||
[KEY_END] = BB_KEY_END,
|
||||
[KEY_DOWN] = BB_KEY_DOWN,
|
||||
[KEY_PAGEDOWN] = BB_KEY_PAGEDOWN,
|
||||
[KEY_INSERT] = BB_KEY_INSERT,
|
||||
[KEY_DELETE] = BB_KEY_DEL7,
|
||||
[KEY_MACRO] = 0xff,
|
||||
[KEY_MUTE] = 0xff,
|
||||
[KEY_VOLUMEDOWN] = 0xff,
|
||||
[KEY_VOLUMEUP] = 0xff,
|
||||
[KEY_POWER] = 0xff,
|
||||
[KEY_KPEQUAL] = 0xff,
|
||||
[KEY_KPPLUSMINUS] = 0xff,
|
||||
[KEY_PAUSE] = 0xff,
|
||||
[KEY_SCALE] = 0xff,
|
||||
[KEY_KPCOMMA] = 0xff,
|
||||
[KEY_HANGEUL] = 0xff,
|
||||
[KEY_HANGUEL] = KEY_HANGEUL,
|
||||
[KEY_HANJA] = 0xff,
|
||||
[KEY_YEN] = 0xff,
|
||||
[KEY_LEFTMETA] = 0xff,
|
||||
[KEY_RIGHTMETA] = 0xff,
|
||||
[KEY_COMPOSE] = 0xff,
|
||||
};
|
|
@ -32,8 +32,8 @@
|
|||
#define QT1070_RESET_TIME 255
|
||||
|
||||
static int default_code[QT1070_NB_BUTTONS] = {
|
||||
KEY_ENTER, KEY_HOME, KEY_UP, KEY_DOWN,
|
||||
KEY_RIGHT, KEY_LEFT, KEY_CLEAR_SCREEN };
|
||||
BB_KEY_ENTER, BB_KEY_HOME, BB_KEY_UP, BB_KEY_DOWN,
|
||||
BB_KEY_RIGHT, BB_KEY_LEFT, BB_KEY_CLEAR_SCREEN };
|
||||
|
||||
struct qt1070_data {
|
||||
int code[QT1070_NB_BUTTONS];
|
||||
|
|
|
@ -10,9 +10,6 @@ struct gpio_keys_button {
|
|||
|
||||
int gpio;
|
||||
int active_low;
|
||||
|
||||
/* internal */
|
||||
int previous_state;
|
||||
};
|
||||
|
||||
struct gpio_keys_platform_data {
|
||||
|
@ -21,10 +18,6 @@ struct gpio_keys_platform_data {
|
|||
|
||||
/* optional */
|
||||
int fifo_size;
|
||||
|
||||
struct kfifo *recv_fifo;
|
||||
struct poller_struct poller;
|
||||
struct console_device cdev;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
@ -0,0 +1,10 @@
|
|||
#ifndef __INPUT_KEYBOARD_H
|
||||
#define __INPUT_KEYBOARD_H
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
#define NR_KEYS 256
|
||||
|
||||
extern uint8_t keycode_bb_keys[NR_KEYS];
|
||||
|
||||
#endif
|
|
@ -4,25 +4,25 @@
|
|||
#define CTL_CH(c) ((c) - 'a' + 1)
|
||||
|
||||
/* Ascii keys */
|
||||
#define KEY_ENTER '\n'
|
||||
#define KEY_RETURN '\r'
|
||||
#define BB_KEY_ENTER '\n'
|
||||
#define BB_KEY_RETURN '\r'
|
||||
|
||||
/* Misc. non-Ascii keys */
|
||||
#define KEY_UP CTL_CH('p') /* cursor key Up */
|
||||
#define KEY_DOWN CTL_CH('n') /* cursor key Down */
|
||||
#define KEY_RIGHT CTL_CH('f') /* Cursor Key Right */
|
||||
#define KEY_LEFT CTL_CH('b') /* cursor key Left */
|
||||
#define KEY_HOME CTL_CH('a') /* Cursor Key Home */
|
||||
#define KEY_ERASE_TO_EOL CTL_CH('k')
|
||||
#define KEY_REFRESH_TO_EOL CTL_CH('e')
|
||||
#define KEY_ERASE_LINE CTL_CH('x')
|
||||
#define KEY_INSERT CTL_CH('o')
|
||||
#define KEY_CLEAR_SCREEN CTL_CH('l')
|
||||
#define KEY_DEL7 127
|
||||
#define KEY_END 133 /* Cursor Key End */
|
||||
#define KEY_PAGEUP 135 /* Cursor Key Page Up */
|
||||
#define KEY_PAGEDOWN 136 /* Cursor Key Page Down */
|
||||
#define KEY_DEL 137 /* Cursor Key Del */
|
||||
#define BB_KEY_UP CTL_CH('p') /* cursor key Up */
|
||||
#define BB_KEY_DOWN CTL_CH('n') /* cursor key Down */
|
||||
#define BB_KEY_RIGHT CTL_CH('f') /* Cursor Key Right */
|
||||
#define BB_KEY_LEFT CTL_CH('b') /* cursor key Left */
|
||||
#define BB_KEY_HOME CTL_CH('a') /* Cursor Key Home */
|
||||
#define BB_KEY_ERASE_TO_EOL CTL_CH('k')
|
||||
#define BB_KEY_REFRESH_TO_EOL CTL_CH('e')
|
||||
#define BB_KEY_ERASE_LINE CTL_CH('x')
|
||||
#define BB_KEY_INSERT CTL_CH('o')
|
||||
#define BB_KEY_CLEAR_SCREEN CTL_CH('l')
|
||||
#define BB_KEY_DEL7 127
|
||||
#define BB_KEY_END 133 /* Cursor Key End */
|
||||
#define BB_KEY_PAGEUP 135 /* Cursor Key Page Up */
|
||||
#define BB_KEY_PAGEDOWN 136 /* Cursor Key Page Down */
|
||||
#define BB_KEY_DEL 137 /* Cursor Key Del */
|
||||
|
||||
#define ANSI_CLEAR_SCREEN "\e[2J\e[;H"
|
||||
|
||||
|
|
|
@ -29,24 +29,24 @@ struct esc_cmds {
|
|||
};
|
||||
|
||||
static const struct esc_cmds esccmds[] = {
|
||||
{"OA", KEY_UP}, // cursor key Up
|
||||
{"OB", KEY_DOWN}, // cursor key Down
|
||||
{"OC", KEY_RIGHT}, // Cursor Key Right
|
||||
{"OD", KEY_LEFT}, // cursor key Left
|
||||
{"OH", KEY_HOME}, // Cursor Key Home
|
||||
{"OF", KEY_END}, // Cursor Key End
|
||||
{"[A", KEY_UP}, // cursor key Up
|
||||
{"[B", KEY_DOWN}, // cursor key Down
|
||||
{"[C", KEY_RIGHT}, // Cursor Key Right
|
||||
{"[D", KEY_LEFT}, // cursor key Left
|
||||
{"[H", KEY_HOME}, // Cursor Key Home
|
||||
{"[F", KEY_END}, // Cursor Key End
|
||||
{"[1~", KEY_HOME}, // Cursor Key Home
|
||||
{"[2~", KEY_INSERT}, // Cursor Key Insert
|
||||
{"[3~", KEY_DEL}, // Cursor Key Delete
|
||||
{"[4~", KEY_END}, // Cursor Key End
|
||||
{"[5~", KEY_PAGEUP}, // Cursor Key Page Up
|
||||
{"[6~", KEY_PAGEDOWN},// Cursor Key Page Down
|
||||
{"OA", BB_KEY_UP}, // cursor key Up
|
||||
{"OB", BB_KEY_DOWN}, // cursor key Down
|
||||
{"OC", BB_KEY_RIGHT}, // Cursor Key Right
|
||||
{"OD", BB_KEY_LEFT}, // cursor key Left
|
||||
{"OH", BB_KEY_HOME}, // Cursor Key Home
|
||||
{"OF", BB_KEY_END}, // Cursor Key End
|
||||
{"[A", BB_KEY_UP}, // cursor key Up
|
||||
{"[B", BB_KEY_DOWN}, // cursor key Down
|
||||
{"[C", BB_KEY_RIGHT}, // Cursor Key Right
|
||||
{"[D", BB_KEY_LEFT}, // cursor key Left
|
||||
{"[H", BB_KEY_HOME}, // Cursor Key Home
|
||||
{"[F", BB_KEY_END}, // Cursor Key End
|
||||
{"[1~", BB_KEY_HOME}, // Cursor Key Home
|
||||
{"[2~", BB_KEY_INSERT}, // Cursor Key Insert
|
||||
{"[3~", BB_KEY_DEL}, // Cursor Key Delete
|
||||
{"[4~", BB_KEY_END}, // Cursor Key End
|
||||
{"[5~", BB_KEY_PAGEUP}, // Cursor Key Page Up
|
||||
{"[6~", BB_KEY_PAGEDOWN},// Cursor Key Page Down
|
||||
};
|
||||
|
||||
int read_key(void)
|
||||
|
|
|
@ -233,19 +233,19 @@ int readline(const char *prompt, char *buf, int len)
|
|||
#endif
|
||||
break;
|
||||
|
||||
case KEY_HOME:
|
||||
case BB_KEY_HOME:
|
||||
BEGINNING_OF_LINE();
|
||||
break;
|
||||
case CTL_CH('c'): /* ^C - break */
|
||||
*buf = 0; /* discard input */
|
||||
return -1;
|
||||
case KEY_RIGHT:
|
||||
case BB_KEY_RIGHT:
|
||||
if (num < eol_num) {
|
||||
getcmd_putch(buf[num]);
|
||||
num++;
|
||||
}
|
||||
break;
|
||||
case KEY_LEFT:
|
||||
case BB_KEY_LEFT:
|
||||
if (num) {
|
||||
getcmd_putch(CTL_BACKSPACE);
|
||||
num--;
|
||||
|
@ -266,28 +266,28 @@ int readline(const char *prompt, char *buf, int len)
|
|||
eol_num--;
|
||||
}
|
||||
break;
|
||||
case KEY_ERASE_TO_EOL:
|
||||
case BB_KEY_ERASE_TO_EOL:
|
||||
ERASE_TO_EOL();
|
||||
break;
|
||||
case KEY_REFRESH_TO_EOL:
|
||||
case KEY_END:
|
||||
case BB_KEY_REFRESH_TO_EOL:
|
||||
case BB_KEY_END:
|
||||
REFRESH_TO_EOL();
|
||||
break;
|
||||
case KEY_INSERT:
|
||||
case BB_KEY_INSERT:
|
||||
insert = !insert;
|
||||
break;
|
||||
case KEY_ERASE_LINE:
|
||||
case BB_KEY_ERASE_LINE:
|
||||
BEGINNING_OF_LINE();
|
||||
ERASE_TO_EOL();
|
||||
break;
|
||||
case DEL:
|
||||
case KEY_DEL7:
|
||||
case BB_KEY_DEL7:
|
||||
case 8:
|
||||
if (num) {
|
||||
DO_BACKSPACE();
|
||||
}
|
||||
break;
|
||||
case KEY_DEL:
|
||||
case BB_KEY_DEL:
|
||||
if (num < eol_num) {
|
||||
wlen = eol_num - num;
|
||||
memmove(buf + num, buf + num + 1, wlen);
|
||||
|
@ -299,12 +299,12 @@ int readline(const char *prompt, char *buf, int len)
|
|||
eol_num--;
|
||||
}
|
||||
break;
|
||||
case KEY_UP:
|
||||
case KEY_DOWN:
|
||||
case BB_KEY_UP:
|
||||
case BB_KEY_DOWN:
|
||||
{
|
||||
char * hline;
|
||||
|
||||
if (ichar == KEY_UP)
|
||||
if (ichar == BB_KEY_UP)
|
||||
hline = hist_prev();
|
||||
else
|
||||
hline = hist_next();
|
||||
|
|
Loading…
Reference in New Issue