diff options
Diffstat (limited to 'packages/linux/linux-ezx-2.6.23/patches/e680-kbd.patch')
-rw-r--r-- | packages/linux/linux-ezx-2.6.23/patches/e680-kbd.patch | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/packages/linux/linux-ezx-2.6.23/patches/e680-kbd.patch b/packages/linux/linux-ezx-2.6.23/patches/e680-kbd.patch new file mode 100644 index 0000000000..27e33a0641 --- /dev/null +++ b/packages/linux/linux-ezx-2.6.23/patches/e680-kbd.patch @@ -0,0 +1,93 @@ +Index: linux-2.6.23/arch/arm/mach-pxa/ezx-e680.c +=================================================================== +--- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-e680.c 2007-10-24 20:01:37.000000000 +0200 ++++ linux-2.6.23/arch/arm/mach-pxa/ezx-e680.c 2007-10-24 20:01:49.000000000 +0200 +@@ -15,6 +15,7 @@ + #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> +@@ -23,11 +24,13 @@ + #include <asm/arch/ezx.h> + #include <asm/arch/ezx-pcap.h> + #include <asm/arch/mmc.h> ++#include <asm/arch/kbd.h> + + #include "generic.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); +@@ -236,6 +239,58 @@ + .resource = e680_emu_resources, + }; + ++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 = { + &e680_pcap_device, + &e680_emu_device, +@@ -256,6 +311,7 @@ + + set_pxa_fb_info(&e680_fb_info); + pxa_set_mci_info(&e680_mci_platform_data); ++ pxa_set_kbd_info(&e680_kbd_platform_data); + + /* clear EMU MUX1/MUX2 (low) to close the audio path to EMU */ + pxa_gpio_mode(GPIO_EMU_MUX1|GPIO_OUT); |