diff options
author | Koen Kooi <koen@openembedded.org> | 2005-02-16 01:18:43 +0000 |
---|---|---|
committer | Koen Kooi <koen@openembedded.org> | 2005-02-16 01:18:43 +0000 |
commit | 97c046db2adf6a75926d782de613e38d89647321 (patch) | |
tree | 07a8056d6adb39d075e51ee64e075627460bc34b /packages/linux/opensimpad-2.4.25-vrs2-pxa1-jpm1 | |
parent | c08ca6845b3f2307b3f5085c7ec37c89ff119d5e (diff) |
Simpad patch, courtesy Florian Boor
BKrev: 42129f73TpgaFc9r1EWOpvHuS0XpuA
Diffstat (limited to 'packages/linux/opensimpad-2.4.25-vrs2-pxa1-jpm1')
-rw-r--r-- | packages/linux/opensimpad-2.4.25-vrs2-pxa1-jpm1/simpad-switches-input.diff | 126 | ||||
-rw-r--r-- | packages/linux/opensimpad-2.4.25-vrs2-pxa1-jpm1/simpad-switches-input2.diff | 41 |
2 files changed, 167 insertions, 0 deletions
diff --git a/packages/linux/opensimpad-2.4.25-vrs2-pxa1-jpm1/simpad-switches-input.diff b/packages/linux/opensimpad-2.4.25-vrs2-pxa1-jpm1/simpad-switches-input.diff index e69de29bb2..6bf27bfdc0 100644 --- a/packages/linux/opensimpad-2.4.25-vrs2-pxa1-jpm1/simpad-switches-input.diff +++ b/packages/linux/opensimpad-2.4.25-vrs2-pxa1-jpm1/simpad-switches-input.diff @@ -0,0 +1,126 @@ +--- /mnt/bdisk/openembedded/oetmp/base/opensimpad-2.4.25-vrs2-pxa1-jpm1-r5/linux-2.4.25/drivers/misc/switches.h 2004-07-01 21:10:30.000000000 +0200 ++++ drivers/misc/switches.h 2004-07-03 23:45:46.000000000 +0200 +@@ -25,4 +25,14 @@ + extern int switches_ucb1x00_init(void); + extern void switches_ucb1x00_exit(void); + ++#ifdef CONFIG_SA1100_SIMPAD ++#define SIMPAD_KEY_SUSPEND 0x0002 ++#define SIMPAD_KEY_WWW 0x0008 ++#define SIMPAD_KEY_ENTER 0x0010 ++#define SIMPAD_KEY_UP 0x0020 ++#define SIMPAD_KEY_DOWN 0x0040 ++#define SIMPAD_KEY_LEFT 0x0080 ++#define SIMPAD_KEY_RIGHT 0x0100 ++#endif ++ + #endif /* !defined(_SWITCHES_H) */ +--- /mnt/bdisk/openembedded/oetmp/base/opensimpad-2.4.25-vrs2-pxa1-jpm1-r5/linux-2.4.25/drivers/misc/switches-core.c 2004-07-01 21:10:30.000000000 +0200 ++++ drivers/misc/switches-core.c 2004-07-04 17:57:37.000000000 +0200 +@@ -16,6 +16,9 @@ + * 11 September 2001 - UCB1200 driver framework support added. + * + * 19 December 2001 - separated out SA-1100 and UCB1x00 code. ++ * ++ * 3 July 2004 - Added generating of keyboard events. ++ * Florian Boor <florian@handhelds.org> + */ + + #include <linux/config.h> +@@ -30,7 +33,11 @@ + #include <linux/slab.h> + #include <linux/wait.h> + ++#include <linux/input.h> ++ + #include <asm/uaccess.h> ++#include <asm/hardware.h> ++#include <asm/keyboard.h> + + #include "switches.h" + +@@ -53,6 +60,19 @@ + DECLARE_WAIT_QUEUE_HEAD(switches_wait); + LIST_HEAD(switches_event_queue); + ++#ifdef CONFIG_INPUT ++static struct input_dev idev; ++ ++int ++dummy_k_translate(unsigned char scancode, unsigned char *keycode, char raw_mode) ++{ ++ *keycode = scancode; ++ return 1; ++} ++ ++extern int (*k_translate)(unsigned char, unsigned char *, char); ++ ++#endif + + static ssize_t switches_read(struct file *file, char *buffer, + size_t count, loff_t *pos) +@@ -148,6 +168,31 @@ + { + struct switches_action *action; + ++#ifdef CONFIG_INPUT ++ /* create input events, the events to send depends on the platform */ ++#ifdef CONFIG_SA1100_SIMPAD ++ if (machine_is_simpad()) { ++ if (SWITCHES_COUNT(mask) > 0) ++ { ++ if (mask->events[0] & SIMPAD_KEY_SUSPEND) ++ input_report_key(&idev, KEY_POWER, (mask->states[0] & SIMPAD_KEY_SUSPEND) ? 0 : 1); ++ if (mask->events[0] & SIMPAD_KEY_ENTER) ++ input_report_key(&idev, KEY_ENTER, (mask->states[0] & SIMPAD_KEY_ENTER) ? 1 : 0); ++ if (mask->events[0] & SIMPAD_KEY_UP) ++ input_report_key(&idev, KEY_UP, (mask->states[0] & SIMPAD_KEY_UP) ? 1 : 0); ++ if (mask->events[0] & SIMPAD_KEY_DOWN) ++ input_report_key(&idev, KEY_DOWN, (mask->states[0] & SIMPAD_KEY_DOWN) ? 1 : 0); ++ if (mask->events[0] & SIMPAD_KEY_LEFT) ++ input_report_key(&idev, KEY_LEFT, (mask->states[0] & SIMPAD_KEY_LEFT) ? 1 : 0); ++ if (mask->events[0] & SIMPAD_KEY_RIGHT) ++ input_report_key(&idev, KEY_RIGHT, (mask->states[0] & SIMPAD_KEY_RIGHT) ? 1 : 0); ++ if (mask->events[0] & SIMPAD_KEY_WWW) ++ input_report_key(&idev, KEY_F10, (mask->states[0] & SIMPAD_KEY_WWW) ? 1 : 0); ++ } ++ } ++#endif ++#endif ++ /* take care of switches device */ + if ((switches_users > 0) && (SWITCHES_COUNT(mask) > 0)) { + + if ((action = (struct switches_action *) +@@ -197,6 +242,21 @@ + return -EIO; + } + ++#ifdef CONFIG_INPUT ++ /* init input driver stuff */ ++ k_translate = dummy_k_translate; ++ idev.evbit[0] = BIT(EV_KEY); /* handle key events */ ++ ++ idev.keybit[LONG(KEY_POWER)] |= BIT(KEY_POWER); ++ idev.keybit[LONG(KEY_UP)] |= BIT(KEY_UP); ++ idev.keybit[LONG(KEY_DOWN)] |= BIT(KEY_DOWN); ++ idev.keybit[LONG(KEY_LEFT)] |= BIT(KEY_LEFT); ++ idev.keybit[LONG(KEY_RIGHT)] |= BIT(KEY_RIGHT); ++ idev.keybit[LONG(KEY_ENTER)] |= BIT(KEY_ENTER); ++ idev.keybit[LONG(KEY_F10)] |= BIT(KEY_F10); ++ ++ input_register_device(&idev); ++#endif + printk("Console switches initialized\n"); + + return 0; +@@ -214,6 +274,10 @@ + switches_ucb1x00_exit(); + #endif + ++#ifdef CONFIG_INPUT ++ input_unregister_device(&idev); ++#endif ++ + if (misc_deregister(&switches_misc) < 0) + printk(KERN_ERR "%s: unable to deregister misc device\n", + SWITCHES_NAME); diff --git a/packages/linux/opensimpad-2.4.25-vrs2-pxa1-jpm1/simpad-switches-input2.diff b/packages/linux/opensimpad-2.4.25-vrs2-pxa1-jpm1/simpad-switches-input2.diff index e69de29bb2..4f9d0bf93a 100644 --- a/packages/linux/opensimpad-2.4.25-vrs2-pxa1-jpm1/simpad-switches-input2.diff +++ b/packages/linux/opensimpad-2.4.25-vrs2-pxa1-jpm1/simpad-switches-input2.diff @@ -0,0 +1,41 @@ + +# +# Patch managed by http://www.holgerschurig.de/patcher.html +# + +--- drivers/misc/switches-core.c~Fooo ++++ drivers/misc/switches-core.c +@@ -66,7 +66,32 @@ + int + dummy_k_translate(unsigned char scancode, unsigned char *keycode, char raw_mode) + { +- *keycode = scancode; ++ if (scancode == KEY_UP) ++ *keycode = 144; ++ else if (scancode == KEY_LEFT) ++ *keycode = 146; ++ else if (scancode == KEY_RIGHT) ++ *keycode = 151; ++ else if (scancode == KEY_DOWN) ++ *keycode = 161; ++ else if (scancode == 144) ++ *keycode = KEY_UP; ++ else if (scancode == 146) ++ *keycode = KEY_LEFT; ++ else if (scancode == 151) ++ *keycode = KEY_RIGHT; ++ else if (scancode == 161) ++ *keycode = KEY_DOWN; ++ else if (scancode == KEY_KP8) ++ *keycode = KEY_UP; ++ else if (scancode == KEY_KP4) ++ *keycode = KEY_LEFT; ++ else if (scancode == KEY_KP6) ++ *keycode = KEY_RIGHT; ++ else if (scancode == KEY_KP2) ++ *keycode = KEY_DOWN; ++ else ++ *keycode = scancode; + return 1; + } + |