diff options
Diffstat (limited to 'packages/linux/linux-ezx-2.6.21/e680-kbd.patch')
-rw-r--r-- | packages/linux/linux-ezx-2.6.21/e680-kbd.patch | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/packages/linux/linux-ezx-2.6.21/e680-kbd.patch b/packages/linux/linux-ezx-2.6.21/e680-kbd.patch new file mode 100644 index 0000000000..054c567d6b --- /dev/null +++ b/packages/linux/linux-ezx-2.6.21/e680-kbd.patch @@ -0,0 +1,93 @@ +Index: linux-2.6.21/arch/arm/mach-pxa/ezx-e680.c +=================================================================== +--- linux-2.6.21.orig/arch/arm/mach-pxa/ezx-e680.c 2007-05-08 13:03:53.000000000 -0300 ++++ linux-2.6.21/arch/arm/mach-pxa/ezx-e680.c 2007-05-08 14:21:56.000000000 -0300 +@@ -15,18 +15,21 @@ + #include <linux/fb.h> + #include <linux/mmc/host.h> + #include <linux/irq.h> ++#include <linux/input.h> + + #include <asm/mach-types.h> + #include <asm/mach/arch.h> + #include <asm/arch/pxa-regs.h> + #include <asm/arch/pxafb.h> + #include <asm/arch/mmc.h> ++#include <asm/arch/kbd.h> + + #include "generic.h" + #include "ezx.h" + + extern void ezx_lcd_power(int, struct fb_var_screeninfo *); + extern void ezx_backlight_power(int); ++extern void __init pxa_set_kbd_info(struct pxakbd_platform_data *); + + #ifdef CONFIG_EZX_PCAP + extern int ezx_pcap_mmcsd_power(int); +@@ -144,6 +147,58 @@ + .pxafb_lcd_power = &ezx_lcd_power, + }; + ++static unsigned char e680_keycode[] = { ++ /* row 0 */ ++ KEY_UP, KEY_RIGHT, KEY_RESERVED, KEY_PHONE, ++ /* row 1 */ ++ KEY_DOWN, KEY_LEFT, KEY_VOLUMEUP, KEY_VOLUMEDOWN, ++ /* row 2 */ ++ KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_KPENTER, ++}; ++ ++static unsigned char e680_direct_keycode[] = { ++ KEY_CAMERA, ++ KEY_RESERVED, ++ KEY_RESERVED, ++ KEY_HOME, ++ KEY_POWER, ++ KEY_MENU, ++}; ++ ++static int e680_kbd_init(void) ++{ ++ 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 */ ++ pxa_gpio_mode(98 | GPIO_ALT_FN_1_IN); /* KP_DKIN<5>, GAME_B */ ++ 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> */ ++ pxa_gpio_mode(GPIO_TC_MM_EN); ++ 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); ++ return 0; ++} ++ ++static struct pxakbd_platform_data e680_kbd_platform_data = { ++ .init = &e680_kbd_init, ++ .scan_interval = HZ/40, ++ .matrix = { ++ .keycode = e680_keycode, ++ .cols = 4, ++ .rows = 3, ++ }, ++ .direct = { ++ .keycode = e680_direct_keycode, ++ .num = 6, ++ }, ++}; ++ + static struct platform_device *devices[] __initdata = { + }; + +@@ -162,6 +217,7 @@ + + set_pxa_fb_info(&e680_fb_info); + pxa_set_mci_info(&e680_mci_platform_data); ++ pxa_set_kbd_info(&e680_kbd_platform_data); + + platform_add_devices(devices, ARRAY_SIZE(devices)); + } |