linux-ezx: fix direct keys on E680, disable LEGACY_PTYs
authorMichael Lauer <mickey@vanille-media.de>
Mon, 12 Jun 2006 14:20:20 +0000 (14:20 +0000)
committerOpenEmbedded Project <openembedded-devel@lists.openembedded.org>
Mon, 12 Jun 2006 14:20:20 +0000 (14:20 +0000)
packages/linux/linux-ezx/defconfig-a780
packages/linux/linux-ezx/defconfig-e680
packages/linux/linux-ezx/e680-fix-keypad.patch
packages/linux/linux-ezx/pxakbd-fix-directkeys.patch

index e90f125..beb7a64 100644 (file)
@@ -736,8 +736,8 @@ CONFIG_SERIAL_PXA_CONSOLE=y
 CONFIG_SERIAL_CORE=y
 CONFIG_SERIAL_CORE_CONSOLE=y
 CONFIG_UNIX98_PTYS=y
-CONFIG_LEGACY_PTYS=y
-CONFIG_LEGACY_PTY_COUNT=256
+# CONFIG_LEGACY_PTYS is not set
+# CONFIG_LEGACY_PTY_COUNT is not set
 
 #
 # IPMI
index 8a4a49c..ef5fef3 100644 (file)
@@ -736,8 +736,8 @@ CONFIG_SERIAL_PXA_CONSOLE=y
 CONFIG_SERIAL_CORE=y
 CONFIG_SERIAL_CORE_CONSOLE=y
 CONFIG_UNIX98_PTYS=y
-CONFIG_LEGACY_PTYS=y
-CONFIG_LEGACY_PTY_COUNT=256
+# CONFIG_LEGACY_PTYS is not set
+# CONFIG_LEGACY_PTY_COUNT is not set
 
 #
 # IPMI
index b40283f..ca06052 100644 (file)
@@ -3,8 +3,8 @@
 # Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher
 #
 
---- linux-2.6.16/arch/arm/mach-pxa/ezx.c~e680-fix-keypad       2006-06-09 01:55:06.000000000 +0200
-+++ linux-2.6.16/arch/arm/mach-pxa/ezx.c       2006-06-09 03:09:26.000000000 +0200
+--- linux-2.6.16/arch/arm/mach-pxa/ezx.c~e680-fix-keypad.patch 2006-06-11 00:47:33.000000000 +0200
++++ linux-2.6.16/arch/arm/mach-pxa/ezx.c       2006-06-12 16:13:28.000000000 +0200
 @@ -341,71 +341,25 @@
  };
  #endif
 -      /* col 3 */
 -      KEYPAD_HOME, KEYPAD_GAME_L, KEYPAD_CENTER, 0, 0, 0, 0, 0,
 +      /* row 0 */
-+      KEY_UP, KEY_RIGHT, 0, KEY_PHONE,
++      KEY_UP, KEY_RIGHT, KEY_RESERVED, KEY_PHONE,
 +      /* row 1 */
 +      KEY_DOWN, KEY_LEFT, KEY_VOLUMEUP, KEY_VOLUMEDOWN,
 +      /* row 2 */
