summaryrefslogtreecommitdiff
path: root/packages/linux/linux-ezx
diff options
context:
space:
mode:
Diffstat (limited to 'packages/linux/linux-ezx')
-rw-r--r--packages/linux/linux-ezx/defconfig-a7804
-rw-r--r--packages/linux/linux-ezx/defconfig-e6804
-rw-r--r--packages/linux/linux-ezx/e680-fix-keypad.patch150
-rw-r--r--packages/linux/linux-ezx/e680-keypad-compile-HACK.patch42
-rw-r--r--packages/linux/linux-ezx/ezx-backlight-r1.patch277
-rw-r--r--packages/linux/linux-ezx/pxakbd-fix-directkeys.patch15
6 files changed, 446 insertions, 46 deletions
diff --git a/packages/linux/linux-ezx/defconfig-a780 b/packages/linux/linux-ezx/defconfig-a780
index 550ba4a786..f61784f96a 100644
--- a/packages/linux/linux-ezx/defconfig-a780
+++ b/packages/linux/linux-ezx/defconfig-a780
@@ -857,7 +857,7 @@ CONFIG_NEW_LEDS=y
CONFIG_LEDS_CLASS=y
CONFIG_LEDS_TRIGGERS=y
# CONFIG_LEDS_E680 is not set
-CONFIG_LEDS_A780=m
+CONFIG_LEDS_A780=y
CONFIG_LEDS_TRIGGER_TIMER=y
#
@@ -914,7 +914,7 @@ CONFIG_LOGO_LINUX_CLUT224=y
CONFIG_BACKLIGHT_LCD_SUPPORT=y
CONFIG_BACKLIGHT_CLASS_DEVICE=y
CONFIG_BACKLIGHT_DEVICE=y
-CONFIG_BACKLIGHT_EZX=m
+CONFIG_BACKLIGHT_EZX=y
CONFIG_LCD_CLASS_DEVICE=m
CONFIG_LCD_DEVICE=y
diff --git a/packages/linux/linux-ezx/defconfig-e680 b/packages/linux/linux-ezx/defconfig-e680
index 97d1602f20..52bf0d75f6 100644
--- a/packages/linux/linux-ezx/defconfig-e680
+++ b/packages/linux/linux-ezx/defconfig-e680
@@ -856,7 +856,7 @@ CONFIG_SPI_BITBANG=m
CONFIG_NEW_LEDS=y
CONFIG_LEDS_CLASS=y
CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_E680=m
+CONFIG_LEDS_E680=y
# CONFIG_LEDS_A780 is not set
CONFIG_LEDS_TRIGGER_TIMER=y
@@ -914,7 +914,7 @@ CONFIG_LOGO_LINUX_CLUT224=y
CONFIG_BACKLIGHT_LCD_SUPPORT=y
CONFIG_BACKLIGHT_CLASS_DEVICE=y
CONFIG_BACKLIGHT_DEVICE=y
-CONFIG_BACKLIGHT_EZX=m
+CONFIG_BACKLIGHT_EZX=y
CONFIG_LCD_CLASS_DEVICE=m
CONFIG_LCD_DEVICE=y
diff --git a/packages/linux/linux-ezx/e680-fix-keypad.patch b/packages/linux/linux-ezx/e680-fix-keypad.patch
new file mode 100644
index 0000000000..b40283f332
--- /dev/null
+++ b/packages/linux/linux-ezx/e680-fix-keypad.patch
@@ -0,0 +1,150 @@
+
+#
+# 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
+@@ -341,71 +341,25 @@
+ };
+ #endif
+
+-/* keyboard */
+-
+-#if defined(CONFIG_PXA_EZX_V700)
+-#error "kbd matrix still needs to be converted to new row/col layout"
+-static unsigned char ezx_keycode[] = {
+- /* col 0 */
+- KEY_UP, KEY_DOWN, KEY_LEFT, KEY_RIGHT,
+- KEYPAD_POUND, KEY_0, KEY_9, 0,
+- /* col 1 */
+- KEY_2, KEY_4, KEY_6, KEY_8,
+- KEY_7, KEYPAD_SLEFT, KEYPAD_SRIGHT, 0,
+- /* col 2 */
+- KEY_MENU, KEY_1, KEY_3, KEY_5,
+- KEY_KPASTERISK, KEY_VOLUMEUP, KEY_VOLUMEDOWN, 0,
+- /* col 3 */
+- KEY_CAMERA, KEYPAD_CLEAR, KEYPAD_CARRIER, KEYPAD_ACTIVATE,
+- KEYPAD_SEND, KEYPAD_SMART, KEYPAD_VAVR, 0,
+-};
+-static unsigned char ezx_direct_keycode[] = {
+- KEYPAD_NONE,
+- KEYPAD_NONE,
+- KEYPAD_NONE,
+- KEYPAD_NONE,
+- KEYPAD_NONE,
+- KEYPAD_NONE,
+-};
+-#elif defined(CONFIG_PXA_EZX_E680_P4A)
+-#error "kbd matrix still needs to be converted to new row/col layout"
+-static unsigned char ezx_keycode[] = {
+- /* col 0 */
+- KEY_UP, KEY_DOWN, KEY_LEFT, 0, 0, 0, 0, 0,
+- /* col 1 */
+- KEY_RIGHT, KEY_CENTER, KEY_HOME, 0, 0, 0, 0, 0,
+- /* col 2 */
+- KEYPAD_GAME_R, 0, KEYPAD_GAME_L, 0, 0, 0, 0, 0,
+- /* col 3 */
+- KEY_A, KEY_B, 0, 0, 0, 0, 0, 0,
+-};
+-static unsigned char ezx_direct_keycode[] = {
+- KEY_CAMERA,
+- KEYPAD_NONE,
+- KEYPAD_NONE,
+- KEYPAD_NONE,
+- KEY_POWER,
+- KEYPAD_NONE,
+-};
+-#elif defined(CONFIG_PXA_EZX_E680)
+-#error "kbd matrix still needs to be converted to new row/col layout"
++/*
++ * PXA Keyboard
++ */
++#if defined(CONFIG_PXA_EZX_E680)
+ static unsigned char ezx_keycode[] = {
+- /* col 0 */
+- KEY_UP, KEY_DOWN, 0, 0, 0, 0, 0, 0,
+- /* col 1 */
+- KEY_RIGHT, KEY_LEFT, 0, 0, 0, 0, 0, 0,
+- /* col 2 */
+- 0, KEYPAD_GAME_R, 0, 0, 0, 0, 0, 0,
+- /* col 3 */
+- KEYPAD_HOME, KEYPAD_GAME_L, KEYPAD_CENTER, 0, 0, 0, 0, 0,
++ /* row 0 */
++ KEY_UP, KEY_RIGHT, 0, KEY_PHONE,
++ /* row 1 */
++ KEY_DOWN, KEY_LEFT, KEY_VOLUMEUP, KEY_VOLUMEDOWN,
++ /* row 2 */
++ 0, 0, 0, KEY_KPENTER,
+ };
+ static unsigned char ezx_direct_keycode[] = {
+ KEY_CAMERA,
+- KEYPAD_NONE,
+- KEYPAD_NONE,
+- KEYPAD_A,
++ 0,
++ 0,
++ KEY_HOME,
+ KEY_POWER,
+- KEYPAD_B,
++ KEY_MENU,
+ };
+ #elif defined(CONFIG_PXA_EZX_A780)
+ static unsigned char ezx_keycode[] = {
+@@ -424,22 +378,12 @@
+ KEY_CAMERA,
+ };
+ #else
+-#error "no EZX subarchitecture defined !?!"
++#error "no EZX subarchitecture defined"
+ #endif
+
+ static int ezx_kbd_init(void)
+ {
+-#if defined(CONFIG_PXA_EZX_E680_P4A)
+- pxa_gpio_mode(93 | GPIO_ALT_FN_1_IN); /* KP_DKIN<0>, VR Key */
+- pxa_gpio_mode(97 | GPIO_ALT_FN_1_IN); /* KP_DKIN<4>, power key */
+- pxa_gpio_mode(100 | GPIO_ALT_FN_1_IN); /* KP_MKIN<0> */
+- pxa_gpio_mode(101 | GPIO_ALT_FN_1_IN); /* KP_MKIN<1> */
+- pxa_gpio_mode(102 | GPIO_ALT_FN_1_IN); /* KP_MKIN<2> */
+- pxa_gpio_mode(103 | GPIO_ALT_FN_2_OUT); /* KP_MKOUT<0> */
+- pxa_gpio_mode(104 | GPIO_ALT_FN_2_OUT); /* KP_MKOUT<1> */
+- pxa_gpio_mode(105 | GPIO_ALT_FN_2_OUT); /* KP_MKOUT<2> */
+- pxa_gpio_mode(106 | GPIO_ALT_FN_2_OUT); /* KP_MKOUT<3> */
+-#elif defined(CONFIG_PXA_EZX_E680)
++#if defined(CONFIG_PXA_EZX_E680)
+ pxa_gpio_mode(93 | GPIO_ALT_FN_1_IN); /* KP_DKIN<0>, VR Key */
+ pxa_gpio_mode(96 | GPIO_ALT_FN_1_IN); /* KP_DKIN<3>, GAME_A */
+ pxa_gpio_mode(97 | GPIO_ALT_FN_1_IN); /* KP_DKIN<4>, power key */
+@@ -455,7 +399,7 @@
+ GPDR(GPIO_TC_MM_EN) |= GPIO_bit(GPIO_TC_MM_EN);
+ GPSR(GPIO_TC_MM_EN) = GPIO_bit(GPIO_TC_MM_EN);
+ PGSR3 |= GPIO_bit(GPIO_TC_MM_EN);
+-#elif defined (CONFIG_PXA_EZX_A780)
++#elif defined(CONFIG_PXA_EZX_A780)
+ pxa_gpio_mode(93 | GPIO_ALT_FN_1_IN); /* KP_DKIN<0>, voice_rec */
+ pxa_gpio_mode(97 | GPIO_ALT_FN_3_IN); /* KP_MKIN<3> */
+ pxa_gpio_mode(98 | GPIO_ALT_FN_3_IN); /* KP_MKIN<4> */
+@@ -476,10 +420,7 @@
+ .scan_interval = HZ/40,
+ .matrix = {
+ .keycode = &ezx_keycode,
+-#if defined(CONFIG_ARCH_EXZ_E680_P4A)
+- .cols = 4,
+- .rows = 3,
+-#elif defined(CONFIG_PXA_EZX_E680)
++#if defined(CONFIG_PXA_EZX_E680)
+ .cols = 4,
+ .rows = 3,
+ #elif defined(CONFIG_PXA_EZX_A780)
+@@ -489,9 +430,7 @@
+ },
+ .direct = {
+ .keycode = &ezx_direct_keycode,
+-#if defined(CONFIG_PXA_EZX_E680_P4A)
+- .num = 4,
+-#elif defined(CONFIG_PXA_EZX_E680)
++#if defined(CONFIG_PXA_EZX_E680)
+ .num = 5,
+ #elif defined(CONFIG_PXA_EZX_A780)
+ .num = 1,
diff --git a/packages/linux/linux-ezx/e680-keypad-compile-HACK.patch b/packages/linux/linux-ezx/e680-keypad-compile-HACK.patch
deleted file mode 100644
index 47d07db695..0000000000
--- a/packages/linux/linux-ezx/e680-keypad-compile-HACK.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-
-#
-# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher
-#
-
---- linux-2.6.16/arch/arm/mach-pxa/ezx.c~e680-keypad-compile-fix.patch 2006-05-31 18:47:58.000000000 +0200
-+++ linux-2.6.16/arch/arm/mach-pxa/ezx.c 2006-05-31 18:51:57.000000000 +0200
-@@ -404,24 +404,20 @@
- KEYPAD_NONE,
- };
- #elif defined(CONFIG_PXA_EZX_E680)
--#error "kbd matrix still needs to be converted to new row/col layout"
- static unsigned char ezx_keycode[] = {
-- /* col 0 */
-- KEY_UP, KEY_DOWN, 0, 0, 0, 0, 0, 0,
-- /* col 1 */
-- KEY_RIGHT, KEY_LEFT, 0, 0, 0, 0, 0, 0,
-- /* col 2 */
-- 0, KEYPAD_GAME_R, 0, 0, 0, 0, 0, 0,
-- /* col 3 */
-- KEYPAD_HOME, KEYPAD_GAME_L, KEYPAD_CENTER, 0, 0, 0, 0, 0,
-+ /* row 0 */
-+ KEY_KPENTER, KEY_MENU, KEY_CANCEL, KEY_PAGEUP, KEY_UP,
-+ /* row 1 */
-+ KEY_KP1, KEY_KP2, KEY_KP3, KEY_ENTER, KEY_KPENTER, /*center joypad */
-+ /* row 2 */
-+ KEY_KP4, KEY_KP5, KEY_KP6, KEY_PAGEDOWN, KEY_PHONE,
-+ /* row 3 */
-+ KEY_KP7, KEY_KP8, KEY_KP9, KEY_PHONE, KEY_LEFT,
-+ /* row 4 */
-+ KEY_KPASTERISK, KEY_KP0, KEY_KPDOT, KEY_PAGEDOWN, KEY_DOWN,
- };
- static unsigned char ezx_direct_keycode[] = {
- KEY_CAMERA,
-- KEYPAD_NONE,
-- KEYPAD_NONE,
-- KEYPAD_A,
-- KEY_POWER,
-- KEYPAD_B,
- };
- #elif defined(CONFIG_PXA_EZX_A780)
- static unsigned char ezx_keycode[] = {
diff --git a/packages/linux/linux-ezx/ezx-backlight-r1.patch b/packages/linux/linux-ezx/ezx-backlight-r1.patch
new file mode 100644
index 0000000000..a277f19344
--- /dev/null
+++ b/packages/linux/linux-ezx/ezx-backlight-r1.patch
@@ -0,0 +1,277 @@
+
+#
+# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher
+#
+
+--- linux-2.6.16/arch/arm/mach-pxa/ezx.c~ezx-backlight-r1.patch 2006-06-08 19:33:36.000000000 +0200
++++ linux-2.6.16/arch/arm/mach-pxa/ezx.c 2006-06-08 19:33:37.000000000 +0200
+@@ -274,34 +274,9 @@
+ .udc_command = ezx_udc_command,
+ };
+
+-/* pxafb */
+-
+-#define BKLIGHT_PRESCALE 2
+-#define BKLIGHT_PERIOD 49
+-#define DEFAULT_DUTYCYCLE 25
+-#define MAX_DUTYCYCLE (BKLIGHT_PERIOD+1)
+-#define MIN_DUTYCYCLE 0
+-
+-static void pxafb_backlight_power(int on)
+-{
+- if (on) {
+- CKEN |= CKEN0_PWM0;
+- PWM_CTRL0 = BKLIGHT_PRESCALE;
+- PWM_PERVAL0 = BKLIGHT_PERIOD;
+- PWM_PWDUTY0 = DEFAULT_DUTYCYCLE;
+-
+- GPDR0 |= 0x00010000; //PWM0 is GPIO16
+- pxa_gpio_mode(GPIO16_PWM0_MD);
+- } else {
+- PWM_PWDUTY0 = 0;
+- GAFR0_U &= 0xfffffffc;
+- GPDR0 &= 0xfffeffff; /* set gpio16 (pwm0) as input */
+- CKEN &= ~CKEN0_PWM0;
+- PWM_PWDUTY0 = MIN_DUTYCYCLE;
+- }
+-}
+-
+-//#define mdelay(x) udelay((x)*1000)
++/*
++ * EZX PXA Framebuffer
++ */
+
+ static void pxafb_lcd_power(int on)
+ {
+@@ -326,35 +301,24 @@
+ .xres = 240,
+ .yres = 320,
+ .bpp = 16,
+-
+ .hsync_len = 10,
+ .left_margin = 20,
+ .right_margin = 10,
+-
+ .vsync_len = 2,
+ .upper_margin = 3,
+ .lower_margin = 2,
+-
+ .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
+-
+ .lccr0 = 0x002008F8,
+ .lccr3 = 0x0430FF09,
+-
+- .pxafb_backlight_power = &pxafb_backlight_power,
+- .pxafb_lcd_power = &pxafb_lcd_power,
+-};
+-
+-
+-/* backlight for lcd */
+-
+-static struct resource ezx_backlight_resources[] = {
++ .pxafb_lcd_power= &pxafb_lcd_power,
+ };
+
+-static struct platform_device ezx_backlight_device = {
+- .name = "ezx-lcd-backlight",
++/*
++ * EZX LCD Backlight
++ */
++static struct platform_device ezxbacklight_device = {
++ .name = "ezx-bl",
+ .id = -1,
+- .resource = ezx_backlight_resources,
+- .num_resources = ARRAY_SIZE(ezx_backlight_resources),
+ };
+
+ #ifdef CONFIG_PXA_EZX_E680
+@@ -786,6 +750,7 @@
+
+ static struct platform_device *devices[] __initdata = {
+ &ezx_bp_device,
++ &ezxbacklight_device,
+ #ifdef CONFIG_PXA_EZX_E680
+ &e680led_device,
+ #endif
+--- linux-2.6.16/drivers/video/backlight/Kconfig~ezx-backlight-r1.patch 2006-06-08 19:33:34.000000000 +0200
++++ linux-2.6.16/drivers/video/backlight/Kconfig 2006-06-08 19:33:37.000000000 +0200
+@@ -58,3 +58,12 @@
+ If you have a HP Jornada 680, say y to enable the
+ backlight driver.
+
++config BACKLIGHT_EZX
++ tristate "Motorola EXZ Backlight Driver (A780/E680/E680i)"
++ depends on BACKLIGHT_DEVICE && PXA_EZX
++ default y
++ help
++ If you have a Motorola A780 or E680(i), say y to enable the
++ backlight driver.
++
++
+--- linux-2.6.16/drivers/video/backlight/Makefile~ezx-backlight-r1.patch 2006-03-20 06:53:29.000000000 +0100
++++ linux-2.6.16/drivers/video/backlight/Makefile 2006-06-08 19:33:37.000000000 +0200
+@@ -5,3 +5,5 @@
+ obj-$(CONFIG_BACKLIGHT_CORGI) += corgi_bl.o
+ obj-$(CONFIG_BACKLIGHT_HP680) += hp680_bl.o
+ obj-$(CONFIG_SHARP_LOCOMO) += locomolcd.o
++obj-$(CONFIG_BACKLIGHT_EZX) += ezx_bl.o
++
+--- /dev/null 2006-06-08 19:04:31.354926880 +0200
++++ linux-2.6.16/drivers/video/backlight/ezx_bl.c 2006-06-08 20:52:33.000000000 +0200
+@@ -0,0 +1,156 @@
++/*
++ * Backlight Driver for Motorola A780 and E680(i) GSM Phones.
++ *
++ * Copyright 2006 Vanille Media
++ *
++ * Author: Michael Lauer <mickey@Vanille.de>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ */
++
++#include <linux/module.h>
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/platform_device.h>
++#include <linux/spinlock.h>
++#include <linux/fb.h>
++#include <linux/backlight.h>
++
++#include <asm/arch/pxa-regs.h>
++#include <asm/arch/ezx.h>
++
++#define EZX_MIN_INTENSITY 00
++#define EZX_MAX_INTENSITY 50
++#define EZX_DEFAULT_INTENSITY 25
++
++static spinlock_t bl_lock = SPIN_LOCK_UNLOCKED;
++static struct backlight_device *ezx_backlight_device;
++static int last_intensity;
++
++static int ezxbl_send_intensity(struct backlight_device *bd)
++{
++ unsigned long flags;
++ int intensity = bd->props->brightness;
++
++ printk( KERN_DEBUG "ezx_set_intensity to %d\n", intensity );
++
++ if (bd->props->power != FB_BLANK_UNBLANK)
++ intensity = 0;
++ if (bd->props->fb_blank != FB_BLANK_UNBLANK)
++ intensity = 0;
++
++ spin_lock_irqsave(&bl_lock, flags);
++
++ printk( KERN_DEBUG "backlight last intensity was %d, new intensity is %d\n", last_intensity, intensity );
++
++ if ( !last_intensity && intensity ) {
++ printk( KERN_DEBUG "backlight power ON\n" );
++ PWM_CTRL0 = 2; /* pre-scaler */
++ PWM_PWDUTY0 = intensity; /* duty cycle */
++ PWM_PERVAL0 = 49; /* period */
++ pxa_gpio_mode(GPIO16_PWM0_MD); /* set GPIO16 as alternate function + output */
++ pxa_set_cken(CKEN0_PWM0, 1); /* clock enable */
++ }
++ else if ( last_intensity && !intensity ) {
++ printk( KERN_DEBUG "backlight power OFF\n" );
++ PWM_PWDUTY0 = 0;
++ GAFR0_U &= 0xFFFFFFFC; /* ??? */
++ pxa_set_cken(CKEN0_PWM0, 0); /* clock disable */
++ pxa_gpio_mode(GPIO16_PWM0); /* set GPIO16 as input */
++ } else if ( last_intensity && intensity ) {
++ printk( KERN_DEBUG "backlight adjusting duty cycle\n" );
++ PWM_PWDUTY0 = intensity; /* duty cycle */
++ }
++ spin_unlock_irqrestore(&bl_lock, flags);
++ last_intensity = intensity;
++ return 0;
++}
++
++static int ezxbl_get_intensity(struct backlight_device *bd)
++{
++ return last_intensity;
++}
++
++static int ezxbl_set_intensity(struct backlight_device *bd)
++{
++ return ezxbl_send_intensity(ezx_backlight_device);
++}
++
++#ifdef CONFIG_PM
++static int ezxbl_suspend(struct platform_device *pdev, pm_message_t state)
++{
++ //set suspend flag
++ ezxbl_set_intensity(ezx_backlight_device);
++ return 0;
++}
++
++static int ezxbl_resume(struct platform_device *pdev)
++{
++ // set resume flag
++ ezxbl_set_intensity(ezx_backlight_device);
++ return 0;
++}
++#else
++#define ezxbl_suspend NULL
++#define ezxbl_resume NULL
++#endif
++
++static struct backlight_properties ezxbl_data = {
++ .owner = THIS_MODULE,
++ .get_brightness = ezxbl_get_intensity,
++ .max_brightness = EZX_MAX_INTENSITY,
++ .update_status = ezxbl_set_intensity,
++};
++
++static int __init ezxbl_probe(struct platform_device *pdev)
++{
++ ezx_backlight_device = backlight_device_register ("ezx-bl",
++ NULL, &ezxbl_data);
++ if (IS_ERR (ezx_backlight_device))
++ return PTR_ERR (ezx_backlight_device);
++
++ ezxbl_data.power = FB_BLANK_UNBLANK;
++ ezxbl_data.brightness = EZX_DEFAULT_INTENSITY;
++ ezxbl_set_intensity(ezx_backlight_device);
++
++ printk("EZX Backlight Driver Initialized.\n");
++ return 0;
++}
++
++static int ezxbl_remove(struct platform_device *pdev)
++{
++ backlight_device_unregister(ezx_backlight_device);
++
++ printk("EZX Backlight Driver Unloaded.\n");
++ return 0;
++}
++
++static struct platform_driver ezxbl_driver = {
++ .probe = ezxbl_probe,
++ .remove = ezxbl_remove,
++ .suspend = ezxbl_suspend,
++ .resume = ezxbl_resume,
++ .driver = {
++ .name = "ezx-bl",
++ },
++};
++
++static int __init ezxbl_init(void)
++{
++ return platform_driver_register(&ezxbl_driver);
++}
++
++static void __exit ezxbl_exit(void)
++{
++ platform_driver_unregister(&ezxbl_driver);
++}
++
++module_init(ezxbl_init);
++module_exit(ezxbl_exit);
++
++MODULE_AUTHOR("Michael Lauer <mickey@Vanille.de>");
++MODULE_DESCRIPTION("Backlight Driver for Motorola A780|E680(i)");
++MODULE_LICENSE("GPL");
diff --git a/packages/linux/linux-ezx/pxakbd-fix-directkeys.patch b/packages/linux/linux-ezx/pxakbd-fix-directkeys.patch
new file mode 100644
index 0000000000..e1d0d7c26e
--- /dev/null
+++ b/packages/linux/linux-ezx/pxakbd-fix-directkeys.patch
@@ -0,0 +1,15 @@
+
+#
+# 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 @@
+ KPC_ME | KPC_DE | /* matrix and direct keypad enabled */
+ ((pxakbd->pd->matrix.cols-1)<<23) | /* columns */
+ ((pxakbd->pd->matrix.rows-1)<<26) | /* rows */
++ ((pxakbd->pd->direct.num-1)<<6) | /* direct keys */
+ KPC_MS_ALL); /* scan all columns */
+
+ pxa_set_cken(CKEN19_KEYPAD, 1);