diff options
author | Jonathan McDowell <noodles@earth.li> | 2006-12-06 20:13:52 -0500 |
---|---|---|
committer | Tony Lindgren <tony@atomide.com> | 2007-09-20 21:34:49 -0400 |
commit | 325d50b660519398dc875b4cffedd0fc2cc4f425 (patch) | |
tree | 548415728f9bd3cf183f1f0d977c8d92d3288e01 /arch/arm | |
parent | c3695015087e21ff30606bf7fc661de1582af81b (diff) |
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>
Diffstat (limited to 'arch/arm')
-rw-r--r-- | arch/arm/mach-omap1/board-ams-delta.c | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/arch/arm/mach-omap1/board-ams-delta.c b/arch/arm/mach-omap1/board-ams-delta.c index 8437d065ada5..fa2da7490dbe 100644 --- a/arch/arm/mach-omap1/board-ams-delta.c +++ b/arch/arm/mach-omap1/board-ams-delta.c | |||
@@ -14,6 +14,7 @@ | |||
14 | 14 | ||
15 | #include <linux/kernel.h> | 15 | #include <linux/kernel.h> |
16 | #include <linux/init.h> | 16 | #include <linux/init.h> |
17 | #include <linux/input.h> | ||
17 | #include <linux/platform_device.h> | 18 | #include <linux/platform_device.h> |
18 | 19 | ||
19 | #include <asm/hardware.h> | 20 | #include <asm/hardware.h> |
@@ -23,6 +24,7 @@ | |||
23 | 24 | ||
24 | #include <asm/arch/board-ams-delta.h> | 25 | #include <asm/arch/board-ams-delta.h> |
25 | #include <asm/arch/gpio.h> | 26 | #include <asm/arch/gpio.h> |
27 | #include <asm/arch/keypad.h> | ||
26 | #include <asm/arch/mux.h> | 28 | #include <asm/arch/mux.h> |
27 | #include <asm/arch/usb.h> | 29 | #include <asm/arch/usb.h> |
28 | #include <asm/arch/board.h> | 30 | #include <asm/arch/board.h> |
@@ -31,6 +33,86 @@ | |||
31 | static u8 ams_delta_latch1_reg; | 33 | static u8 ams_delta_latch1_reg; |
32 | static u16 ams_delta_latch2_reg; | 34 | static u16 ams_delta_latch2_reg; |
33 | 35 | ||
36 | static int ams_delta_keymap[] = { | ||
37 | KEY(0, 0, KEY_F1), /* Advert */ | ||
38 | |||
39 | KEY(3, 0, KEY_COFFEE), /* Games */ | ||
40 | KEY(2, 0, KEY_QUESTION), /* Directory */ | ||
41 | KEY(3, 2, KEY_CONNECT), /* Internet */ | ||
42 | KEY(2, 1, KEY_SHOP), /* Services */ | ||
43 | KEY(1, 1, KEY_PHONE), /* VoiceMail */ | ||
44 | |||
45 | KEY(1, 0, KEY_DELETE), /* Delete */ | ||
46 | KEY(2, 2, KEY_PLAY), /* Play */ | ||
47 | KEY(0, 1, KEY_PAGEUP), /* Up */ | ||
48 | KEY(3, 1, KEY_PAGEDOWN), /* Down */ | ||
49 | KEY(0, 2, KEY_EMAIL), /* ReadEmail */ | ||
50 | KEY(1, 2, KEY_STOP), /* Stop */ | ||
51 | |||
52 | /* Numeric keypad portion */ | ||
53 | KEY(7, 0, KEY_KP1), | ||
54 | KEY(6, 0, KEY_KP2), | ||
55 | KEY(5, 0, KEY_KP3), | ||
56 | KEY(7, 1, KEY_KP4), | ||
57 | KEY(6, 1, KEY_KP5), | ||
58 | KEY(5, 1, KEY_KP6), | ||
59 | KEY(7, 2, KEY_KP7), | ||
60 | KEY(6, 2, KEY_KP8), | ||
61 | KEY(5, 2, KEY_KP9), | ||
62 | KEY(6, 3, KEY_KP0), | ||
63 | KEY(7, 3, KEY_KPASTERISK), | ||
64 | KEY(5, 3, KEY_KPDOT), /* # key */ | ||
65 | KEY(2, 7, KEY_NUMLOCK), /* Mute */ | ||
66 | KEY(1, 7, KEY_KPMINUS), /* Recall */ | ||
67 | KEY(1, 6, KEY_KPPLUS), /* Redial */ | ||
68 | KEY(6, 7, KEY_KPSLASH), /* Handsfree */ | ||
69 | KEY(0, 6, KEY_ENTER), /* Video */ | ||
70 | |||
71 | KEY(4, 7, KEY_CAMERA), /* Photo */ | ||
72 | |||
73 | KEY(4, 0, KEY_F2), /* Home */ | ||
74 | KEY(4, 1, KEY_F3), /* Office */ | ||
75 | KEY(4, 2, KEY_F4), /* Mobile */ | ||
76 | KEY(7, 7, KEY_F5), /* SMS */ | ||
77 | KEY(5, 7, KEY_F6), /* Email */ | ||
78 | |||
79 | /* QWERTY portion of keypad */ | ||
80 | KEY(4, 3, KEY_Q), | ||
81 | KEY(3, 3, KEY_W), | ||
82 | KEY(2, 3, KEY_E), | ||
83 | KEY(1, 3, KEY_R), | ||
84 | KEY(0, 3, KEY_T), | ||
85 | KEY(7, 4, KEY_Y), | ||
86 | KEY(6, 4, KEY_U), | ||
87 | KEY(5, 4, KEY_I), | ||
88 | KEY(4, 4, KEY_O), | ||
89 | KEY(3, 4, KEY_P), | ||
90 | |||
91 | KEY(2, 4, KEY_A), | ||
92 | KEY(1, 4, KEY_S), | ||
93 | KEY(0, 4, KEY_D), | ||
94 | KEY(7, 5, KEY_F), | ||
95 | KEY(6, 5, KEY_G), | ||
96 | KEY(5, 5, KEY_H), | ||
97 | KEY(4, 5, KEY_J), | ||
98 | KEY(3, 5, KEY_K), | ||
99 | KEY(2, 5, KEY_L), | ||
100 | |||
101 | KEY(1, 5, KEY_Z), | ||
102 | KEY(0, 5, KEY_X), | ||
103 | KEY(7, 6, KEY_C), | ||
104 | KEY(6, 6, KEY_V), | ||
105 | KEY(5, 6, KEY_B), | ||
106 | KEY(4, 6, KEY_N), | ||
107 | KEY(3, 6, KEY_M), | ||
108 | KEY(2, 6, KEY_SPACE), | ||
109 | |||
110 | KEY(0, 7, KEY_LEFTSHIFT), /* Vol up */ | ||
111 | KEY(3, 7, KEY_LEFTCTRL), /* Vol down */ | ||
112 | |||
113 | 0 | ||
114 | }; | ||
115 | |||
34 | void ams_delta_latch1_write(u8 mask, u8 value) | 116 | void ams_delta_latch1_write(u8 mask, u8 value) |
35 | { | 117 | { |
36 | ams_delta_latch1_reg &= ~mask; | 118 | ams_delta_latch1_reg &= ~mask; |
@@ -91,12 +173,39 @@ static struct omap_board_config_kernel ams_delta_config[] = { | |||
91 | { OMAP_TAG_USB, &ams_delta_usb_config }, | 173 | { OMAP_TAG_USB, &ams_delta_usb_config }, |
92 | }; | 174 | }; |
93 | 175 | ||
176 | static struct resource ams_delta_kp_resources[] = { | ||
177 | [0] = { | ||
178 | .start = INT_KEYBOARD, | ||
179 | .end = INT_KEYBOARD, | ||
180 | .flags = IORESOURCE_IRQ, | ||
181 | }, | ||
182 | }; | ||
183 | |||
184 | static struct omap_kp_platform_data ams_delta_kp_data = { | ||
185 | .rows = 8, | ||
186 | .cols = 8, | ||
187 | .keymap = ams_delta_keymap, | ||
188 | .keymapsize = ARRAY_SIZE(ams_delta_keymap), | ||
189 | .delay = 9, | ||
190 | }; | ||
191 | |||
192 | static struct platform_device ams_delta_kp_device = { | ||
193 | .name = "omap-keypad", | ||
194 | .id = -1, | ||
195 | .dev = { | ||
196 | .platform_data = &ams_delta_kp_data, | ||
197 | }, | ||
198 | .num_resources = ARRAY_SIZE(ams_delta_kp_resources), | ||
199 | .resource = ams_delta_kp_resources, | ||
200 | }; | ||
201 | |||
94 | static struct platform_device ams_delta_led_device = { | 202 | static struct platform_device ams_delta_led_device = { |
95 | .name = "ams-delta-led", | 203 | .name = "ams-delta-led", |
96 | .id = -1 | 204 | .id = -1 |
97 | }; | 205 | }; |
98 | 206 | ||
99 | static struct platform_device *ams_delta_devices[] __initdata = { | 207 | static struct platform_device *ams_delta_devices[] __initdata = { |
208 | &ams_delta_kp_device, | ||
100 | &ams_delta_led_device, | 209 | &ams_delta_led_device, |
101 | }; | 210 | }; |
102 | 211 | ||