Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

ARM: OMAP: Add support for Amstrad Delta keypad

This adds support for the keypad on the top of the Amstrad Delta. It's
just a standard omap-keypad so all we need to do is add the keypad
layout and platform data to the board definition file.

Signed-off-by: Jonathan McDowell <noodles@earth.li>
Signed-off-by: Tony Lindgren <tony@atomide.com>

authored by

Jonathan McDowell and committed by
Tony Lindgren
325d50b6 c3695015

+109
+109
arch/arm/mach-omap1/board-ams-delta.c
··· 14 14 15 15 #include <linux/kernel.h> 16 16 #include <linux/init.h> 17 + #include <linux/input.h> 17 18 #include <linux/platform_device.h> 18 19 19 20 #include <asm/hardware.h> ··· 24 23 25 24 #include <asm/arch/board-ams-delta.h> 26 25 #include <asm/arch/gpio.h> 26 + #include <asm/arch/keypad.h> 27 27 #include <asm/arch/mux.h> 28 28 #include <asm/arch/usb.h> 29 29 #include <asm/arch/board.h> ··· 32 30 33 31 static u8 ams_delta_latch1_reg; 34 32 static u16 ams_delta_latch2_reg; 33 + 34 + static int ams_delta_keymap[] = { 35 + KEY(0, 0, KEY_F1), /* Advert */ 36 + 37 + KEY(3, 0, KEY_COFFEE), /* Games */ 38 + KEY(2, 0, KEY_QUESTION), /* Directory */ 39 + KEY(3, 2, KEY_CONNECT), /* Internet */ 40 + KEY(2, 1, KEY_SHOP), /* Services */ 41 + KEY(1, 1, KEY_PHONE), /* VoiceMail */ 42 + 43 + KEY(1, 0, KEY_DELETE), /* Delete */ 44 + KEY(2, 2, KEY_PLAY), /* Play */ 45 + KEY(0, 1, KEY_PAGEUP), /* Up */ 46 + KEY(3, 1, KEY_PAGEDOWN), /* Down */ 47 + KEY(0, 2, KEY_EMAIL), /* ReadEmail */ 48 + KEY(1, 2, KEY_STOP), /* Stop */ 49 + 50 + /* Numeric keypad portion */ 51 + KEY(7, 0, KEY_KP1), 52 + KEY(6, 0, KEY_KP2), 53 + KEY(5, 0, KEY_KP3), 54 + KEY(7, 1, KEY_KP4), 55 + KEY(6, 1, KEY_KP5), 56 + KEY(5, 1, KEY_KP6), 57 + KEY(7, 2, KEY_KP7), 58 + KEY(6, 2, KEY_KP8), 59 + KEY(5, 2, KEY_KP9), 60 + KEY(6, 3, KEY_KP0), 61 + KEY(7, 3, KEY_KPASTERISK), 62 + KEY(5, 3, KEY_KPDOT), /* # key */ 63 + KEY(2, 7, KEY_NUMLOCK), /* Mute */ 64 + KEY(1, 7, KEY_KPMINUS), /* Recall */ 65 + KEY(1, 6, KEY_KPPLUS), /* Redial */ 66 + KEY(6, 7, KEY_KPSLASH), /* Handsfree */ 67 + KEY(0, 6, KEY_ENTER), /* Video */ 68 + 69 + KEY(4, 7, KEY_CAMERA), /* Photo */ 70 + 71 + KEY(4, 0, KEY_F2), /* Home */ 72 + KEY(4, 1, KEY_F3), /* Office */ 73 + KEY(4, 2, KEY_F4), /* Mobile */ 74 + KEY(7, 7, KEY_F5), /* SMS */ 75 + KEY(5, 7, KEY_F6), /* Email */ 76 + 77 + /* QWERTY portion of keypad */ 78 + KEY(4, 3, KEY_Q), 79 + KEY(3, 3, KEY_W), 80 + KEY(2, 3, KEY_E), 81 + KEY(1, 3, KEY_R), 82 + KEY(0, 3, KEY_T), 83 + KEY(7, 4, KEY_Y), 84 + KEY(6, 4, KEY_U), 85 + KEY(5, 4, KEY_I), 86 + KEY(4, 4, KEY_O), 87 + KEY(3, 4, KEY_P), 88 + 89 + KEY(2, 4, KEY_A), 90 + KEY(1, 4, KEY_S), 91 + KEY(0, 4, KEY_D), 92 + KEY(7, 5, KEY_F), 93 + KEY(6, 5, KEY_G), 94 + KEY(5, 5, KEY_H), 95 + KEY(4, 5, KEY_J), 96 + KEY(3, 5, KEY_K), 97 + KEY(2, 5, KEY_L), 98 + 99 + KEY(1, 5, KEY_Z), 100 + KEY(0, 5, KEY_X), 101 + KEY(7, 6, KEY_C), 102 + KEY(6, 6, KEY_V), 103 + KEY(5, 6, KEY_B), 104 + KEY(4, 6, KEY_N), 105 + KEY(3, 6, KEY_M), 106 + KEY(2, 6, KEY_SPACE), 107 + 108 + KEY(0, 7, KEY_LEFTSHIFT), /* Vol up */ 109 + KEY(3, 7, KEY_LEFTCTRL), /* Vol down */ 110 + 111 + 0 112 + }; 35 113 36 114 void ams_delta_latch1_write(u8 mask, u8 value) 37 115 { ··· 173 91 { OMAP_TAG_USB, &ams_delta_usb_config }, 174 92 }; 175 93 94 + static struct resource ams_delta_kp_resources[] = { 95 + [0] = { 96 + .start = INT_KEYBOARD, 97 + .end = INT_KEYBOARD, 98 + .flags = IORESOURCE_IRQ, 99 + }, 100 + }; 101 + 102 + static struct omap_kp_platform_data ams_delta_kp_data = { 103 + .rows = 8, 104 + .cols = 8, 105 + .keymap = ams_delta_keymap, 106 + .keymapsize = ARRAY_SIZE(ams_delta_keymap), 107 + .delay = 9, 108 + }; 109 + 110 + static struct platform_device ams_delta_kp_device = { 111 + .name = "omap-keypad", 112 + .id = -1, 113 + .dev = { 114 + .platform_data = &ams_delta_kp_data, 115 + }, 116 + .num_resources = ARRAY_SIZE(ams_delta_kp_resources), 117 + .resource = ams_delta_kp_resources, 118 + }; 119 + 176 120 static struct platform_device ams_delta_led_device = { 177 121 .name = "ams-delta-led", 178 122 .id = -1 179 123 }; 180 124 181 125 static struct platform_device *ams_delta_devices[] __initdata = { 126 + &ams_delta_kp_device, 182 127 &ams_delta_led_device, 183 128 }; 184 129