Simpad patch, courtesy Florian Boor
authorKoen Kooi <koen@openembedded.org>
Wed, 16 Feb 2005 01:18:43 +0000 (01:18 +0000)
committerKoen Kooi <koen@openembedded.org>
Wed, 16 Feb 2005 01:18:43 +0000 (01:18 +0000)
BKrev: 42129f73TpgaFc9r1EWOpvHuS0XpuA

packages/linux/opensimpad-2.4.25-vrs2-pxa1-jpm1/simpad-switches-input.diff
packages/linux/opensimpad-2.4.25-vrs2-pxa1-jpm1/simpad-switches-input2.diff
packages/linux/opensimpad_2.4.25-vrs2-pxa1-jpm1.bb

index e69de29..6bf27bf 100644 (file)
@@ -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);
index e69de29..4f9d0bf 100644 (file)
@@ -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;
+ }
index 0c7fe37..02583c0 100644 (file)
@@ -6,7 +6,7 @@ KV = "${@bb.data.getVar('PV',d,True).split('-')[0]}"
 VRSV = "${@bb.data.getVar('PV',d,True).split('-')[1]}"
 PXAV = "${@bb.data.getVar('PV',d,True).split('-')[2]}"
 JPMV = "${@bb.data.getVar('PV',d,True).split('-')[3]}"
-PR = "r18"
+PR = "r19"
 
 FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/opensimpad-${PV}"
 
@@ -23,7 +23,6 @@ SRC_URI = "ftp://ftp.kernel.org/pub/linux/kernel/v2.4/linux-${KV}.tar.bz2 \
            file://simpad-backlight-if.diff;patch=1;pnum=0 \
            file://simpad-switches-input.diff;patch=1;pnum=0 \
            file://simpad-switches-input2.diff;patch=1;pnum=0 \
-          file://keymap.patch;patch=1 \
            file://simpad-apm.diff;patch=1;pnum=0 \
            file://simpad-ts-noninput.diff;patch=1;pnum=0 \
            file://simpad-pm-updates.patch;patch=1;pnum=0 \