-+      0, 0, 0, KEY_KPENTER,
++      KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_KPENTER,
  };
  static unsigned char ezx_direct_keycode[] = {
        KEY_CAMERA,
 -      KEYPAD_NONE,
 -      KEYPAD_NONE,
 -      KEYPAD_A,
-+      0,
-+      0,
++      KEY_RESERVED,
++      KEY_RESERVED,
 +      KEY_HOME,
        KEY_POWER,
 -      KEYPAD_B,
                .cols   = 4,
                .rows   = 3,
  #elif defined(CONFIG_PXA_EZX_A780)
-@@ -489,9 +430,7 @@
+@@ -489,10 +430,8 @@
        },
        .direct         = {
                .keycode = &ezx_direct_keycode,
 -#if defined(CONFIG_PXA_EZX_E680_P4A)
 -              .num    = 4,
 -#elif defined(CONFIG_PXA_EZX_E680)
+-              .num    = 5,
 +#if defined(CONFIG_PXA_EZX_E680)
-               .num    = 5,
++              .num    = 6,
  #elif defined(CONFIG_PXA_EZX_A780)
                .num    = 1,
+ #endif
index e1d0d7c..1dedb98 100644 (file)
@@ -3,9 +3,62 @@
 # Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher
 #
 
---- linux-2.6.16/drivers/input/keyboard/pxakbd.c~pxakbd-fix-directkeys 2006-06-09 03:16:35.000000000 +0200
-+++ linux-2.6.16/drivers/input/keyboard/pxakbd.c       2006-06-09 03:21:04.000000000 +0200
-@@ -279,6 +279,7 @@
+--- linux-2.6.16/drivers/input/keyboard/pxakbd.c~pxakbd-fix-directkeys.patch   2006-06-11 00:47:25.000000000 +0200
++++ linux-2.6.16/drivers/input/keyboard/pxakbd.c       2006-06-12 16:10:03.000000000 +0200
+@@ -20,7 +20,7 @@
+ #include <asm/arch/irqs.h>
+ #include <asm/arch/pxa-regs.h>
+-#if 0
++#if 1
+ #define DEBUGP(x, args ...) printk(x, ## args)
+ #else
+ #define DEBUGP(x, args ...)
+@@ -44,8 +44,7 @@
+       unsigned int i;
+       int num_pressed = 0;
+-      kpdk = KPDK & 0x0000000f;
+-
++      kpdk = KPDK & 0x000000ff;
+       for (i = 0; i < pxakbd->pd->direct.num; i++) {
+               int pressed = 0;
+@@ -54,11 +53,12 @@
+                       num_pressed++;
+                       DEBUGP("pxakbd: pressed: direct %u\n", i);
+               }
+-
+-              input_report_key(pxakbd->input, pxakbd->pd->direct.keycode[i],
+-                               pressed);
++              if (pxakbd->pd->direct.keycode[i] != KEY_RESERVED) {
++                      DEBUGP( "pxakbd: sending to input layer: keycode = %d, pressed = %d\n", pxakbd->pd->direct.keycode[i], pressed );
++                      input_report_key(pxakbd->input, pxakbd->pd->direct.keycode[i],
++                      pressed);
++              }
+       }
+-
+       return num_pressed;
+ }
+@@ -248,16 +248,6 @@
+               set_bit(pxakbd->pd->matrix.keycode[i], input_dev->keybit);
+       clear_bit(0, input_dev->keybit);
+-#if 0
+-      input_dev2->evbit[0] = ;
+-      input_dev2->keycode = pxakbd->pd->direct.keycode;
+-      input_dev2->keycodesize = sizeof(unsigned char);
+-      input_dev2->keycodemax = pxakbd->pd->direct.num;
+-
+-      for (i = 0; i < input_dev2->keycodemax; i++)
+-              set_bit(ezxkbd->keycode[i], input_dev2->keybit);
+-#endif
+-
+       if (request_irq(pxakbd->irq, pxakbd_interrupt, 0, "pxakbd", pxakbd)) {
+               printk(KERN_ERR "pxakbd: can't request irq %d\n", pxakbd->irq);
+               ret = -EBUSY;
+@@ -279,6 +269,7 @@
                KPC_ME | KPC_DE |   /* matrix and direct keypad enabled */
                ((pxakbd->pd->matrix.cols-1)<<23) | /* columns */
                ((pxakbd->pd->matrix.rows-1)<<26) | /* rows */
                KPC_MS_ALL); /* scan all columns */
  
        pxa_set_cken(CKEN19_KEYPAD, 1);
+@@ -375,13 +366,11 @@
+ static int pxakbd_remove(struct platform_device *pdev)
+ {
+       struct pxakbd *pxakbd = platform_get_drvdata(pdev);
+-
++      input_unregister_device(pxakbd->input);
+       platform_set_drvdata(pdev, NULL);
+       release_resource(pxakbd->res);
+       free_irq(pxakbd->irq, pxakbd);
+-      input_unregister_device(pxakbd->input);
+       kfree(pxakbd);
+-
+       return 0;
+ }